Documentation Source Text

Hex Artifact Content
Login

Artifact 74805a4832060e621c6deace83868a42e38b69494166eefee1c15e13de1a834c:


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 74 63 6c 3e 68 64 5f  . </p>..<tcl>hd_
3bd0: 66 72 61 67 6d 65 6e 74 20 61 75 74 6f 61 6e 61  fragment autoana
3be0: 6c 79 7a 65 20 7b 61 75 74 6f 6d 61 74 69 63 61  lyze {automatica
3bf0: 6c 6c 79 20 72 75 6e 6e 69 6e 67 20 41 4e 41 4c  lly running ANAL
3c00: 59 5a 45 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 41  YZE}</tcl>.<h2>A
3c10: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 52 75 6e  utomatically Run
3c20: 6e 69 6e 67 20 41 4e 41 4c 59 5a 45 3c 2f 68 32  ning ANALYZE</h2
3c30: 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41 47 4d  >..<p>The [PRAGM
3c40: 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f 6d 6d  A optimize] comm
3c50: 61 6e 64 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  and will automat
3c60: 69 63 61 6c 6c 79 20 72 75 6e 20 41 4e 41 4c 59  ically run ANALY
3c70: 5a 45 20 6f 6e 20 69 6e 64 69 76 69 64 75 61 6c  ZE on individual
3c80: 0a 74 61 62 6c 65 73 20 6f 6e 20 61 6e 20 61 73  .tables on an as
3c90: 2d 6e 65 65 64 65 64 20 62 61 73 69 73 2e 20 20  -needed basis.  
3ca0: 54 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  The recommended 
3cb0: 70 72 61 63 74 69 63 65 20 69 73 20 66 6f 72 20  practice is for 
3cc0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 74 6f 20  applications.to 
3cd0: 69 6e 76 6f 6b 65 20 74 68 65 20 5b 50 52 41 47  invoke the [PRAG
3ce0: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 73 74 61  MA optimize] sta
3cf0: 74 65 6d 65 6e 74 20 6a 75 73 74 20 62 65 66 6f  tement just befo
3d00: 72 65 20 63 6c 6f 73 69 6e 67 20 65 61 63 68 20  re closing each 
3d10: 64 61 74 61 62 61 73 65 0a 63 6f 6e 6e 65 63 74  database.connect
3d20: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ion.</p>..<p>Eac
3d30: 68 20 53 51 4c 69 74 65 20 5b 64 61 74 61 62 61  h SQLite [databa
3d40: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 72  se connection] r
3d50: 65 63 6f 72 64 73 20 63 61 73 65 73 20 77 68 65  ecords cases whe
3d60: 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  n the query plan
3d70: 6e 65 72 20 77 6f 75 6c 64 0a 62 65 6e 65 66 69  ner would.benefi
3d80: 74 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 61 63  t from having ac
3d90: 63 75 72 61 74 65 20 72 65 73 75 6c 74 73 20 6f  curate results o
3da0: 66 20 41 4e 41 4c 59 5a 45 20 61 74 20 68 61 6e  f ANALYZE at han
3db0: 64 2e 20 20 54 68 65 73 65 20 72 65 63 6f 72 64  d.  These record
3dc0: 73 0a 61 72 65 20 68 65 6c 64 20 69 6e 20 6d 65  s.are held in me
3dd0: 6d 6f 72 79 20 61 6e 64 20 61 63 63 75 6d 75 6c  mory and accumul
3de0: 61 74 65 20 6f 76 65 72 20 74 68 65 20 6c 69 66  ate over the lif
3df0: 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  e of a database 
3e00: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 54 68 65 20  connection..The 
3e10: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
3e20: 5d 20 63 6f 6d 6d 61 6e 64 20 6c 6f 6f 6b 73 20  ] command looks 
3e30: 61 74 20 74 68 6f 73 65 20 72 65 63 6f 72 64 73  at those records
3e40: 20 61 6e 64 20 72 75 6e 73 20 41 4e 41 4c 59 5a   and runs ANALYZ
3e50: 45 20 6f 6e 20 6f 6e 6c 79 0a 74 68 6f 73 65 20  E on only.those 
3e60: 74 61 62 6c 65 73 20 66 6f 72 20 77 68 69 63 68  tables for which
3e70: 20 6e 65 77 20 6f 72 20 75 70 64 61 74 65 64 20   new or updated 
3e80: 41 4e 41 4c 59 5a 45 20 64 61 74 61 20 73 65 65  ANALYZE data see
3e90: 6d 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  ms likely to be 
3ea0: 75 73 65 66 75 6c 2e 0a 49 6e 20 6d 6f 73 74 20  useful..In most 
3eb0: 63 61 73 65 73 20 5b 50 52 41 47 4d 41 20 6f 70  cases [PRAGMA op
3ec0: 74 69 6d 69 7a 65 5d 20 77 69 6c 6c 20 6e 6f 74  timize] will not
3ed0: 20 72 75 6e 20 41 4e 41 4c 59 5a 45 2c 20 62 75   run ANALYZE, bu
3ee0: 74 20 69 74 20 77 69 6c 6c 20 6f 63 63 61 73 69  t it will occasi
3ef0: 6f 6e 61 6c 6c 79 0a 64 6f 20 73 6f 20 65 69 74  onally.do so eit
3f00: 68 65 72 20 66 6f 72 20 74 61 62 6c 65 73 20 74  her for tables t
3f10: 68 61 74 20 68 61 76 65 20 6e 65 76 65 72 20 62  hat have never b
3f20: 65 66 6f 72 65 20 62 65 65 6e 20 61 6e 61 6c 79  efore been analy
3f30: 7a 65 64 2c 20 6f 72 20 66 6f 72 20 74 61 62 6c  zed, or for tabl
3f40: 65 73 0a 74 68 61 74 20 68 61 76 65 20 67 72 6f  es.that have gro
3f50: 77 6e 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79  wn significantly
3f60: 20 73 69 6e 63 65 20 74 68 65 79 20 77 65 72 65   since they were
3f70: 20 6c 61 73 74 20 61 6e 61 6c 79 7a 65 64 2e 3c   last analyzed.<
3f80: 2f 70 3e 0a 0a 3c 70 3e 53 69 6e 63 65 20 74 68  /p>..<p>Since th
3f90: 65 20 61 63 74 69 6f 6e 73 20 6f 66 20 5b 50 52  e actions of [PR
3fa0: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 61  AGMA optimize] a
3fb0: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  re determined to
3fc0: 20 73 6f 6d 65 20 65 78 74 65 6e 74 20 62 79 0a   some extent by.
3fd0: 70 72 69 6f 72 20 71 75 65 72 69 65 73 20 74 68  prior queries th
3fe0: 61 74 20 68 61 76 65 20 62 65 65 6e 20 65 76 61  at have been eva
3ff0: 6c 75 61 74 65 64 20 6f 6e 20 74 68 65 20 73 61  luated on the sa
4000: 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  me database conn
4010: 65 63 74 69 6f 6e 2c 20 69 74 0a 69 73 20 72 65  ection, it.is re
4020: 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 5b  commended that [
4030: 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d  PRAGMA optimize]
4040: 20 62 65 20 64 65 66 65 72 72 65 64 20 75 6e 74   be deferred unt
4050: 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  il the database 
4060: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 69 73 20 63 6c  connection.is cl
4070: 6f 73 69 6e 67 20 61 6e 64 20 68 61 73 20 74 68  osing and has th
4080: 75 73 20 68 61 64 20 61 6e 20 6f 70 70 6f 72 74  us had an opport
4090: 75 6e 69 74 79 20 74 6f 20 61 63 63 75 6d 75 6c  unity to accumul
40a0: 61 74 65 20 61 73 20 6d 75 73 74 20 75 73 61 67  ate as must usag
40b0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 73  e information.as
40c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 49 74 20 69   possible.  It i
40d0: 73 20 61 6c 73 6f 20 72 65 61 73 6f 6e 61 62 6c  s also reasonabl
40e0: 65 20 74 6f 20 73 65 74 20 61 20 74 69 6d 65 72  e to set a timer
40f0: 20 74 6f 20 72 75 6e 20 5b 50 52 41 47 4d 41 20   to run [PRAGMA 
4100: 6f 70 74 69 6d 69 7a 65 5d 0a 65 76 65 72 79 20  optimize].every 
4110: 66 65 77 20 68 6f 75 72 73 2c 20 6f 72 20 65 76  few hours, or ev
4120: 65 72 79 20 66 65 77 20 64 61 79 73 2c 20 66 6f  ery few days, fo
4130: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
4140: 63 74 69 6f 6e 73 20 74 68 61 74 20 73 74 61 79  ctions that stay
4150: 20 6f 70 65 6e 0a 66 6f 72 20 61 20 6c 6f 6e 67   open.for a long
4160: 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41   time.</p>..<p>A
4170: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
4180: 20 64 65 73 69 72 65 20 6d 6f 72 65 20 63 6f 6e   desire more con
4190: 74 72 6f 6c 20 63 61 6e 20 72 75 6e 20 5b 50 52  trol can run [PR
41a0: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 28 30 78  AGMA optimize(0x
41b0: 30 33 29 5d 20 74 6f 20 0a 6f 62 74 61 69 6e 20  03)] to .obtain 
41c0: 61 20 6c 69 73 74 20 6f 66 20 41 4e 41 4c 59 5a  a list of ANALYZ
41d0: 45 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20  E commands that 
41e0: 53 51 4c 69 74 65 20 74 68 69 6e 6b 73 20 61 72  SQLite thinks ar
41f0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 6f  e appropriate to
4200: 20 72 75 6e 2c 0a 62 75 74 20 77 69 74 68 6f 75   run,.but withou
4210: 74 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 6e 69  t actually runni
4220: 6e 67 20 74 68 6f 73 65 20 63 6f 6d 6d 61 6e 64  ng those command
4230: 73 2e 20 20 49 66 20 74 68 65 20 72 65 74 75 72  s.  If the retur
4240: 6e 65 64 20 73 65 74 20 69 73 20 0a 6e 6f 6e 2d  ned set is .non-
4250: 65 6d 70 74 79 2c 20 74 68 65 20 61 70 70 6c 69  empty, the appli
4260: 63 61 74 69 6f 6e 20 63 61 6e 20 74 68 65 6e 20  cation can then 
4270: 6d 61 6b 65 20 61 20 64 65 63 69 73 69 6f 6e 20  make a decision 
4280: 61 62 6f 75 74 20 77 68 65 74 68 65 72 20 6f 72  about whether or
4290: 20 6e 6f 74 0a 74 6f 20 72 75 6e 20 74 68 65 20   not.to run the 
42a0: 73 75 67 67 65 73 74 65 64 20 41 4e 41 4c 59 5a  suggested ANALYZ
42b0: 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 70 65 72 68  E commands, perh
42c0: 61 70 73 20 61 66 74 65 72 20 70 72 6f 6d 70 74  aps after prompt
42d0: 69 6e 67 20 74 68 65 20 75 73 65 72 0a 66 6f 72  ing the user.for
42e0: 20 67 75 69 64 61 6e 63 65 2e 3c 2f 70 3e 0a 0a   guidance.</p>..
42f0: 3c 70 3e 54 68 65 20 5b 50 52 41 47 4d 41 20 6f  <p>The [PRAGMA o
4300: 70 74 69 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64  ptimize] command
4310: 20 77 61 73 20 66 69 72 73 74 20 69 6e 74 72 6f   was first intro
4320: 64 75 63 65 64 20 77 69 74 68 20 0a 53 51 4c 69  duced with .SQLi
4330: 74 65 20 33 2e 31 38 2e 30 20 28 5b 64 61 74 65  te 3.18.0 ([date
4340: 6f 66 3a 33 2e 31 38 2e 30 5d 29 20 61 6e 64 20  of:3.18.0]) and 
4350: 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  is a no-op for a
4360: 6c 6c 20 70 72 69 6f 72 20 72 65 6c 65 61 73 65  ll prior release
4370: 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  s.of SQLite.</p>
4380: 0a 0a 3c 68 32 3e 41 6e 74 69 63 69 70 61 74 65  ..<h2>Anticipate
4390: 64 20 46 75 74 75 72 65 20 45 6e 68 61 6e 63 65  d Future Enhance
43a0: 6d 65 6e 74 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 41  ments</h2>..<p>A
43b0: 6c 6c 20 65 78 69 73 74 69 6e 67 20 76 65 72 73  ll existing vers
43c0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64  ions of SQLite d
43d0: 6f 20 61 20 66 75 6c 6c 20 74 61 62 6c 65 20 73  o a full table s
43e0: 63 61 6e 20 66 6f 72 20 41 4e 41 4c 59 5a 45 2e  can for ANALYZE.
43f0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 73 6c    This can be.sl
4400: 6f 77 20 66 6f 72 20 6d 75 6c 74 69 2d 67 69 67  ow for multi-gig
4410: 61 62 79 74 65 20 61 6e 64 20 6c 61 72 67 65 72  abyte and larger
4420: 20 64 61 74 61 62 61 73 65 73 2e 20 20 46 75 74   databases.  Fut
4430: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
4440: 53 51 4c 69 74 65 20 6d 69 67 68 74 0a 75 73 65  SQLite might.use
4450: 20 72 61 6e 64 6f 6d 20 73 61 6d 70 6c 69 6e 67   random sampling
4460: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 66   rather than a f
4470: 75 6c 6c 20 74 61 62 6c 65 20 73 63 61 6e 20 74  ull table scan t
4480: 6f 20 6f 62 74 61 69 6e 20 65 73 74 69 6d 61 74  o obtain estimat
4490: 65 73 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62  es for the.datab
44a0: 61 73 65 20 73 68 61 70 65 2c 20 65 73 70 65 63  ase shape, espec
44b0: 69 61 6c 6c 79 20 6f 6e 20 6c 61 72 67 65 72 20  ially on larger 
44c0: 74 61 62 6c 65 73 2e 20 20 54 68 65 20 72 65 73  tables.  The res
44d0: 75 6c 74 73 20 77 6f 75 6c 64 20 61 70 70 72 6f  ults would appro
44e0: 78 69 6d 61 74 65 2c 20 62 75 74 20 0a 77 69 6c  ximate, but .wil
44f0: 6c 20 62 65 20 63 6c 6f 73 65 20 65 6e 6f 75 67  l be close enoug
4500: 68 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e  h for query plan
4510: 6e 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 20 20  ning purposes.  
4520: 41 73 20 6f 66 20 32 30 31 37 2d 30 33 2d 32 30  As of 2017-03-20
4530: 2c 20 74 68 69 73 0a 63 6f 6e 63 65 70 74 20 68  , this.concept h
4540: 61 73 20 62 65 65 6e 20 74 65 73 74 65 64 20 69  as been tested i
4550: 6e 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 62  n experimental b
4560: 72 61 6e 63 68 65 73 20 61 6e 64 20 61 70 70 65  ranches and appe
4570: 61 72 73 20 74 6f 20 77 6f 72 6b 20 77 65 6c 6c  ars to work well
4580: 2c 20 62 75 74 0a 68 61 73 20 6e 6f 74 20 62 65  , but.has not be
4590: 65 6e 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20 61  en folded into a
45a0: 6e 20 6f 66 66 69 63 69 61 6c 20 72 65 6c 65 61  n official relea
45b0: 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  se.</p>..<tcl>.#
45c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4610: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
4620: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 7b  TABASE} attach {
4630: 61 74 74 61 63 68 65 64 20 2a 41 54 54 41 43 48  attached *ATTACH
4640: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
4650: 6c 65 44 69 61 67 72 61 6d 20 61 74 74 61 63 68  leDiagram attach
4660: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
4670: 3e 20 5e 54 68 65 20 41 54 54 41 43 48 20 44 41  > ^The ATTACH DA
4680: 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74  TABASE statement
4690: 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61   adds another da
46a0: 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20  tabase .file to 
46b0: 74 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74  the current [dat
46c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
46d0: 5d 2e 20 0a 44 61 74 61 62 61 73 65 20 66 69 6c  ]. .Database fil
46e0: 65 73 20 74 68 61 74 20 77 65 72 65 20 70 72 65  es that were pre
46f0: 76 69 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  viously attached
4700: 20 63 61 6e 20 62 65 20 72 65 6d 6f 76 65 64 20   can be removed 
4710: 75 73 69 6e 67 0a 74 68 65 20 5b 44 45 54 41 43  using.the [DETAC
4720: 48 20 44 41 54 41 42 41 53 45 5d 20 63 6f 6d 6d  H DATABASE] comm
4730: 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69  and...<p>^The fi
4740: 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  lename for the d
4750: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61 74  atabase to be at
4760: 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76 61  tached is the va
4770: 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72 65  lue of.the expre
4780: 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
4790: 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53 20  s before the AS 
47a0: 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69  keyword..^The fi
47b0: 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  lename of the da
47c0: 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74  tabase follows t
47d0: 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63  he same semantic
47e0: 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d  s as the.filenam
47f0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73  e argument to [s
4800: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61  qlite3_open()] a
4810: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  nd [sqlite3_open
4820: 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65 63  _v2()]; the.spec
4830: 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f  ial name "[:memo
4840: 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69 6e  ry:]" results in
4850: 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64   an [in-memory d
4860: 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a  atabase] and an.
4870: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65 73  empty string res
4880: 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74 65  ults in a new te
4890: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
48a0: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
48b0: 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65 20  argument can be 
48c0: 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d  a [URI filename]
48d0: 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d 65   if URI filename
48e0: 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20 65   processing.is e
48f0: 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61 74  nable on the dat
4900: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
4910: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
4920: 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a 55  ehavior is for.U
4930: 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20  RI filenames to 
4940: 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f 77  be disabled, how
4950: 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74 20  ever that might 
4960: 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75  change in a futu
4970: 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53 51  re release.of SQ
4980: 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63 61  Lite, so applica
4990: 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20  tion developers 
49a0: 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20 70  are advised to p
49b0: 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  lan accordingly.
49c0: 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74 68  ..<p>The name th
49d0: 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  at occurs after 
49e0: 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 69  the AS keyword i
49f0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
4a00: 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64 20  e database.used 
4a10: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
4a20: 4c 69 74 65 2e 0a 5e 54 68 65 20 73 63 68 65 6d  Lite..^The schem
4a30: 61 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27 20 61  a-names 'main' a
4a40: 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66 65 72  nd .'temp' refer
4a50: 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64 61 74   to the main dat
4a60: 61 62 61 73 65 20 61 6e 64 20 74 68 65 20 64 61  abase and the da
4a70: 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
4a80: 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65  .temporary table
4a90: 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e  s.  ^The main an
4aa0: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4ab0: 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74 61 63   cannot be attac
4ac0: 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65 64 2e  hed or.detached.
4ad0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c  </p>..<p> ^(Tabl
4ae0: 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  es in an attache
4af0: 64 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  d database can b
4b00: 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 75 73  e referred to us
4b10: 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78 20 0a  ing the syntax .
4b20: 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 2e 74  <i>schema-name.t
4b30: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e  able-name</i>.)^
4b40: 20 20 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f    ^If the name o
4b50: 66 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 75  f the table is u
4b60: 6e 69 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c  nique.across all
4b70: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
4b80: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e  ses and the main
4b90: 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61   and temp databa
4ba0: 73 65 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69  ses, then the.<i
4bb0: 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
4bc0: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
4bd0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
4be0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
4bf0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
4c00: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
4c10: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
4c20: 68 65 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61  he .<i>schema-na
4c30: 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73  me</i> prefix is
4c40: 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20 74   not used on a t
4c50: 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c 20  able reference, 
4c60: 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20 63  then the.table c
4c70: 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e 65  hosen is the one
4c80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4c90: 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74 20   that was least 
4ca0: 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68 65  recently attache
4cb0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61  d.</p>..<p>.^Tra
4cc0: 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76  nsactions involv
4cd0: 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74  ing multiple att
4ce0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
4cf0: 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75  are atomic,.assu
4d00: 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61  ming that the ma
4d10: 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  in database is n
4d20: 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  ot "[:memory:]" 
4d30: 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61  and the .[journa
4d40: 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b  l_mode] is not [
4d50: 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65 20  WAL].  ^(If the 
4d60: 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73  main.database is
4d70: 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69   ":memory:" or i
4d80: 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  f the journal_mo
4d90: 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e 20  de is WAL, then 
4da0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f  .transactions co
4db0: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f  ntinue to be ato
4dc0: 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20  mic within each 
4dd0: 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62  individual.datab
4de0: 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66  ase file. But if
4df0: 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74   the host comput
4e00: 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68  er crashes in th
4e10: 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43  e middle.of a [C
4e20: 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f  OMMIT] where two
4e30: 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73   or more databas
4e40: 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61  e files are upda
4e50: 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f  ted,.some of tho
4e60: 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67  se files might g
4e70: 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77  et the changes w
4e80: 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68  here others.migh
4e90: 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c  t not.)^.</p>..<
4ea0: 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20 6c  p> ^There is a l
4eb0: 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20  imit, set using 
4ec0: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
4ed0: 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c  ] and .[SQLITE_L
4ee0: 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20  IMIT_ATTACHED], 
4ef0: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
4f00: 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20   databases that 
4f10: 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65  can be.simultane
4f20: 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74  ously attached t
4f30: 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  o a single datab
4f40: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c  ase connection.<
4f50: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
4f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fa0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
4fb0: 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41  on {BEGIN TRANSA
4fc0: 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69  CTION} transacti
4fd0: 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49  on {*BEGIN COMMI
4fe0: 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63  T ROLLBACK}..Rec
4ff0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
5000: 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a 52  ram begin-stmt.R
5010: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
5020: 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d  agram commit-stm
5030: 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  t.RecursiveBubbl
5040: 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63  eDiagram rollbac
5050: 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  k-stmt.</tcl>..<
5060: 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63  p>.^No changes c
5070: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
5080: 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65 70  e database excep
5090: 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  t within a trans
50a0: 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d  action..^Any com
50b0: 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65  mand that change
50c0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  s the database (
50d0: 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53  basically, any S
50e0: 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72  QL command.other
50f0: 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20   than [SELECT]) 
5100: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
5110: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
5120: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
5130: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
5140: 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61  effect.  ^Automa
5150: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20  tically started 
5160: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65  transactions.are
5170: 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20   committed when 
5180: 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20 66  the last query f
5190: 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  inishes..</p>..<
51a0: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
51b0: 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20   can be started 
51c0: 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74  manually using t
51d0: 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64  he BEGIN.command
51e0: 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73 61  .  ^(Such transa
51f0: 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70  ctions usually p
5200: 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68 65  ersist until the
5210: 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20   next.COMMIT or 
5220: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
5230: 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61 63  .  But a transac
5240: 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a  tion will also .
5250: 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65 20  ROLLBACK if the 
5260: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
5270: 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72 6f  ed or if an erro
5280: 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68 65  r occurs.and the
5290: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69   ROLLBACK confli
52a0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
52b0: 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69  gorithm is speci
52c0: 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65 20  fied.)^.See the 
52d0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
52e0: 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43   the [ON CONFLIC
52f0: 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64  T].clause for ad
5300: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5310: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52  tion about the R
5320: 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74  OLLBACK.conflict
5330: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
5340: 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rithm..</p>..<p>
5350: 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f  .^END TRANSACTIO
5360: 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  N is an alias fo
5370: 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a  r COMMIT..</p>..
5380: 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69 6f  <p> ^(Transactio
5390: 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ns created using
53a0: 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20   BEGIN...COMMIT 
53b0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e  do not nest.)^.^
53c0: 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e 73  For nested trans
53d0: 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68 65  actions, use the
53e0: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64   [SAVEPOINT] and
53f0: 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61   [RELEASE] comma
5400: 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41 56  nds..The "TO SAV
5410: 45 50 4f 49 4e 54 20 3c 79 79 74 65 72 6d 3e 6e  EPOINT <yyterm>n
5420: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 63 6c  ame</yyterm>" cl
5430: 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c  ause of the ROLL
5440: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  BACK command sho
5450: 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61 78  wn.in the syntax
5460: 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 69   diagram above i
5470: 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c  s only applicabl
5480: 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e to [SAVEPOINT]
5490: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20  .transactions.  
54a0: 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 69  ^An attempt to i
54b0: 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e 20  nvoke the BEGIN 
54c0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61  command within.a
54d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c   transaction wil
54e0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
54f0: 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73 73  rror, regardless
5500: 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65 20   of whether.the 
5510: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20  transaction was 
5520: 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56 45  started by [SAVE
5530: 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f  POINT] or a prio
5540: 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f  r BEGIN..^The CO
5550: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  MMIT command and
5560: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
5570: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  mmand without th
5580: 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b  e TO clause.work
5590: 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41   the same on [SA
55a0: 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63  VEPOINT] transac
55b0: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f  tions as they do
55c0: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
55d0: 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42 45  ns.started by BE
55e0: 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  GIN.</p>..<tcl>h
55f0: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64  d_fragment immed
5600: 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45  iate {BEGIN IMME
5610: 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45 58  DIATE} {BEGIN EX
5620: 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c  CLUSIVE}</tcl>.<
5630: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
5640: 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64   can be deferred
5650: 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20  , immediate, or 
5660: 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68  exclusive.  .^Th
5670: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
5680: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
5690: 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66  s deferred..^Def
56a0: 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74  erred means that
56b0: 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63   no locks are ac
56c0: 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61  quired.on the da
56d0: 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65  tabase until the
56e0: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
56f0: 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54  st accessed.  ^T
5700: 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65 72  hus with a.defer
5710: 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  red transaction,
5720: 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74 65   the BEGIN state
5730: 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73  ment itself does
5740: 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a   nothing to the.
5750: 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f  filesystem.  ^Lo
5760: 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75  cks.are not acqu
5770: 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  ired until the f
5780: 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72 69  irst read or wri
5790: 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e  te operation.  ^
57a0: 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f  The first read.o
57b0: 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74  peration against
57c0: 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65 61   a database crea
57d0: 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c  tes a [SHARED] l
57e0: 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73  ock and the firs
57f0: 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  t.write operatio
5800: 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45 53  n creates a [RES
5810: 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e  ERVED] lock.   ^
5820: 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75  Because the acqu
5830: 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73  isition of.locks
5840: 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
5850: 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64  il they are need
5860: 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62  ed, it is possib
5870: 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a  le that another.
5880: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
5890: 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61  s could create a
58a0: 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61   separate transa
58b0: 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20  ction and write 
58c0: 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  to.the database 
58d0: 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20  after the BEGIN 
58e0: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  on the current t
58f0: 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74  hread has execut
5900: 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e  ed..^If the tran
5910: 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64  saction is immed
5920: 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45  iate, then [RESE
5930: 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20  RVED] locks.are 
5940: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
5950: 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f  databases as soo
5960: 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20 63  n as the BEGIN c
5970: 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74  ommand is.execut
5980: 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74  ed, without wait
5990: 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61  ing for the.data
59a0: 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e  base to be used.
59b0: 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e    ^After a BEGIN
59c0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20   IMMEDIATE, .no 
59d0: 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65 20  other [database 
59e0: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c  connection] will
59f0: 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74   be able to writ
5a00: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
5a10: 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20  e or.do a BEGIN 
5a20: 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47  IMMEDIATE or BEG
5a30: 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20 5e  IN EXCLUSIVE.  ^
5a40: 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  Other processes 
5a50: 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20  can continue.to 
5a60: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61  read from the da
5a70: 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e  tabase, however.
5a80: 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65 20    ^An exclusive 
5a90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73  transaction caus
5aa0: 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c  es.[EXCLUSIVE] l
5ab0: 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69  ocks to be acqui
5ac0: 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62  red on all datab
5ad0: 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61 20  ases.  ^After a 
5ae0: 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c  BEGIN.EXCLUSIVE,
5af0: 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62   no other [datab
5b00: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
5b10: 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61 64  except for [read
5b20: 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f  _uncommitted].co
5b30: 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62  nnections will b
5b40: 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74  e able to read t
5b50: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
5b60: 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74  no other connect
5b70: 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63 65  ion without.exce
5b80: 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62  ption will be ab
5b90: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  le to write the 
5ba0: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
5bb0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
5bc0: 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e  s.complete..</p>
5bd0: 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69  ..<p>.^(An impli
5be0: 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  cit transaction 
5bf0: 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  (a transaction t
5c00: 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20 61  hat is started a
5c10: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f  utomatically,.no
5c20: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
5c30: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
5c40: 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20 61  ) is committed a
5c50: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
5c60: 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69 76  n.the last activ
5c70: 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69  e statement fini
5c80: 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d 65  shes.  A stateme
5c90: 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65 6e  nt finishes when
5ca0: 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73 74   its.prepared st
5cb0: 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69  atement is [sqli
5cc0: 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72 65  te3_reset() | re
5cd0: 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33  set] or.[sqlite3
5ce0: 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69  _finalize() | fi
5cf0: 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70  nalized].  An op
5d00: 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  en [sqlite3_blob
5d10: 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72 65  ] used for.incre
5d20: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20  mental BLOB I/O 
5d30: 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e 66  counts as an unf
5d40: 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65 6e  inished statemen
5d50: 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  t.  The [sqlite3
5d60: 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20  _blob].finishes 
5d70: 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c 69  when it is [sqli
5d80: 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29  te3_blob_close()
5d90: 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f   | closed].)^.</
5da0: 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70  p>..<p>.^The exp
5db0: 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d  licit COMMIT com
5dc0: 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64 69  mand runs immedi
5dd0: 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20 74  ately, even if t
5de0: 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e 67  here are.pending
5df0: 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
5e00: 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c  ents.  ^However,
5e10: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70 65   if there are pe
5e20: 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72  nding.write oper
5e30: 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d  ations, the COMM
5e40: 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20  IT command.will 
5e50: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
5e60: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
5e70: 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  BUSY]..</p>..<p>
5e80: 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  .^An attempt to 
5e90: 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d  execute COMMIT m
5ea0: 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74  ight also result
5eb0: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
5ec0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
5ed0: 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74  .if an another t
5ee0: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
5ef0: 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c   has a [shared l
5f00: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
5f10: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
5f20: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
5f30: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
5f40: 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d  ted.  ^When COMM
5f50: 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73  IT fails in this
5f60: 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61  .way, the transa
5f70: 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
5f80: 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d  tive and the COM
5f90: 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69  MIT can be retri
5fa0: 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74  ed later.after t
5fb0: 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61  he reader has ha
5fc0: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c  d a chance to cl
5fd0: 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49  ear..</p>..<p>.I
5fe0: 6e 20 76 65 72 79 20 6f 6c 64 20 76 65 72 73 69  n very old versi
5ff0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 28 62  ons of SQLite (b
6000: 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33 2e  efore version 3.
6010: 37 2e 31 31 20 2d 20 5b 64 61 74 65 6f 66 3a 33  7.11 - [dateof:3
6020: 2e 37 2e 31 31 5d 29 0a 74 68 65 20 52 4f 4c 4c  .7.11]).the ROLL
6030: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
6040: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
6050: 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  e .[SQLITE_BUSY]
6060: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
6070: 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65  y pending querie
6080: 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72 65 63  s.  ^In more rec
6090: 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent.versions of 
60a0: 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f 4c 4c  SQLite, the ROLL
60b0: 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63 65 65  BACK will procee
60c0: 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20 73 74  d and pending st
60d0: 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20 6f 66  atements.will of
60e0: 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64 2c 20  ten be aborted, 
60f0: 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74 6f 20  causing them to 
6100: 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c 49 54  return an [SQLIT
6110: 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53 51 4c  E_ABORT] or.[SQL
6120: 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
6130: 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e 20 53  CK] error..^In S
6140: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
6150: 38 2e 38 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38  8.8 ([dateof:3.8
6160: 2e 38 5d 29 20 61 6e 64 20 6c 61 74 65 72 2c 0a  .8]) and later,.
6170: 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20 77  a pending read w
6180: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75 6e  ill continue fun
6190: 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20 74  ctioning.after t
61a0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20 6c  he ROLLBACK as l
61b0: 6f 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c 42  ong as the ROLLB
61c0: 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64  ACK does not mod
61d0: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
61e0: 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c  .schema..</p>..<
61f0: 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f  p>.If [PRAGMA jo
6200: 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73  urnal_mode] is s
6210: 65 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20  et to OFF (thus 
6220: 64 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f  disabling the ro
6230: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66  llback journal.f
6240: 69 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62 65  ile) then the be
6250: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f  havior of the RO
6260: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69  LLBACK command i
6270: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70  s undefined..</p
6280: 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20  >..<h3>Response 
6290: 54 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e  To Errors Within
62a0: 20 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f   A Transaction</
62b0: 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65  h3>..<p> ^(If ce
62c0: 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65  rtain kinds of e
62d0: 72 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68  rrors occur with
62e0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
62f0: 2c 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  , the.transactio
6300: 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  n may or may not
6310: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
6320: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20  automatically.  
6330: 54 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20  The.errors that 
6340: 63 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75 74  can cause an aut
6350: 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b 20  omatic rollback 
6360: 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75  include:</p>..<u
6370: 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  l>.<li> [SQLITE_
6380: 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20  FULL]: database 
6390: 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69  or disk full.<li
63a0: 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d  > [SQLITE_IOERR]
63b0: 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72  : disk I/O error
63c0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55  .<li> [SQLITE_BU
63d0: 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e  SY]: database in
63e0: 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20   use by another 
63f0: 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51  process.<li> [SQ
6400: 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74  LITE_NOMEM]: out
6410: 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f 75 6c 3e   or memory.</ul>
6420: 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c  )^..<p>.^For all
6430: 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72 73   of these errors
6440: 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74  , SQLite attempt
6450: 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74  s to undo just t
6460: 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74  he one statement
6470: 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20  .it was working 
6480: 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61  on and leave cha
6490: 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20  nges from prior 
64a0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
64b0: 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73  n the.same trans
64c0: 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e  action intact an
64d0: 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20  d continue with 
64e0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
64f0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70    ^However, .dep
6500: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74  ending on the st
6510: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76  atement being ev
6520: 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
6530: 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20 74  point at which t
6540: 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  he.error occurs,
6550: 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63   it might be nec
6560: 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74  essary for SQLit
6570: 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  e to rollback an
6580: 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74  d.cancel the ent
6590: 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
65a0: 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f    ^An applicatio
65b0: 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68  n can tell which
65c0: 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f  .course of actio
65d0: 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79  n SQLite took by
65e0: 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
65f0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
6600: 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  it()] C-language
6610: 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a   interface.</p>.
6620: 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d  .<p>It is recomm
6630: 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c 69  ended that appli
6640: 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20  cations respond 
6650: 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69  to the errors.li
6660: 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65 78  sted above by ex
6670: 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67  plicitly issuing
6680: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d   a ROLLBACK comm
6690: 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74  and.  ^If the .t
66a0: 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61  ransaction has a
66b0: 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c  lready been roll
66c0: 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69  ed back automati
66d0: 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72  cally.by the err
66e0: 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65  or response, the
66f0: 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  n the ROLLBACK c
6700: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c  ommand will fail
6710: 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20   with an.error, 
6720: 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63  but no harm is c
6730: 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f  aused by this.</
6740: 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65  p>..<p>Future ve
6750: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
6760: 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65 20   may extend the 
6770: 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77  list of errors w
6780: 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65  hich.might cause
6790: 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73   automatic trans
67a0: 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e  action rollback.
67b0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
67c0: 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68  s of.SQLite migh
67d0: 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72 72  t change the err
67e0: 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e  or response.  In
67f0: 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20   particular, we 
6800: 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69  may.choose to si
6810: 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72  mplify the inter
6820: 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20 76  face in future v
6830: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
6840: 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65  e by.causing the
6850: 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f   errors above to
6860: 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64   force an uncond
6870: 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b  itional rollback
6880: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
6890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68d0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
68e0: 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d  tion {SAVEPOINT}
68f0: 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45   savepoint {SAVE
6900: 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a  POINT RELEASE}..
6910: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
6920: 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74  iagram savepoint
6930: 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42  -stmt.RecursiveB
6940: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c  ubbleDiagram rel
6950: 65 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72 73  ease-stmt.Recurs
6960: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
6970: 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c   rollback-stmt.<
6980: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45  /tcl>..<p> ^SAVE
6990: 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74  POINTs are a met
69a0: 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20  hod of creating 
69b0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69  transactions, si
69c0: 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d  milar to.[BEGIN]
69d0: 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65   and [COMMIT], e
69e0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 53  xcept that the S
69f0: 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c  AVEPOINT and REL
6a00: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72  EASE commands.ar
6a10: 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20  e named and may 
6a20: 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a  be nested.</p>..
6a30: 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49  <p> ^The SAVEPOI
6a40: 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  NT command start
6a50: 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
6a60: 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e  ion with a name.
6a70: 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f  .^The transactio
6a80: 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74  n names need not
6a90: 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20   be unique..^(A 
6aa0: 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65  SAVEPOINT can be
6ab0: 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20   started either 
6ac0: 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64  within or outsid
6ad0: 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e  e of.a [BEGIN]..
6ae0: 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28  .[COMMIT].)^  ^(
6af0: 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54  When a SAVEPOINT
6b00: 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f   is the outer-mo
6b10: 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64  st savepoint.and
6b20: 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69   it is not withi
6b30: 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43  n a [BEGIN]...[C
6b40: 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20  OMMIT] then the 
6b50: 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a  behavior is the.
6b60: 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45  same as BEGIN DE
6b70: 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54 49  FERRED TRANSACTI
6b80: 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ON.)^</p>..<p>^T
6b90: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6ba0: 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74  ommand reverts t
6bb0: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
6bc0: 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f  database back to
6bd0: 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73   what.it was jus
6be0: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72 72  t after the corr
6bf0: 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f  esponding SAVEPO
6c00: 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74  INT.  ^Note that
6c10: 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61   unlike that.pla
6c20: 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  in [ROLLBACK] co
6c30: 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74  mmand (without t
6c40: 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74  he TO keyword) t
6c50: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6c60: 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20  ommand.does not 
6c70: 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73  cancel the trans
6c80: 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61  action.  ^Instea
6c90: 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20  d of cancelling 
6ca0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  the transaction,
6cb0: 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  .the ROLLBACK TO
6cc0: 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74   command restart
6cd0: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
6ce0: 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20 62  n again at the b
6cf0: 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69  eginning..^All i
6d00: 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50  ntervening SAVEP
6d10: 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c  OINTs are cancel
6d20: 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e  ed, however.</p>
6d30: 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53  ..<p>^The RELEAS
6d40: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b  E command is lik
6d50: 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72  e a [COMMIT] for
6d60: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54   a SAVEPOINT..^T
6d70: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6d80: 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61  nd causes all sa
6d90: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f  vepoints back to
6da0: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
6db0: 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20  he .most recent 
6dc0: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
6dd0: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74   matching name t
6de0: 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f  o be removed fro
6df0: 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  m the .transacti
6e00: 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20  on stack.  ^The 
6e10: 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e  RELEASE of an in
6e20: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ner transaction.
6e30: 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61  does not cause a
6e40: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65  ny changes to be
6e50: 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20   written to the 
6e60: 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69  database file; i
6e70: 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73  t merely.removes
6e80: 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d   savepoints from
6e90: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6ea0: 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74   stack such that
6eb0: 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72   it is.no longer
6ec0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c   possible to ROL
6ed0: 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73  LBACK TO those s
6ee0: 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61  avepoints..^If a
6ef0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6f00: 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75   releases the ou
6f10: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
6f20: 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74  t, so.that the t
6f30: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6f40: 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20   becomes empty, 
6f50: 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20  then RELEASE is 
6f60: 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d  the same.as [COM
6f70: 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d  MIT]..^The [COMM
6f80: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  IT] command may 
6f90: 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61  be used to relea
6fa0: 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74  se all savepoint
6fb0: 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65  s and.commit the
6fc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65   transaction eve
6fd0: 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  n if the transac
6fe0: 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61  tion was origina
6ff0: 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61  lly started.by a
7000: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
7010: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nd instead of a 
7020: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e  [BEGIN] command.
7030: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
7040: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
7050: 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  in a RELEASE com
7060: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mand does not ma
7070: 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e  tch any.savepoin
7080: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  t currently in t
7090: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
70a0: 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61  tack, then no sa
70b0: 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c  vepoints are.rel
70c0: 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62  eased, the datab
70d0: 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ase is unchanged
70e0: 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53  , and the RELEAS
70f0: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  E command return
7100: 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  s.an error.</p>.
7110: 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61  .<p>^Note that a
7120: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
7130: 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74  ion might commit
7140: 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45   (using the RELE
7150: 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74  ASE command).but
7160: 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65   then later have
7170: 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65   its work undone
7180: 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69   by a ROLLBACK i
7190: 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73  n an outer trans
71a0: 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72  action..^A power
71b0: 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67   failure or prog
71c0: 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20  ram crash or OS 
71d0: 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65  crash will cause
71e0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a   the outer-most.
71f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72  transaction to r
7200: 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67  ollback, undoing
7210: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
7220: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
7230: 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65  within.that oute
7240: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65  r transaction, e
7250: 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74  ven changes that
7260: 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79   have supposedly
7270: 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64   been "committed
7280: 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53 45  ".by the RELEASE
7290: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74   command.  ^Cont
72a0: 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ent is not actua
72b0: 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e  lly committed on
72c0: 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c   the disk .until
72d0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74   the outermost t
72e0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
72f0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ts.</p>..<p>Ther
7300: 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61  e are several wa
7310: 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61  ys of thinking a
7320: 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53 45  bout the RELEASE
7330: 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c   command:</p>..<
7340: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65  ul>.<li><p>.Some
7350: 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c   people view REL
7360: 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75 69  EASE as the equi
7370: 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54  valent of COMMIT
7380: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
7390: 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63 63  ..This is an acc
73a0: 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66  eptable point of
73b0: 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73   view as long as
73c0: 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74   one remembers t
73d0: 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20  hat the.changes 
73e0: 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20  committed by an 
73f0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
7400: 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65  n might later be
7410: 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c   undone by a.rol
7420: 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65  lback in an oute
7430: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  r transaction.</
7440: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
7450: 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66  .Another view of
7460: 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61 74   RELEASE is that
7470: 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d   it merges a nam
7480: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ed transaction i
7490: 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74  nto its.parent t
74a0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74  ransaction, so t
74b0: 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72  hat the named tr
74c0: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
74d0: 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a  s parent become.
74e0: 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
74f0: 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c  tion.  After REL
7500: 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20  EASE, the named 
7510: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
7520: 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20  its parent.will 
7530: 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61  commit or rollba
7540: 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61  ck together, wha
7550: 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74 65  tever their fate
7560: 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c   may be..</p></l
7570: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20  i>..<li><p>.One 
7580: 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f  can also think o
7590: 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a  f savepoints as.
75a0: 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74  "marks" in the t
75b0: 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c  ransaction timel
75c0: 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69  ine.  In this vi
75d0: 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e  ew, the SAVEPOIN
75e0: 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65  T command.create
75f0: 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68  s a new mark, th
7600: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
7610: 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68  mmand rewinds th
7620: 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a  e timeline back.
7630: 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20  to a point just 
7640: 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20  after the named 
7650: 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45  mark, and the RE
7660: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72  LEASE command.er
7670: 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20  ases marks from 
7680: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74  the timeline wit
7690: 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61  hout actually ma
76a0: 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73  king any.changes
76b0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
76c0: 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  ..</p></li>.</ul
76d0: 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63  >....<h3>Transac
76e0: 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c  tion Nesting Rul
76f0: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  es</h3>..<p>^The
7700: 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f   last transactio
7710: 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62  n started will b
7720: 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e  e the first.tran
7730: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  saction committe
7740: 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  d or rolled back
7750: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
7760: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f  BEGIN] command o
7770: 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65  nly works if the
7780: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7790: 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a  ck is empty, or.
77a0: 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69  in other words i
77b0: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70  f there are no p
77c0: 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69  ending transacti
77d0: 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72  ons.  ^If the tr
77e0: 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20  ansaction.stack 
77f0: 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65  is not empty whe
7800: 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f  n the [BEGIN] co
7810: 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64  mmand is invoked
7820: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61  , then the comma
7830: 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd.fails with an
7840: 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
7850: 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f  ^The [COMMIT] co
7860: 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c  mmand commits al
7870: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72  l outstanding tr
7880: 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c  ansactions and l
7890: 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61  eaves.the transa
78a0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
78b0: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
78c0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
78d0: 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65 20  starts with the 
78e0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64 69  most recent addi
78f0: 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e  tion to the.tran
7900: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e  saction stack an
7910: 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65 70  d releases savep
7920: 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20  oints backwards 
7930: 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69  .in time until i
7940: 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61 76  t releases a sav
7950: 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61  epoint with a ma
7960: 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  tching savepoint
7970: 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61  -name..^Prior sa
7980: 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73  vepoints, even s
7990: 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d  avepoints with m
79a0: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
79b0: 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63  t-names, are.unc
79c0: 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20  hanged..^If the 
79d0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
79e0: 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73  causes the.trans
79f0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20  action stack to 
7a00: 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66  become empty (if
7a10: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
7a20: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
7a30: 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e  e.outermost tran
7a40: 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  saction from the
7a50: 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65   stack) then the
7a60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
7a70: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mits.</p>..<p>^T
7a80: 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  he [ROLLBACK] co
7a90: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20  mmand without a 
7aa0: 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20  TO clause rolls 
7ab0: 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61  backs all transa
7ac0: 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65  ctions.and leave
7ad0: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
7ae0: 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f  n stack empty.</
7af0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c  p>..<p>^The ROLL
7b00: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
7b10: 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  h a TO clause ro
7b20: 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63  lls back transac
7b30: 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b  tions going.back
7b40: 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61  wards in time ba
7b50: 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72  ck to the most r
7b60: 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20  ecent SAVEPOINT 
7b70: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
7b80: 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50  name..^The SAVEP
7b90: 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61  OINT with the ma
7ba0: 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61  tching name rema
7bb0: 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73  ins on the trans
7bc0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75  action stack,.bu
7bd0: 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  t all database c
7be0: 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75  hanges that occu
7bf0: 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74 20  rred after that 
7c00: 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72  SAVEPOINT was cr
7c10: 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64  eated.are rolled
7c20: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
7c30: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
7c40: 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  n a ROLLBACK TO 
7c50: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
7c60: 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50  .match any SAVEP
7c70: 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63  OINT on the stac
7c80: 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  k, then the ROLL
7c90: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69  BACK command fai
7ca0: 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  ls with an.error
7cb0: 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20   and leaves the 
7cc0: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
7cd0: 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e  abase unchanged.
7ce0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
7cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d30: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
7d40: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d  ion comment comm
7d50: 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f  ent {comment *co
7d60: 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73 69  mments}..Recursi
7d70: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
7d80: 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c  comment-syntax.<
7d90: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65  /tcl>..<p>^Comme
7da0: 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c 20  nts are not SQL 
7db0: 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63 61  commands, but ca
7dc0: 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  n occur within t
7dd0: 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20 71  he text of.SQL q
7de0: 75 65 72 69 65 73 20 70 61 73 73 65 64 20 74 6f  ueries passed to
7df0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7e00: 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c 61  e_v2()] and rela
7e10: 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  ted interfaces..
7e20: 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74 72  ^Comments are tr
7e30: 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70  eated as whitesp
7e40: 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65  ace by the parse
7e50: 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e  r..^Comments can
7e60: 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65 20   begin anywhere 
7e70: 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e 20  whitespace .can 
7e80: 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64  be found, includ
7e90: 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65  ing inside expre
7ea0: 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61 6e  ssions that span
7eb0: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7ec0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63  .</p>..<p>^SQL c
7ed0: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77 69  omments begin wi
7ee0: 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74 69  th two consecuti
7ef0: 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65 72  ve "-" character
7f00: 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a 61  s (ASCII 0x2d).a
7f10: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
7f20: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
7f30: 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20 63  e next newline c
7f40: 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49 20  haracter (ASCII 
7f50: 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74  0x0a).or until t
7f60: 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c  he end of input,
7f70: 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73   whichever comes
7f80: 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   first.</p>..<p>
7f90: 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74  ^C-style comment
7fa0: 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a  s begin.with "/*
7fb0: 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20  " and extend up 
7fc0: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
7fd0: 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20 63   the next "*/" c
7fe0: 68 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f 72  haracter pair.or
7ff0: 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f   until the end o
8000: 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76  f input, whichev
8010: 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 20  er comes first. 
8020: 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e   ^C-style commen
8030: 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74  ts.can span mult
8040: 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e  iple lines. </p>
8050: 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63  ..<p>^Comments c
8060: 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  an appear anywhe
8070: 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63 61  re whitespace ca
8080: 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69  n occur,.includi
8090: 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65 73  ng inside expres
80a0: 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68 65  sions and in the
80b0: 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65 72   middle of other
80c0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
80d0: 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f  .^Comments do no
80e0: 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  t nest..</p>...<
80f0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
8100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8140: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
8150: 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61 74  ATE INDEX} creat
8160: 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45 20  eindex {{CREATE 
8170: 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69  INDEX}}..Recursi
8180: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
8190: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
81a0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
81b0: 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63  e CREATE INDEX c
81c0: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
81d0: 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  of the keywords 
81e0: 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66  "CREATE INDEX" f
81f0: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e  ollowed.by the n
8200: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69  ame of the new i
8210: 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72  ndex, the keywor
8220: 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65  d "ON", the name
8230: 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79   of a previously
8240: 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74  .created table t
8250: 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64  hat is to be ind
8260: 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65  exed, and a pare
8270: 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
8280: 66 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 0a 6e  f table column.n
8290: 61 6d 65 73 20 61 6e 64 2f 6f 72 20 65 78 70 72  ames and/or expr
82a0: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
82b0: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e   used for the in
82c0: 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20  dex key..If the 
82d0: 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63  optional WHERE c
82e0: 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65  lause is include
82f0: 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65  d, then the inde
8300: 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c  x is a "[partial
8310: 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a   index]"..</p>..
8320: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
8330: 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63   {descidx} {desc
8340: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20  ending indices} 
8350: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
8360: 78 7d 20 5c 0a 20 20 20 20 7b 64 65 73 63 65 6e  x} \.    {descen
8370: 64 69 6e 67 20 69 6e 64 65 78 65 73 7d 20 7b 44  ding indexes} {D
8380: 45 53 43 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  ESC}</tcl>.<p>^E
8390: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
83a0: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61  or expression ca
83b0: 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
83c0: 20 6f 6e 65 0a 6f 66 20 74 68 65 20 22 41 53 43   one.of the "ASC
83d0: 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77  " or "DESC" keyw
83e0: 6f 72 64 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ords to indicate
83f0: 20 73 6f 72 74 20 6f 72 64 65 72 2e 0a 5e 54 68   sort order..^Th
8400: 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79  e sort order may
8410: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69   or may not be i
8420: 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67  gnored depending
8430: 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .on the database
8440: 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e   file format, an
8450: 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20  d in particular 
8460: 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d  the [schema form
8470: 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65  at number]..^The
8480: 20 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61   "legacy" schema
8490: 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f   format (1) igno
84a0: 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f  res index.sort o
84b0: 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63  rder.  ^The desc
84c0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68  ending index sch
84d0: 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74  ema format (4) t
84e0: 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20  akes index sort 
84f0: 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75  order.into accou
8500: 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f  nt.  Only versio
8510: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33  ns of SQLite 3.3
8520: 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 33 2e  .0 ([dateof:3.3.
8530: 30 5d 29 0a 61 6e 64 20 6c 61 74 65 72 20 61 72  0]).and later ar
8540: 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73  e able to unders
8550: 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e 64  tand.the descend
8560: 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61 74  ing index format
8570: 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  . For compatibil
8580: 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20  ity, version of 
8590: 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20 33  SQLite between 3
85a0: 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75  .3.0.and 3.7.9 u
85b0: 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73 63  se the legacy sc
85c0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20 64  hema format by d
85d0: 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65 77  efault.  The new
85e0: 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  er schema format
85f0: 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66 61   is.used by defa
8600: 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20 33  ult in version 3
8610: 2e 37 2e 31 30 20 28 5b 64 61 74 65 6f 66 3a 33  .7.10 ([dateof:3
8620: 2e 37 2e 31 30 5d 29 20 61 6e 64 20 6c 61 74 65  .7.10]) and late
8630: 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  r..^The [legacy_
8640: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
8650: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
8660: 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68  to change set th
8670: 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76  e specific.behav
8680: 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73  ior for any vers
8690: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ion of SQLite.</
86a0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
86b0: 6d 65 6e 74 20 63 6f 6c 6c 69 64 78 20 7b 43 4f  ment collidx {CO
86c0: 4c 4c 41 54 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  LLATE}</tcl>.<p>
86d0: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  ^The COLLATE cla
86e0: 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66  use optionally f
86f0: 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f  ollowing each co
8700: 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20 65 78 70  lumn name.or exp
8710: 72 65 73 73 69 6f 6e 20 64 65 66 69 6e 65 73 20  ression defines 
8720: 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a.collating sequ
8730: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
8740: 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  xt entries in th
8750: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20  at column..^The 
8760: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
8770: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
8780: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
8790: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
87a0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
87b0: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
87c0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  E] statement.  ^
87d0: 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69  Or if no collati
87e0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f  ng sequence is o
87f0: 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65 64  therwise defined
8800: 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ,.the built-in B
8810: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
8820: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
8830: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
8840: 72 61 67 6d 65 6e 74 20 69 6e 64 65 78 65 78 70  ragment indexexp
8850: 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 78 70 72  r</tcl>.<p>^Expr
8860: 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 69 6e  essions in an in
8870: 64 65 78 20 6d 61 79 20 6e 6f 74 20 72 65 66 65  dex may not refe
8880: 72 65 6e 63 65 20 6f 74 68 65 72 20 74 61 62 6c  rence other tabl
8890: 65 73 0a 61 6e 64 20 6d 61 79 20 6e 6f 74 20 75  es.and may not u
88a0: 73 65 20 73 75 62 71 75 65 72 69 65 73 20 6e 6f  se subqueries no
88b0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 77 68 6f 73  r functions whos
88c0: 65 20 72 65 73 75 6c 74 20 6d 69 67 68 74 0a 63  e result might.c
88d0: 68 61 6e 67 65 20 28 65 78 3a 20 5b 72 61 6e 64  hange (ex: [rand
88e0: 6f 6d 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  om()] or [sqlite
88f0: 5f 76 65 72 73 69 6f 6e 28 29 5d 29 2e 0a 5e 45  _version()])..^E
8900: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
8910: 20 69 6e 64 65 78 20 6d 61 79 20 6f 6e 6c 79 20   index may only 
8920: 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73  refer to columns
8930: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 74 68   in the table.th
8940: 61 74 20 69 73 20 62 65 69 6e 67 20 69 6e 64 65  at is being inde
8950: 78 65 64 2e 0a 49 6e 64 65 78 65 73 20 6f 6e 20  xed..Indexes on 
8960: 65 78 70 72 65 73 73 69 6f 6e 20 77 69 6c 6c 20  expression will 
8970: 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 76 65  not work with ve
8980: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
8990: 20 70 72 69 6f 72 0a 74 6f 20 5b 76 65 72 73 69   prior.to [versi
89a0: 6f 6e 20 33 2e 39 2e 30 5d 20 28 5b 64 61 74 65  on 3.9.0] ([date
89b0: 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 53 65 65 20  of:3.9.0])..See 
89c0: 74 68 65 20 5b 49 6e 64 65 78 65 73 20 4f 6e 20  the [Indexes On 
89d0: 45 78 70 72 65 73 73 69 6f 6e 73 5d 20 64 6f 63  Expressions] doc
89e0: 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74 69  ument for additi
89f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
8a00: 0a 61 62 6f 75 74 20 75 73 69 6e 67 20 67 65 6e  .about using gen
8a10: 65 72 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 73  eral expressions
8a20: 20 69 6e 20 43 52 45 41 54 45 20 49 4e 44 45 58   in CREATE INDEX
8a30: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70   statements...<p
8a40: 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72  >There are no ar
8a50: 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20 6f  bitrary limits o
8a60: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
8a70: 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61 6e  indices that can
8a80: 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f 20   be.attached to 
8a90: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20  a single table. 
8aa0: 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   ^(The number of
8ab0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69   columns in an i
8ac0: 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65 64  ndex is .limited
8ad0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 65   to the value se
8ae0: 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c 69  t by.[sqlite3_li
8af0: 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49 4d  mit]([SQLITE_LIM
8b00: 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e  IT_COLUMN],...).
8b10: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  )^</p>..<tcl>hd_
8b20: 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 69  fragment uniquei
8b30: 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65 78  dx {unique index
8b40: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74  }</tcl>.<p>^If t
8b50: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
8b60: 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65  d appears betwee
8b70: 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44  n CREATE and IND
8b80: 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  EX then duplicat
8b90: 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e.index entries 
8ba0: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  are not allowed.
8bb0: 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20 74    ^Any attempt t
8bc0: 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69  o insert a dupli
8bd0: 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20  cate entry.will 
8be0: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72  result in an err
8bf0: 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70 75  or.  ^For the pu
8c00: 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65  rposes of unique
8c10: 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55   indices, all NU
8c20: 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f  LL values.are co
8c30: 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66 66  nsidered to diff
8c40: 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f  erent from all o
8c50: 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
8c60: 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e   and are thus un
8c70: 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e  ique..This is on
8c80: 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73  e of the two pos
8c90: 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61  sible interpreta
8ca0: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c  tions of the SQL
8cb0: 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68  -92 standard.(th
8cc0: 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68  e language in th
8cd0: 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d  e standard is am
8ce0: 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20  biguous) and is 
8cf0: 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  the interpretati
8d00: 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50  on.followed by P
8d10: 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c  ostgreSQL, MySQL
8d20: 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20  , Firebird, and 
8d30: 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69  Oracle.  Informi
8d40: 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20  x and.Microsoft 
8d50: 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f  SQL Server follo
8d60: 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65  w the other inte
8d70: 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
8d80: 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a  e standard.</p>.
8d90: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
8da0: 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53  onal IF NOT EXIS
8db0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
8dc0: 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72  sent and another
8dd0: 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20   index.with the 
8de0: 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64  same name alread
8df0: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
8e00: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
8e10: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
8e20: 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72  ..<p>^Indexes ar
8e30: 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74  e removed with t
8e40: 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20  he [DROP INDEX] 
8e50: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c  command.</p>...<
8e60: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
8e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8eb0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
8ec0: 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  ATE TABLE} {crea
8ed0: 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54  tetable} {{CREAT
8ee0: 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  E TABLE}}..Recur
8ef0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
8f00: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
8f10: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
8f20: 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  he "CREATE TABLE
8f30: 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  " command is use
8f40: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  d to create a ne
8f50: 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51  w table in an SQ
8f60: 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20  Lite .database. 
8f70: 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  A CREATE TABLE c
8f80: 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73  ommand specifies
8f90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
8fa0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68 65  ttributes of the
8fb0: 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c  .new table:..<ul
8fc0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e  >.  <li><p>The n
8fd0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ame of the new t
8fe0: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
8ff0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   The database in
9000: 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 74   which the new t
9010: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
9020: 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a   Tables may be .
9030: 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69 6e        created in
9040: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
9050: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
9060: 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79  abase, or in any
9070: 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20 20   attached.      
9080: 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69  database...  <li
9090: 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ><p> The name of
90a0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
90b0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
90c0: 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72  i><p> The declar
90d0: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
90e0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61  column in the ta
90f0: 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ble...  <li><p> 
9100: 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  A default value 
9110: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  or expression fo
9120: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
9130: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
9140: 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74  li><p> A default
9150: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9160: 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68 20  nce to use with 
9170: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20  each column...  
9180: 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c  <li><p> Optional
9190: 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ly, a PRIMARY KE
91a0: 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  Y for the table.
91b0: 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c   Both single col
91c0: 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63  umn and.       c
91d0: 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70  omposite (multip
91e0: 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61  le column) prima
91f0: 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70 70  ry keys are supp
9200: 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  orted...  <li><p
9210: 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63  > A set of SQL c
9220: 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65  onstraints for e
9230: 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74  ach table. SQLit
9240: 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55  e supports UNIQU
9250: 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55  E, NOT.       NU
9260: 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f  LL, CHECK and FO
9270: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
9280: 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  aints...  <li><p
9290: 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74 61  > Whether the ta
92a0: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
92b0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
92c0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  </ul>..<p>Every 
92d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
92e0: 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63  tement must spec
92f0: 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74  ify a name for t
9300: 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20  he new table..  
9310: 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68  ^(Table names th
9320: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 73  at begin with "s
9330: 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73 65  qlite_" are rese
9340: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
9350: 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61  l use. It.  is a
9360: 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d  n error to attem
9370: 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  pt to create a t
9380: 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65  able with a name
9390: 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69 74   that starts wit
93a0: 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e  h.  "sqlite_".)^
93b0: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79 74  ..<p> ^If a <yyt
93c0: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
93d0: 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65 63  /yyterm> is spec
93e0: 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74 20 62  ified, it must b
93f0: 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c  e either "main",
9400: 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72 20 74   .  "temp", or t
9410: 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b 41  he name of an [A
9420: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7c 61  TTACH DATABASE|a
9430: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
9440: 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  ]. ^In this case
9450: 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  .  the new table
9460: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
9470: 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73  he named databas
9480: 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45 4d 50  e. ^If the "TEMP
9490: 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22  " or "TEMPORARY"
94a0: 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  .  keyword occur
94b0: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 43  s between the "C
94c0: 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42 4c  REATE" and "TABL
94d0: 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  E" then the new 
94e0: 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65 61 74  table is.  creat
94f0: 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64  ed in the temp d
9500: 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20  atabase. ^It is 
9510: 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
9520: 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20 3c 79  ify both a .  <y
9530: 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d  yterm>schema-nam
9540: 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74  e</yyterm> and t
9550: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
9560: 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e  RARY keyword, un
9570: 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79 74 65  less the.  <yyte
9580: 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
9590: 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65 6d 70  yyterm> is "temp
95a0: 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63 68  ". .  ^If no sch
95b0: 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
95c0: 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a 20 20  ified and the.  
95d0: 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20  TEMP keyword is 
95e0: 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68 65 6e  not present then
95f0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 72   the table is cr
9600: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
9610: 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c  n.  database...<
9620: 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73 75 61  p>.  ^It is usua
9630: 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  lly an error to 
9640: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
9650: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
9660: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74   a database that
9670: 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e 74 61  .  already conta
9680: 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69 6e 64  ins a table, ind
9690: 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68  ex or view of th
96a0: 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f  e same name. ^Ho
96b0: 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a 20 20  wever, if the.  
96c0: 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20  "IF NOT EXISTS" 
96d0: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
96e0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
96f0: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
9700: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20  statement and.  
9710: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  a table or view 
9720: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
9730: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
9740: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
9750: 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70  E command.  simp
9760: 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74  ly has no effect
9770: 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d   (and no error m
9780: 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e  essage is return
9790: 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69  ed). ^An error i
97a0: 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e  s still.  return
97b0: 65 64 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  ed if the table 
97c0: 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
97d0: 64 20 62 65 63 61 75 73 65 20 6f 66 20 61 6e 20  d because of an 
97e0: 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 2c 20  existing index, 
97f0: 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65 20 22  even .  if the "
9800: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63  IF NOT EXISTS" c
9810: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
9820: 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e  ed...<p>^It is n
9830: 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 63  ot an error to c
9840: 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74 68  reate a table th
9850: 61 74 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  at has the same 
9860: 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20 65 78  name as an .  ex
9870: 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45 20 54  isting [CREATE T
9880: 52 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d 2e  RIGGER|trigger].
9890: 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65  ..<p>^Tables are
98a0: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
98b0: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
98c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e  statement.  </p>
98d0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
98e0: 6e 74 20 63 72 65 61 74 65 74 61 62 61 73 20 7b  nt createtabas {
98f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 7d  CREATE TABLE AS}
9900: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41 54  </tcl>.<h3>CREAT
9910: 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53  E TABLE ... AS S
9920: 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73  ELECT Statements
9930: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43  </h3>..<p>^(A "C
9940: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
9950: 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65  AS SELECT" state
9960: 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64  ment creates and
9970: 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74   populates a dat
9980: 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65  abase.table base
9990: 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
99a0: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
99b0: 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20  tement.)^ ^(The 
99c0: 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61  table has the sa
99d0: 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  me.number of col
99e0: 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73  umns as the rows
99f0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
9a00: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
9a10: 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65  t. The name of.e
9a20: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  ach column is th
9a30: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61  e same as the na
9a40: 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  me of the corres
9a50: 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  ponding column i
9a60: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74  n the result.set
9a70: 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73   of the SELECT s
9a80: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
9a90: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
9aa0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
9ab0: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20  s determined.by 
9ac0: 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20  the [expression 
9ad0: 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65  affinity] of the
9ae0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65   corresponding e
9af0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
9b00: 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74   result set.of t
9b10: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
9b20: 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ent, as follows:
9b30: 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c  .</p>..<center><
9b40: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a  table border=1>.
9b50: 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73    <tr><th>Expres
9b60: 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20  sion Affinity   
9b70: 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61  <th>Column Decla
9b80: 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c  red Type.  <tr><
9b90: 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20  td>TEXT         
9ba0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45           <td>"TE
9bb0: 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55  XT".  <tr><td>NU
9bc0: 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20  MERIC           
9bd0: 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20      <td>"NUM".  
9be0: 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20  <tr><td>INTEGER 
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
9c00: 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74  d>"INT".  <tr><t
9c10: 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20  d>REAL          
9c20: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41          <td>"REA
9c30: 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e  L".  <tr><td>NON
9c40: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  E               
9c50: 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79     <td>"" (empty
9c60: 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65   string).</table
9c70: 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70  ></center>)^..<p
9c80: 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74  >^(A table creat
9c90: 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
9ca0: 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20  TABLE AS has no 
9cb0: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
9cc0: 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  no.constraints o
9cd0: 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20  f any kind. The 
9ce0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
9cf0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20   each column is 
9d00: 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c  NULL. The defaul
9d10: 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t.collation sequ
9d20: 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f  ence for each co
9d30: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20  lumn of the new 
9d40: 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e  table is BINARY.
9d50: 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63  )^..<p>^Tables c
9d60: 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
9d70: 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65  ATE TABLE AS are
9d80: 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c   initially popul
9d90: 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f  ated with the.ro
9da0: 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ws of data retur
9db0: 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
9dc0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f  T statement. ^Ro
9dd0: 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20  ws are assigned 
9de0: 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63  contiguously.asc
9df0: 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76  ending [rowid] v
9e00: 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20  alues, starting 
9e10: 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b  with 1, in the [
9e20: 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20  order by|order] 
9e30: 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65  that they.are re
9e40: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
9e50: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
9e60: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9e70: 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20  t {tablecoldef} 
9e80: 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  {column definiti
9e90: 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69  on} {column defi
9ea0: 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c  nitions}</tcl>.<
9eb0: 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69  h3>Column Defini
9ec0: 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55  tions</h3>..<p>U
9ed0: 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52  nless it is a CR
9ee0: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
9ef0: 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  S SELECT stateme
9f00: 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42  nt, a CREATE TAB
9f10: 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20  LE includes.one 
9f20: 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d  or more [column-
9f30: 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  def|column defin
9f40: 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61  itions], optiona
9f50: 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
9f60: 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65  a list of.[table
9f70: 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c  -constraint|tabl
9f80: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20  e constraints]. 
9f90: 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66   Each column def
9fa0: 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73  inition consists
9fb0: 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20   of the.name of 
9fc0: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69  the column, opti
9fd0: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20  onally followed 
9fe0: 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  by the declared 
9ff0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
a000: 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20  mn,.then one or 
a010: 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63  more optional [c
a020: 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74  olumn-constraint
a030: 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69  |column constrai
a040: 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69  nts]. Included i
a050: 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  n.the definition
a060: 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73   of "column cons
a070: 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65  traints" for the
a080: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
a090: 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d   previous.statem
a0a0: 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c  ent are the COLL
a0b0: 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20  ATE and DEFAULT 
a0c0: 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68  clauses, even th
a0d0: 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e  ough these are n
a0e0: 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72  ot really.constr
a0f0: 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e  aints in the sen
a100: 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20  se that they do 
a110: 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65  not restrict the
a120: 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74   data that the t
a130: 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e  able may.contain
a140: 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73  . The other cons
a150: 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55  traints - NOT NU
a160: 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55  LL, CHECK, UNIQU
a170: 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  E, PRIMARY KEY a
a180: 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  nd.FOREIGN KEY c
a190: 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70  onstraints - imp
a1a0: 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ose restrictions
a1b0: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64   on the tables d
a1c0: 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65  ata, and are are
a1d0: 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72  .described under
a1e0: 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51   [constraints|SQ
a1f0: 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e  L Data Constrain
a200: 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e  ts] below...<p>^
a210: 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20  Unlike most SQL 
a220: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
a230: 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72  e does not restr
a240: 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ict the type of 
a250: 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65  data that.may be
a260: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61   inserted into a
a270: 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e   column based on
a280: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63   the columns dec
a290: 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74  lared type. Inst
a2a0: 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73  ead,.SQLite uses
a2b0: 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67   [dynamic typing
a2c0: 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64  ]. ^The declared
a2d0: 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d   type of a colum
a2e0: 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74  n is used to.det
a2f0: 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69  ermine the [affi
a300: 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c  nity] of the col
a310: 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c 3e  umn only...<tcl>
a320: 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c 74  hd_fragment dflt
a330: 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f 6c  val {default col
a340: 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66 61  umn value} {defa
a350: 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e  ult value}</tcl>
a360: 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20  .<p>The DEFAULT 
a370: 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
a380: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
a390: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20   to use for the 
a3a0: 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c  column if no.val
a3b0: 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79  ue is explicitly
a3c0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
a3d0: 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67   user when doing
a3e0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49   an [INSERT]. ^I
a3f0: 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78  f there.is no ex
a400: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
a410: 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
a420: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
a430: 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ition, then the 
a440: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f  .default value o
a450: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
a460: 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69  NULL. ^(An expli
a470: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
a480: 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74  se may specify.t
a490: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
a4a0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61  value is NULL, a
a4b0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
a4c0: 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e  , a blob constan
a4d0: 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62  t, a.signed-numb
a4e0: 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74  er, or any const
a4f0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ant expression e
a500: 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
a510: 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75 6c  theses. A.defaul
a520: 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f  t value may also
a530: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73   be one of the s
a540: 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65  pecial case-inde
a550: 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64 73  pendent keywords
a560: 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43  .CURRENT_TIME, C
a570: 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43  URRENT_DATE or C
a580: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a590: 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  .)^ ^For the pur
a5a0: 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45 46  poses of the.DEF
a5b0: 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e 20  AULT clause, an 
a5c0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
a5d0: 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61 6e  nsidered constan
a5e0: 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f 6e  t if it does.con
a5f0: 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65  tains no sub-que
a600: 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20  ries, column or 
a610: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  table references
a620: 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  , [bound paramet
a630: 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67 20  ers],.or string 
a640: 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73 65  literals enclose
a650: 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
a660: 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73 69  es instead of si
a670: 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70  ngle-quotes...<p
a680: 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72  >^(Each time a r
a690: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
a6a0: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79  nto the table by
a6b0: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
a6c0: 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20  ment that .does 
a6d0: 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c  not provide expl
a6e0: 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20  icit values for 
a6f0: 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  all table column
a700: 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f  s the values sto
a710: 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72  red in.the new r
a720: 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65  ow are determine
a730: 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75  d by their defau
a740: 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20  lt values)^, as 
a750: 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20  follows:..<ul>. 
a760: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
a770: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
a780: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
a790: 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20   constant NULL, 
a7a0: 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20  text, blob or.  
a7b0: 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20    signed-number 
a7c0: 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74  value, then that
a7d0: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64   value is used d
a7e0: 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e  irectly in the n
a7f0: 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c  ew row...  <li><
a800: 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c  p>^If the defaul
a810: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
a820: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
a830: 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65  sion in parenthe
a840: 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68  ses, then.    th
a850: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
a860: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
a870: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65  or each row inse
a880: 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  rted and the res
a890: 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e  ults.    used in
a8a0: 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20   the new row... 
a8b0: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
a8c0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
a8d0: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52   a column is CUR
a8e0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
a8f0: 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43  NT_DATE or.    C
a900: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a910: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
a920: 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77   used in the new
a930: 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20   row is a text. 
a940: 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f     representatio
a950: 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  n of the current
a960: 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72   UTC date and/or
a970: 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52   time. ^For CURR
a980: 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20  ENT_TIME, the.  
a990: 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20    format of the 
a9a0: 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a  value is "HH:MM:
a9b0: 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e  SS". ^For CURREN
a9c0: 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d  T_DATE, "YYYY-MM
a9d0: 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66  -DD". ^The.    f
a9e0: 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e  ormat for CURREN
a9f0: 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22  T_TIMESTAMP is "
aa00: 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
aa10: 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  :SS"..</ul>..<p>
aa20: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  ^The COLLATE cla
aa30: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
aa40: 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c  e name of a [col
aa50: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
aa60: 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64   to use as.the d
aa70: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
aa80: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68   sequence for th
aa90: 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f  e column. ^If no
aaa0: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
aab0: 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
aac0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
aad0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
aae0: 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54  [BINARY]...<p>^T
aaf0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
ab00: 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20  umns in a table 
ab10: 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68  is limited by th
ab20: 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  e [SQLITE_MAX_CO
ab30: 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  LUMN].compile-ti
ab40: 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41  me parameter. ^A
ab50: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61   single row of a
ab60: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74   table cannot st
ab70: 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53  ore more than.[S
ab80: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
ab90: 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e  ] bytes of data.
aba0: 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20   ^Both of these 
abb0: 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f  limits can be lo
abc0: 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65  wered at.runtime
abd0: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
abe0: 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43  te3_limit()] C/C
abf0: 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  ++ interface.</p
ac00: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
ac10: 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73  ent {constraints
ac20: 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  } {constraints}<
ac30: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61  /tcl>.<h3>SQL Da
ac40: 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f  ta Constraints</
ac50: 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h3>..<tcl>hd_fra
ac60: 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e  gment primkeycon
ac70: 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d  st {PRIMARY KEY}
ac80: 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f   {PRIMARY KEY co
ac90: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
aca0: 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69  <p>^Each table i
acb0: 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76  n SQLite may hav
acc0: 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62  e at most one <b
acd0: 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e  >PRIMARY KEY</b>
ace0: 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77  . ^If the.  keyw
acf0: 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59  ords PRIMARY KEY
ad00: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20   are added to a 
ad10: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
ad20: 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  n, then the prim
ad30: 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68  ary key.  for th
ad40: 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73  e table consists
ad50: 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20   of that single 
ad60: 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20  column. ^Or, if 
ad70: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  a PRIMARY KEY cl
ad80: 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69  ause .  is speci
ad90: 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65  fied as a [table
ada0: 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68  -constraint], th
adb0: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
adc0: 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a  ey of the table.
add0: 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68    consists of th
ade0: 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  e list of column
adf0: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
ae00: 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41  art of the PRIMA
ae10: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20  RY KEY clause.. 
ae20: 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45   ^The PRIMARY KE
ae30: 59 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f  Y clause must co
ae40: 6e 74 61 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75 6d  ntain only colum
ae50: 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b 20  n names &mdash; 
ae60: 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65 78  the use of .  ex
ae70: 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20  pressions in an 
ae80: 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d  [indexed-column]
ae90: 20 6f 66 20 61 20 50 52 49 4d 41 52 59 20 4b 45   of a PRIMARY KE
aea0: 59 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  Y is not support
aeb0: 65 64 2e 0a 20 20 5e 41 6e 20 65 72 72 6f 72 20  ed..  ^An error 
aec0: 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f 72  is raised if mor
aed0: 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41  e than one PRIMA
aee0: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 70  RY KEY clause ap
aef0: 70 65 61 72 73 20 69 6e 20 61 0a 20 20 43 52 45  pears in a.  CRE
af00: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
af10: 65 6e 74 2e 20 20 5e 54 68 65 20 50 52 49 4d 41  ent.  ^The PRIMA
af20: 52 59 20 4b 45 59 20 69 73 20 6f 70 74 69 6f 6e  RY KEY is option
af30: 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72 79 20  al for ordinary 
af40: 74 61 62 6c 65 73 0a 20 20 62 75 74 20 69 73 20  tables.  but is 
af50: 72 65 71 75 69 72 65 64 20 66 6f 72 20 5b 57 49  required for [WI
af60: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
af70: 6c 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61  les...<p>If a ta
af80: 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65  ble has a single
af90: 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20   column primary 
afa0: 6b 65 79 20 61 6e 64 20 74 68 65 20 64 65 63 6c  key and the decl
afb0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61  ared type of tha
afc0: 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  t.  column is "I
afd0: 4e 54 45 47 45 52 22 20 61 6e 64 20 74 68 65 20  NTEGER" and the 
afe0: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20 5b  table is not a [
aff0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
b000: 61 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68 65  able,.  then the
b010: 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e   column is known
b020: 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   as an [INTEGER 
b030: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20  PRIMARY KEY]..  
b040: 53 65 65 20 5b 72 6f 77 69 64 7c 62 65 6c 6f 77  See [rowid|below
b050: 5d 20 66 6f 72 20 61 20 64 65 73 63 72 69 70 74  ] for a descript
b060: 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69  ion of the speci
b070: 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e  al properties an
b080: 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61 73  d behaviors.  as
b090: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
b0a0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
b0b0: 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63  Y KEY]...<p>^Eac
b0c0: 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65  h row in a table
b0d0: 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79 20   with a primary 
b0e0: 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  key must have a 
b0f0: 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
b100: 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69  on.  of values i
b110: 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65  n its primary ke
b120: 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20  y columns. ^For 
b130: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
b140: 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68  determining.  th
b150: 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20  e uniqueness of 
b160: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
b170: 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  es, NULL values 
b180: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64  are considered d
b190: 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61  istinct from.  a
b1a0: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c  ll other values,
b1b0: 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72   including other
b1c0: 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b   NULLs. ^If an [
b1d0: 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41  INSERT] or [UPDA
b1e0: 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  TE].  statement 
b1f0: 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69  attempts to modi
b200: 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  fy the table con
b210: 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f  tent so that two
b220: 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20   or more rows.  
b230: 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20 70  have identical p
b240: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
b250: 73 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f 6e  s, that is a con
b260: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
b270: 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e  n...<p> Accordin
b280: 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61  g to the SQL sta
b290: 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b  ndard, PRIMARY K
b2a0: 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  EY should always
b2b0: 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e   imply NOT NULL.
b2c0: 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  .  Unfortunately
b2d0: 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  , due to a bug i
b2e0: 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72  n some early ver
b2f0: 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e  sions, this is n
b300: 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e  ot the.  case in
b310: 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73   SQLite. ^Unless
b320: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
b330: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
b340: 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65  RY KEY] or.  the
b350: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
b360: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
b370: 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e or the column 
b380: 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20  is declared NOT 
b390: 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61  NULL,.  SQLite a
b3a0: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
b3b0: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
b3c0: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69  EY column.  SQLi
b3d0: 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65  te could be fixe
b3e0: 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  d to.  conform t
b3f0: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20  o the standard, 
b400: 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67  but doing so mig
b410: 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20  ht break legacy 
b420: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20  applications..  
b430: 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65  Hence, it has be
b440: 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65  en decided to me
b450: 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68  rely document th
b460: 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
b470: 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  te.  allowing NU
b480: 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d  LLs in most PRIM
b490: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e  ARY KEY columns.
b4a0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b4b0: 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b  nt uniqueconst {
b4c0: 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20  UNIQUE} {unique 
b4d0: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49  constraint} {UNI
b4e0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  QUE constraint}<
b4f0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
b500: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
b510: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
b520: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
b530: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
b540: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
b550: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
b560: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
b570: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
b580: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
b590: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
b5a0: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
b5b0: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 63   each row must c
b5c0: 6f 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65 20  ontain a unique 
b5d0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
b5e0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
b5f0: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
b600: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
b610: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e  constraint. .  ^
b620: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
b630: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
b640: 72 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c  raints, NULL val
b650: 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64  ues.  are consid
b660: 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72  ered distinct fr
b670: 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  om all other val
b680: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
b690: 74 68 65 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e 41  ther NULLs..  ^A
b6a0: 73 20 77 69 74 68 20 50 52 49 4d 41 52 59 20 4b  s with PRIMARY K
b6b0: 45 59 73 2c 20 61 20 55 4e 49 51 55 45 20 5b 74  EYs, a UNIQUE [t
b6c0: 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d  able-constraint]
b6d0: 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f 6e   clause must con
b6e0: 74 61 69 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c 75  tain.  only colu
b6f0: 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b  mn names &mdash;
b700: 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65   the use of .  e
b710: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
b720: 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e   [indexed-column
b730: 5d 20 6f 66 20 61 20 55 4e 49 51 55 45 20 5b 74  ] of a UNIQUE [t
b740: 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d  able-constraint]
b750: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
b760: 74 65 64 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e 20  ted..  ..<p>^In 
b770: 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51  most cases, UNIQ
b780: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
b790: 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.  constraints
b7a0: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
b7b0: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75   by creating a u
b7c0: 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74  nique index in t
b7d0: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 28  he database..  (
b7e0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  The exceptions a
b7f0: 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  re [INTEGER PRIM
b800: 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52 49  ARY KEY] and PRI
b810: 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20  MARY KEYs on .  
b820: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
b830: 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65  tables.).  Hence
b840: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
b850: 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67 69  schemas are logi
b860: 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74  cally equivalent
b870: 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  :..  <ol>.  <li>
b880: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
b890: 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29 3b  t1(a, b UNIQUE);
b8a0: 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45  .  <li><p>CREATE
b8b0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20 50   TABLE t1(a, b P
b8c0: 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c  RIMARY KEY);.  <
b8d0: 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42  li><p>CREATE TAB
b8e0: 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e  LE t1(a, b);<br>
b8f0: 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45  .         CREATE
b900: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31   UNIQUE INDEX t1
b910: 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f  b ON t1(b);.  </
b920: 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ol>..<tcl>hd_fra
b930: 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20  gment {ckconst} 
b940: 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63  {CHECK} {CHECK c
b950: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43  onstraint} {CHEC
b960: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f  K constraints}</
b970: 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43  tcl>.<p>^(A <b>C
b980: 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  HECK</b> constra
b990: 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63  int may be attac
b9a0: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
b9b0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20  definition or.  
b9c0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
b9d0: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
b9e0: 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20   In practice it 
b9f0: 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65  makes no differe
ba00: 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20  nce.)^ ^(Each.  
ba10: 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69  time a new row i
ba20: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
ba30: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20  the table or an 
ba40: 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20  existing row is 
ba50: 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65  updated,.  the e
ba60: 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69  xpression associ
ba70: 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43  ated with each C
ba80: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
ba90: 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  is evaluated and
baa0: 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d  .  cast to a NUM
bab0: 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68  ERIC value in th
bac0: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20  e same way as a 
bad0: 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
bae0: 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73  ]. If the .  res
baf0: 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74  ult is zero (int
bb00: 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20  eger value 0 or 
bb10: 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c  real value 0.0),
bb20: 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69   then a constrai
bb30: 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68  nt.  violation h
bb40: 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e  as occurred.)^ ^
bb50: 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70  If the CHECK exp
bb60: 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
bb70: 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20  s to NULL, or.  
bb80: 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65  any other non-ze
bb90: 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ro value, it is 
bba0: 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  not a constraint
bbb0: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54   violation..  ^T
bbc0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  he expression of
bbd0: 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
bbe0: 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  int may not cont
bbf0: 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a  ain a subquery..
bc00: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
bc10: 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d  t {notnullconst}
bc20: 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54   {NOT NULL} {NOT
bc30: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
bc40: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62  }</tcl>.<p>^A <b
bc50: 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f  >NOT NULL</b> co
bc60: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c  nstraint may onl
bc70: 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f  y be attached to
bc80: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
bc90: 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63  tion,.  not spec
bca0: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
bcb0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f   constraint.  No
bcc0: 74 20 73 75 72 70 72 69 73 69 6e 67 6c 79 2c 20  t surprisingly, 
bcd0: 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63  ^(a NOT NULL.  c
bce0: 6f 6e 73 74 72 61 69 6e 74 20 64 69 63 74 61 74  onstraint dictat
bcf0: 65 73 20 74 68 61 74 20 74 68 65 20 61 73 73 6f  es that the asso
bd00: 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61  ciated column ma
bd10: 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  y not contain a 
bd20: 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74  NULL value..  At
bd30: 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 65 74 20  tempting to set 
bd40: 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
bd50: 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e   to NULL when in
bd60: 73 65 72 74 69 6e 67 20 61 20 6e 65 77 20 72 6f  serting a new ro
bd70: 77 20 6f 72 0a 20 20 75 70 64 61 74 69 6e 67 20  w or.  updating 
bd80: 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 20  an existing one 
bd90: 63 61 75 73 65 73 20 61 20 63 6f 6e 73 74 72 61  causes a constra
bda0: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e  int violation.)^
bdb0: 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f 77  ..<p>Exactly how
bdc0: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
bdd0: 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65 61 6c 74  olation is dealt
bde0: 20 77 69 74 68 20 69 73 20 64 65 74 65 72 6d 69   with is determi
bdf0: 6e 65 64 20 62 79 20 74 68 65 0a 20 20 5b 63 6f  ned by the.  [co
be00: 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7c 63 6f  nflict clause|co
be10: 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
be20: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
be30: 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20  orithm]. Each . 
be40: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e   PRIMARY KEY, UN
be50: 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61  IQUE, NOT NULL a
be60: 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  nd CHECK constra
be70: 69 6e 74 20 68 61 73 20 61 20 64 65 66 61 75 6c  int has a defaul
be80: 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73  t conflict.  res
be90: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
bea0: 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c  m. ^PRIMARY KEY,
beb0: 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
bec0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
bed0: 20 6d 61 79 20 62 65 0a 20 20 65 78 70 6c 69 63   may be.  explic
bee0: 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20  itly assigned a 
bef0: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
bf00: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
bf10: 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75 64 69  rithm by includi
bf20: 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74  ng.  a [conflict
bf30: 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74 68 65 69  -clause] in thei
bf40: 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e  r definitions. ^
bf50: 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74 72 61  Or, if a constra
bf60: 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20  int definition. 
bf70: 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64   does not includ
bf80: 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c  e a [conflict-cl
bf90: 61 75 73 65 5d 20 6f 72 20 69 74 20 69 73 20 61  ause] or it is a
bfa0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
bfb0: 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  t, the default. 
bfc0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
bfd0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
bfe0: 73 20 41 42 4f 52 54 2e 20 5e 44 69 66 66 65 72  s ABORT. ^Differ
bff0: 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ent constraints 
c000: 77 69 74 68 69 6e 20 74 68 65 0a 20 20 73 61 6d  within the.  sam
c010: 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65  e table may have
c020: 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61 75   different defau
c030: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
c040: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
c050: 73 2e 20 53 65 65 0a 20 20 74 68 65 20 73 65 63  s. See.  the sec
c060: 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20  tion titled [ON 
c070: 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64  CONFLICT] for ad
c080: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
c090: 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  tion...<tcl>hd_f
c0a0: 72 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49  ragment rowid {I
c0b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c0c0: 45 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c  EY} ROWID rowid<
c0d0: 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73  /tcl>.<h3>ROWIDs
c0e0: 20 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52   and the INTEGER
c0f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33   PRIMARY KEY</h3
c100: 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f  >..<p>^Except fo
c110: 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  r [WITHOUT ROWID
c120: 5d 20 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f  ] tables, all ro
c130: 77 73 20 77 69 74 68 69 6e 20 53 51 4c 69 74 65  ws within SQLite
c140: 20 74 61 62 6c 65 73 0a 68 61 76 65 20 61 20 36   tables.have a 6
c150: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
c160: 65 67 65 72 20 6b 65 79 20 74 68 61 74 20 75 6e  eger key that un
c170: 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65  iquely identifie
c180: 73 20 74 68 65 20 72 6f 77 20 77 69 74 68 69 6e  s the row within
c190: 20 69 74 73 20 74 61 62 6c 65 2e 0a 54 68 69 73   its table..This
c1a0: 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75 61   integer is usua
c1b0: 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65 20 22  lly.called the "
c1c0: 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72 6f 77  rowid". ^The row
c1d0: 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20  id value can be 
c1e0: 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f  accessed using o
c1f0: 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  ne of the specia
c200: 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l.case-independe
c210: 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22  nt names "rowid"
c220: 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f  , "oid", or "_ro
c230: 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f  wid_" in place o
c240: 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e  f a column name.
c250: 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63 6f 6e  .^If a table con
c260: 74 61 69 6e 73 20 61 20 75 73 65 72 20 64 65 66  tains a user def
c270: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
c280: 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22  d "rowid", "oid"
c290: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74   or "_rowid_",.t
c2a0: 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61 6c  hen that name al
c2b0: 77 61 79 73 20 72 65 66 65 72 73 20 74 68 65 20  ways refers the 
c2c0: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
c2d0: 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63  red column and c
c2e0: 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a 74 6f  annot be used.to
c2f0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69 6e   retrieve the in
c300: 74 65 67 65 72 20 72 6f 77 69 64 20 76 61 6c 75  teger rowid valu
c310: 65 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64  e...<p>The rowid
c320: 20 28 61 6e 64 20 22 6f 69 64 22 20 61 6e 64 20   (and "oid" and 
c330: 22 5f 72 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d  "_rowid_") is om
c340: 69 74 74 65 64 20 69 6e 20 5b 57 49 54 48 4f 55  itted in [WITHOU
c350: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
c360: 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74  .WITHOUT ROWID t
c370: 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 61  ables are only a
c380: 76 61 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69  vailable in SQLi
c390: 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e  te [version 3.8.
c3a0: 32 5d 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e  2].([dateof:3.8.
c3b0: 32 5d 29 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41  2]) and later..A
c3c0: 20 74 61 62 6c 65 20 74 68 61 74 20 6c 61 63 6b   table that lack
c3d0: 73 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f  s the WITHOUT RO
c3e0: 57 49 44 20 63 6c 61 75 73 65 20 69 73 20 63 61  WID clause is ca
c3f0: 6c 6c 65 64 20 61 20 22 72 6f 77 69 64 20 74 61  lled a "rowid ta
c400: 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61  ble"...<p>The da
c410: 74 61 20 66 6f 72 20 72 6f 77 69 64 20 74 61 62  ta for rowid tab
c420: 6c 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73  les is stored as
c430: 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74   a B-Tree struct
c440: 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f  ure containing.o
c450: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
c460: 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69  h table row, usi
c470: 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c  ng the rowid val
c480: 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54  ue as the key. T
c490: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72  his means that.r
c4a0: 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72  etrieving or sor
c4b0: 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20  ting records by 
c4c0: 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53  rowid is fast. S
c4d0: 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72  earching for a r
c4e0: 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65  ecord with a.spe
c4f0: 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20  cific rowid, or 
c500: 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  for all records 
c510: 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68  with rowids with
c520: 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72  in a specified r
c530: 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74  ange is.around t
c540: 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20  wice as fast as 
c550: 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68  a similar search
c560: 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79   made by specify
c570: 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52  ing any other PR
c580: 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64  IMARY.KEY or ind
c590: 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e  exed value...<p>
c5a0: 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70   ^With one excep
c5b0: 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77  tion noted below
c5c0: 2c 20 69 66 20 61 20 72 6f 77 69 64 20 74 61 62  , if a rowid tab
c5d0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
c5e0: 20 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73   key that consis
c5f0: 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65 20 63  ts.of a single c
c600: 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 64 65  olumn and the de
c610: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
c620: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  hat column is "I
c630: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
c640: 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20  ixture of.upper 
c650: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20  and lower case, 
c660: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
c670: 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
c680: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20   for the rowid. 
c690: 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73  Such a.column is
c6a0: 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65   usually referre
c6b0: 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65  d to as an "inte
c6c0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22  ger primary key"
c6d0: 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20  . A PRIMARY KEY 
c6e0: 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f  column.only beco
c6f0: 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  mes an integer p
c700: 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68  rimary key if th
c710: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
c720: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a  name is exactly.
c730: 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68  "INTEGER".  ^Oth
c740: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
c750: 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22  names like "INT"
c760: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
c770: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a  "SHORT INTEGER".
c780: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
c790: 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65  EGER" causes the
c7a0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
c7b0: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
c7c0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62   an ordinary.tab
c7d0: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69  le column with i
c7e0: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
c7f0: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
c800: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
c810: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
c820: 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  wid...<p> The ex
c830: 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  ception mentione
c840: 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20  d above is that 
c850: 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74  ^if the declarat
c860: 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
c870: 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79  with.declared ty
c880: 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63  pe "INTEGER" inc
c890: 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52  ludes an "PRIMAR
c8a0: 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75  Y KEY DESC" clau
c8b0: 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a  se, it does not.
c8c0: 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20  become an alias 
c8d0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e  for the rowid an
c8e0: 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66  d is not classif
c8f0: 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ied as an intege
c900: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54  r primary key..T
c910: 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74  his quirk is not
c920: 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69   by design. It i
c930: 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  s due to a bug i
c940: 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  n early versions
c950: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20   of SQLite..But 
c960: 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63  fixing the bug c
c970: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 62  ould result in b
c980: 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70 61  ackwards incompa
c990: 74 69 62 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63  tibilities..Henc
c9a0: 65 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  e, the original 
c9b0: 62 65 68 61 76 69 6f 72 20 68 61 73 20 62 65 65  behavior has bee
c9c0: 6e 20 72 65 74 61 69 6e 65 64 20 28 61 6e 64 20  n retained (and 
c9d0: 64 6f 63 75 6d 65 6e 74 65 64 29 20 62 65 63 61  documented) beca
c9e0: 75 73 65 20 6f 64 64 0a 62 65 68 61 76 69 6f 72  use odd.behavior
c9f0: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
ca00: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 20  e is far better 
ca10: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
ca20: 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54 68 69  lity break.  Thi
ca30: 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e 28 74  s means.that ^(t
ca40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
ca50: 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61  ee table declara
ca60: 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65 20  tions all cause 
ca70: 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74  the column "x" t
ca80: 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f  o be an.alias fo
ca90: 72 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e 20  r the rowid (an 
caa0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
cab0: 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  key):..<ul>.<li>
cac0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
cad0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
cae0: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 2c  MARY KEY ASC, y,
caf0: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74   z);</tt>.<li><t
cb00: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
cb10: 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a  (x INTEGER, y, z
cb20: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20  , PRIMARY KEY(x 
cb30: 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  ASC));</tt>.<li>
cb40: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
cb50: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
cb60: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
cb70: 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c  x DESC));</tt>.<
cb80: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e  /ul>)^..<p>But ^
cb90: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64  (the following d
cba0: 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65 73 20  eclaration does 
cbb0: 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 22 78  not result in "x
cbc0: 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73  " being an alias
cbd0: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a   for.the rowid:.
cbe0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
cbf0: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
cc00: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
cc10: 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  Y DESC, y, z);</
cc20: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
cc30: 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20 6d 61  ^Rowid values ma
cc40: 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20 75 73  y be modified us
cc50: 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20 73 74  ing an UPDATE st
cc60: 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73  atement in the s
cc70: 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79 20 6f  ame.way as any o
cc80: 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ther column valu
cc90: 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20 75 73  e can, either us
cca0: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 62  ing one of the b
ccb0: 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a  uilt-in aliases.
ccc0: 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20  ("rowid", "oid" 
ccd0: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72  or "_rowid_") or
cce0: 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61 6c 69   by using an ali
ccf0: 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61 6e  as created by an
cd00: 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61 72 79   integer.primary
cd10: 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79   key. ^Similarly
cd20: 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  , an INSERT stat
cd30: 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76 69 64  ement may provid
cd40: 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75 73 65  e a value to use
cd50: 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 66 6f   as the.rowid fo
cd60: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
cd70: 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f  ted. ^(Unlike no
cd80: 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75  rmal SQLite colu
cd90: 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 20  mns, an integer 
cda0: 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72  primary.key or r
cdb0: 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
cdc0: 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
cdd0: 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
cde0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
cdf0: 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72  rowid.columns ar
ce00: 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f  e not able to ho
ce10: 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ld floating poin
ce20: 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67  t values, string
ce30: 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s, BLOBs, or NUL
ce40: 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  Ls.)^..<p>^If an
ce50: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
ce60: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65  t attempts to se
ce70: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  t an integer pri
ce80: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
ce90: 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55  d column.to a NU
cea0: 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65  LL or blob value
ceb0: 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69 6e 67  , or to a string
cec0: 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74   or real value t
ced0: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
cee0: 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74  sslessly.convert
cef0: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
cf00: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
cf10: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
cf20: 63 75 72 73 20 61 6e 64 20 74 68 65 20 73 74 61  curs and the sta
cf30: 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72 74 65  tement.is aborte
cf40: 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45 52 54  d. ^If an INSERT
cf50: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
cf60: 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20  pts to insert a 
cf70: 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 61  blob value, or a
cf80: 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20   string.or real 
cf90: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
cfa0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
cfb0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
cfc0: 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a  integer into an.
cfd0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
cfe0: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
cff0: 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79 70 65  umn, a "datatype
d000: 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
d010: 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 0a   occurs and the.
d020: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 62 6f  statement is abo
d030: 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  rted...<p>^If an
d040: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
d050: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
d060: 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75  sert a NULL valu
d070: 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f  e into a rowid o
d080: 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  r.integer primar
d090: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68  y key column, th
d0a0: 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73 65 73  e system chooses
d0b0: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
d0c0: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a  e to use as the.
d0d0: 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69 63 61  rowid automatica
d0e0: 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65 64 20  lly. A detailed 
d0f0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 68  description of h
d100: 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  ow this is done 
d110: 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61 20 68  is provided.<a h
d120: 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d  ref="autoinc.htm
d130: 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61  l">separately</a
d140: 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  >.</p>..<p>^(The
d150: 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66   [parent key] of
d160: 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20   a [foreign key 
d170: 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73 20 6e  constraint] is n
d180: 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73  ot allowed to.us
d190: 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20 54 68  e the rowid.  Th
d1a0: 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d 75 73  e parent key mus
d1b0: 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c  t used named col
d1c0: 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e  umns only.)^</p>
d1d0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
d1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d220: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
d230: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 20  CREATE TRIGGER} 
d240: 63 72 65 61 74 65 74 72 69 67 67 65 72 20 7b 7b  createtrigger {{
d250: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 7d  CREATE TRIGGER}}
d260: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
d270: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
d280: 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74  trigger-stmt.</t
d290: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
d2a0: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
d2b0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
d2c0: 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f   add triggers to
d2d0: 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73   the .database s
d2e0: 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73  chema. ^Triggers
d2f0: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70   are database op
d300: 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61  erations .that a
d310: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
d320: 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20   performed when 
d330: 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  a specified data
d340: 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72  base event.occur
d350: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  s.  </p>..<p>^A 
d360: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
d370: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
d380: 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c   whenever a [DEL
d390: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a  ETE], [INSERT],.
d3a0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61  or [UPDATE] of a
d3b0: 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61  .particular data
d3c0: 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72  base table occur
d3d0: 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61  s, or whenever a
d3e0: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72  n [UPDATE] occur
d3f0: 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d  s on.on one or m
d400: 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  ore specified co
d410: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
d420: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68  .</p>..<p>^At th
d430: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
d440: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
d450: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
d460: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
d470: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
d480: 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c  ers. ^Hence expl
d490: 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e  icitly specifyin
d4a0: 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  g FOR EACH ROW i
d4b0: 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52  s optional..^FOR
d4c0: 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65   EACH ROW implie
d4d0: 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73  s that the SQL s
d4e0: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
d4f0: 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67  ied in the trigg
d500: 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  er.may be execut
d510: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
d520: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
d530: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
d540: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
d550: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
d560: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
d570: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
d580: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
d590: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
d5a0: 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e  >^(Both the WHEN
d5b0: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
d5c0: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
d5d0: 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65  may access eleme
d5e0: 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20  nts of .the row 
d5f0: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20  being inserted, 
d600: 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74  deleted or updat
d610: 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e  ed using referen
d620: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ces of the form 
d630: 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d  ."NEW.<i>column-
d640: 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f  name</i>" and "O
d650: 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  LD.<i>column-nam
d660: 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69  e</i>", where.<i
d670: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
d680: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
d690: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  a column from th
d6a0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
d6b0: 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f   trigger.is asso
d6c0: 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e  ciated with.)^ ^
d6d0: 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66  (OLD and NEW ref
d6e0: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
d6f0: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
d700: 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66  gers on.events f
d710: 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72  or which they ar
d720: 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66  e relevant, as f
d730: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61  ollows:</p>..<ta
d740: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
d750: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
d760: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d770: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
d780: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e   width=120><i>IN
d790: 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  SERT</i></td>.<t
d7a0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e  d valign="top">N
d7b0: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  EW references ar
d7c0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
d7d0: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
d7e0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
d7f0: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
d800: 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f  ><i>UPDATE</i></
d810: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
d820: 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44  top">NEW and OLD
d830: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
d840: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
d850: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
d860: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
d870: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
d880: 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64  i>DELETE</i></td
d890: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d8a0: 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  p">OLD reference
d8b0: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
d8c0: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
d8d0: 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  </p>)^..<p>^If a
d8e0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
d8f0: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
d900: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
d910: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
d920: 65 78 65 63 75 74 65 64 20 69 66 20 74 68 65 20  executed if the 
d930: 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 74  WHEN clause is t
d940: 72 75 65 2e 0a 5e 49 66 20 6e 6f 20 57 48 45 4e  rue..^If no WHEN
d950: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
d960: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
d970: 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63  tements.are exec
d980: 75 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  uted every time 
d990: 74 68 65 20 74 72 69 67 67 65 72 20 66 69 72 65  the trigger fire
d9a0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
d9b0: 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20  BEFORE or AFTER 
d9c0: 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e  keyword determin
d9d0: 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67  es when the trig
d9e0: 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c  ger actions.will
d9f0: 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c   be executed rel
da00: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73  ative to the ins
da10: 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61  ertion, modifica
da20: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20  tion or removal 
da30: 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65  of the.associate
da40: 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  d row.</p>..<p>^
da50: 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  An [ON CONFLICT]
da60: 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73   clause may be s
da70: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
da80: 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   of an [UPDATE] 
da90: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69  or [INSERT].acti
daa0: 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  on within the bo
dab0: 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  dy of the trigge
dac0: 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61  r..^However if a
dad0: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
dae0: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
daf0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
db00: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
db10: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
db20: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
db30: 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e  conflict handlin
db40: 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20  g.policy of the 
db50: 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20  outer statement 
db60: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
db70: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
db80: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
db90: 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47  ally [DROP TRIGG
dba0: 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68  ER | dropped].wh
dbb0: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  en the table tha
dbc0: 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f  t they are .asso
dbd0: 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65  ciated with (the
dbe0: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
dbf0: 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44  i> table) is .[D
dc00: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
dc10: 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20  ped].  ^However 
dc20: 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61  if the trigger a
dc30: 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65  ctions reference
dc40: 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74  .other tables, t
dc50: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  he trigger is no
dc60: 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64  t dropped or mod
dc70: 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f  ified if those o
dc80: 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20  ther.tables are 
dc90: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
dca0: 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52  opped] or [ALTER
dcb0: 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65   TABLE | modifie
dcc0: 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  d].</p>..<p>^Tri
dcd0: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
dce0: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f  d using the [DRO
dcf0: 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  P TRIGGER] state
dd00: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ment.</p>..<h3>S
dd10: 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f  yntax Restrictio
dd20: 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45  ns On UPDATE, DE
dd30: 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54  LETE, and INSERT
dd40: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
dd50: 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c  in.    Triggers<
dd60: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55  /h3>..<p>^The [U
dd70: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
dd80: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73  , and [INSERT].s
dd90: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
dda0: 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   triggers do not
ddb0: 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c   support.the ful
ddc0: 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50  l syntax for [UP
ddd0: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
dde0: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74   and [INSERT] st
ddf0: 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66  atements.  The f
de00: 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63  ollowing.restric
de10: 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e  tions apply:</p>
de20: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
de30: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
de40: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
de50: 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55  odified in an [U
de60: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
de70: 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20  , or [INSERT].  
de80: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
de90: 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64  e an unqualified
dea0: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e   table name.  In
deb0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e   other words, on
dec0: 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73  e must.  use jus
ded0: 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  t "<i>tablename<
dee0: 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74  /i>" not "<i>dat
def0: 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  abase</i><b>.</b
df00: 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  ><i>tablename</i
df10: 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66  >".  when specif
df20: 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29  ying the table.)
df30: 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  ^  ^The table to
df40: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73   be modified mus
df50: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
df60: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
df70: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
df80: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
df90: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
dfa0: 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ched..  </p></li
dfb0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
dfc0: 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  e "INSERT INTO <
dfd0: 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41  i>table</i> DEFA
dfe0: 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d  ULT VALUES" form
dff0: 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
e000: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
e010: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
e020: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
e030: 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58  <p>.  ^The INDEX
e040: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
e050: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
e060: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
e070: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  for [UPDATE] and
e080: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  .  [DELETE] stat
e090: 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  ements..  </p></
e0a0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
e0b0: 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e  (The ORDER BY an
e0c0: 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
e0d0: 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  on [UPDATE] and 
e0e0: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
e0f0: 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75  nts are not.  su
e100: 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20  pported.  ORDER 
e110: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65  BY and LIMIT are
e120: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75   not normally su
e130: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
e140: 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54  ATE] or.  [DELET
e150: 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  E] in any contex
e160: 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61  t but can be ena
e170: 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  bled for top-lev
e180: 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  el statements.  
e190: 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54  using the [SQLIT
e1a0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
e1b0: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f  DELETE_LIMIT] co
e1c0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
e1d0: 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74  n.  However,.  t
e1e0: 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  hat compile-time
e1f0: 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70   option only app
e200: 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65  lies to top-leve
e210: 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  l [UPDATE] and [
e220: 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d  DELETE].  statem
e230: 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54  ents, not [UPDAT
e240: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
e250: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
e260: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20  n triggers.)^.  
e270: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
e280: 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61  p>.  ^[common-ta
e290: 62 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43  ble-expression|C
e2a0: 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
e2b0: 65 73 73 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20  ession] are not 
e2c0: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20  supported for.  
e2d0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 73 69 64  statements insid
e2e0: 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e 0a 20  e of triggers.. 
e2f0: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e   </p></li>.</ul>
e300: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e310: 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72  nt instead_of_tr
e320: 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f  igger {INSTEAD O
e330: 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74  F} {INSTEAD OF t
e340: 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  rigger}</tcl>.<h
e350: 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  3>INSTEAD OF tri
e360: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
e370: 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20  Triggers may be 
e380: 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77  created on [view
e390: 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f  s], as well as o
e3a0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20  rdinary tables, 
e3b0: 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e  by.specifying IN
e3c0: 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20  STEAD OF in the 
e3d0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
e3e0: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f  tatement. .^If o
e3f0: 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e  ne or more ON IN
e400: 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a  SERT, ON DELETE.
e410: 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69  or ON UPDATE tri
e420: 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e 65  ggers are define
e430: 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65  d on a view, the
e440: 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65  n it is not an.e
e450: 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20  rror to execute 
e460: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
e470: 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  E or UPDATE stat
e480: 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65  ement on the vie
e490: 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79  w, .respectively
e4a0: 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65  .  ^Instead,.exe
e4b0: 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  cuting an INSERT
e4c0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
e4d0: 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63  TE on the view c
e4e0: 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69  auses the associ
e4f0: 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f  ated.triggers to
e500: 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c   fire. ^The real
e510: 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69   tables underlyi
e520: 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65 20  ng the view are 
e530: 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78  not modified.(ex
e540: 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78  cept possibly ex
e550: 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74  plicitly, by a t
e560: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e  rigger program).
e570: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
e580: 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  hat the [sqlite3
e590: 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20  _changes()] and 
e5a0: 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
e5b0: 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66  hanges()] interf
e5c0: 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e  aces.do not coun
e5d0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
e5e0: 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75  gger firings, bu
e5f0: 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61  t the.[count_cha
e600: 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65  nges pragma] doe
e610: 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  s count INSTEAD 
e620: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
e630: 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65  g.</p>..<h3>Some
e640: 20 45 78 61 6d 70 6c 65 20 54 72 69 67 67 65 72   Example Trigger
e650: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73  s</h3>..<p>^(Ass
e660: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
e670: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
e680: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
e690: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
e6a0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
e6b0: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
e6c0: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
e6d0: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
e6e0: 6c 6c 6f 77 69 6e 67 0a 55 50 44 41 54 45 20 74  llowing.UPDATE t
e6f0: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
e700: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
e710: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
e720: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
e730: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
e740: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
e750: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
e760: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
e770: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
e780: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
e790: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
e7a0: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
e7b0: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
e7c0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
e7d0: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
e7e0: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
e7f0: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
e800: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
e810: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
e820: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
e830: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
e840: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
e850: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
e860: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
e870: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
e880: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
e890: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
e8a0: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
e8b0: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
e8c0: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
e8d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
e8e0: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
e8f0: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
e900: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
e910: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
e920: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
e930: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
e940: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
e950: 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61  ^..<p>For an exa
e960: 6d 70 6c 65 20 6f 66 20 61 6e 20 49 4e 53 54 45  mple of an INSTE
e970: 41 44 20 4f 46 20 74 72 69 67 67 65 72 2c 20 63  AD OF trigger, c
e980: 6f 6e 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c  onsider the foll
e990: 6f 77 69 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c  owing schema:..<
e9a0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
e9b0: 45 41 54 45 20 54 41 42 4c 45 20 63 75 73 74 6f  EATE TABLE custo
e9c0: 6d 65 72 28 0a 20 20 63 75 73 74 5f 69 64 20 49  mer(.  cust_id I
e9d0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e9e0: 45 59 2c 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20  EY,.  cust_name 
e9f0: 54 45 58 54 2c 0a 20 20 63 75 73 74 5f 61 64 64  TEXT,.  cust_add
ea00: 72 20 54 45 58 54 0a 29 3b 0a 43 52 45 41 54 45  r TEXT.);.CREATE
ea10: 20 56 49 45 57 20 63 75 73 74 6f 6d 65 72 5f 61   VIEW customer_a
ea20: 64 64 72 65 73 73 20 41 53 0a 20 20 20 53 45 4c  ddress AS.   SEL
ea30: 45 43 54 20 63 75 73 74 5f 69 64 2c 20 63 75 73  ECT cust_id, cus
ea40: 74 5f 61 64 64 72 20 46 52 4f 4d 20 63 75 73 74  t_addr FROM cust
ea50: 6f 6d 65 72 3b 0a 43 52 45 41 54 45 20 54 52 49  omer;.CREATE TRI
ea60: 47 47 45 52 20 63 75 73 74 5f 61 64 64 72 5f 63  GGER cust_addr_c
ea70: 68 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46 20 55  hng.INSTEAD OF U
ea80: 50 44 41 54 45 20 4f 46 20 63 75 73 74 5f 61 64  PDATE OF cust_ad
ea90: 64 72 20 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61  dr ON customer_a
eaa0: 64 64 72 65 73 73 0a 42 45 47 49 4e 0a 20 20 55  ddress.BEGIN.  U
eab0: 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 20 53  PDATE customer S
eac0: 45 54 20 63 75 73 74 5f 61 64 64 72 3d 4e 45 57  ET cust_addr=NEW
ead0: 2e 63 75 73 74 5f 61 64 64 72 0a 20 20 20 57 48  .cust_addr.   WH
eae0: 45 52 45 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e  ERE cust_id=NEW.
eaf0: 63 75 73 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c  cust_id;.END;.}<
eb00: 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74  /tcl>..<p>With t
eb10: 68 65 20 73 63 68 65 6d 61 20 61 62 6f 76 65 2c  he schema above,
eb20: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20   a statement of 
eb30: 74 68 65 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c  the form:</p>..<
eb40: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
eb50: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 5f 61 64  DATE customer_ad
eb60: 64 72 65 73 73 20 53 45 54 20 63 75 73 74 5f 61  dress SET cust_a
eb70: 64 64 72 3d 24 6e 65 77 5f 61 64 64 72 65 73 73  ddr=$new_address
eb80: 20 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d 24   WHERE cust_id=$
eb90: 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e  cust_id;.}</tcl>
eba0: 0a 0a 3c 70 3e 43 61 75 73 65 73 20 74 68 65 20  ..<p>Causes the 
ebb0: 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64  customer.cust_ad
ebc0: 64 72 20 66 69 65 6c 64 20 74 6f 20 62 65 20 75  dr field to be u
ebd0: 70 64 61 74 65 64 20 66 6f 72 20 61 20 73 70 65  pdated for a spe
ebe0: 63 69 66 69 63 0a 63 75 73 74 6f 6d 65 72 20 65  cific.customer e
ebf0: 6e 74 72 79 20 74 68 61 74 20 68 61 73 20 63 75  ntry that has cu
ec00: 73 74 6f 6d 65 72 2e 63 75 73 74 5f 69 64 20 65  stomer.cust_id e
ec10: 71 75 61 6c 20 74 6f 20 74 68 65 20 24 63 75 73  qual to the $cus
ec20: 74 5f 69 64 20 70 61 72 61 6d 65 74 65 72 2e 0a  t_id parameter..
ec30: 4e 6f 74 65 20 68 6f 77 20 74 68 65 20 76 61 6c  Note how the val
ec40: 75 65 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20  ues assigned to 
ec50: 74 68 65 20 76 69 65 77 20 61 72 65 20 6d 61 64  the view are mad
ec60: 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 66  e available as f
ec70: 69 65 6c 64 0a 69 6e 20 74 68 65 20 73 70 65 63  ield.in the spec
ec80: 69 61 6c 20 22 4e 45 57 22 20 74 61 62 6c 65 20  ial "NEW" table 
ec90: 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67  within the trigg
eca0: 65 72 20 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74  er body.</p>..<t
ecb0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
ecc0: 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64  ndef_before {und
ecd0: 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72  efined BEFORE tr
ece0: 69 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c  igger behavior}<
ecf0: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f  /tcl>.<h3>Cautio
ed00: 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66  ns On The Use Of
ed10: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73   BEFORE triggers
ed20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42  </h3>..<p>If a B
ed30: 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20  EFORE UPDATE or 
ed40: 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72  BEFORE DELETE tr
ed50: 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f  igger modifies o
ed60: 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a  r deletes a row.
ed70: 74 68 61 74 20 77 61 73 20 74 6f 20 68 61 76 65  that was to have
ed80: 20 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72   been updated or
ed90: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74   deleted, then t
eda0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
edb0: 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61   subsequent.upda
edc0: 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65  te or delete ope
edd0: 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69  ration is undefi
ede0: 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ned.  Furthermor
edf0: 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20 74  e, if a BEFORE t
ee00: 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20  rigger.modifies 
ee10: 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77  or deletes a row
ee20: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64  , then it is und
ee30: 65 66 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f  efined whether o
ee40: 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67  r not AFTER trig
ee50: 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20  gers.that would 
ee60: 68 61 76 65 20 6f 74 68 65 72 77 69 73 65 20 72  have otherwise r
ee70: 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73  un on those rows
ee80: 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75   will in fact ru
ee90: 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  n..</p>..<p>The 
eea0: 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77  value of NEW.row
eeb0: 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20  id is undefined 
eec0: 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45  in a BEFORE INSE
eed0: 52 54 20 74 72 69 67 67 65 72 20 69 6e 20 77 68  RT trigger in wh
eee0: 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73  ich.the rowid is
eef0: 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20   not explicitly 
ef00: 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  set to an intege
ef10: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75  r.</p>..<p>Becau
ef20: 73 65 20 6f 66 20 74 68 65 20 62 65 68 61 76 69  se of the behavi
ef30: 6f 72 73 20 64 65 73 63 72 69 62 65 64 20 61 62  ors described ab
ef40: 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  ove, programmers
ef50: 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20   are encouraged 
ef60: 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52 20  to.prefer AFTER 
ef70: 74 72 69 67 67 65 72 73 20 6f 76 65 72 20 42 45  triggers over BE
ef80: 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f  FORE triggers.</
ef90: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
efa0: 6d 65 6e 74 20 72 61 69 73 65 20 7b 52 41 49 53  ment raise {RAIS
efb0: 45 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c  E function}</tcl
efc0: 3e 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28  >.<h3>The RAISE(
efd0: 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a  ) function</h3>.
efe0: 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20  .<p>^(A special 
eff0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49  SQL function RAI
f000: 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64  SE() may be used
f010: 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65   within a trigge
f020: 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74  r-program,)^.wit
f030: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
f040: 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63  syntax</p> ..<tc
f050: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
f060: 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f  raise-function</
f070: 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  tcl>..<p>^(When 
f080: 6f 6e 65 20 6f 66 20 52 41 49 53 45 28 52 4f 4c  one of RAISE(ROL
f090: 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53  LBACK,...), RAIS
f0a0: 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20  E(ABORT,...) or 
f0b0: 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a  RAISE(FAIL,...).
f0c0: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
f0d0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
f0e0: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
f0f0: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
f100: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
f110: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
f120: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
f130: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a  y terminates.)^.
f140: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
f150: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
f160: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
f170: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
f180: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
f190: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
f1a0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
f1b0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45  ..<p>^When RAISE
f1c0: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
f1d0: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
f1e0: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
f1f0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
f200: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
f210: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
f220: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
f230: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
f240: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
f250: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
f260: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62  hat would have b
f270: 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72 65  een executed are
f280: 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20   abandoned. ^No 
f290: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
f2a0: 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b   are rolled back
f2b0: 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74 65  .  ^If the state
f2c0: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
f2d0: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
f2e0: 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20  gram.to execute 
f2f0: 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f  is itself part o
f300: 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  f a trigger prog
f310: 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ram, then that t
f320: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72  rigger program.r
f330: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
f340: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
f350: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
f360: 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ep..</p>..<tcl>h
f370: 64 5f 66 72 61 67 6d 65 6e 74 20 74 65 6d 70 74  d_fragment tempt
f380: 72 69 67 20 7b 54 45 4d 50 20 74 72 69 67 67 65  rig {TEMP trigge
f390: 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74  rs on non-TEMP t
f3a0: 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ables}</tcl>.<h3
f3b0: 3e 54 45 4d 50 20 54 72 69 67 67 65 72 73 20 6f  >TEMP Triggers o
f3c0: 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65  n Non-TEMP Table
f3d0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
f3e0: 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20  rigger normally 
f3f0: 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 73 61  exists in the sa
f400: 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 74  me database as t
f410: 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61  he table named.a
f420: 66 74 65 72 20 74 68 65 20 22 4f 4e 22 20 6b 65  fter the "ON" ke
f430: 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43 52 45  yword in the CRE
f440: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
f450: 65 6d 65 6e 74 2e 20 20 45 78 63 65 70 74 2c 20  ement.  Except, 
f460: 69 74 20 69 73 0a 70 6f 73 73 69 62 6c 65 20 74  it is.possible t
f470: 6f 20 63 72 65 61 74 65 20 61 20 54 45 4d 50 20  o create a TEMP 
f480: 54 52 49 47 47 45 52 20 6f 6e 20 61 20 74 61 62  TRIGGER on a tab
f490: 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72 20 64 61  le in another da
f4a0: 74 61 62 61 73 65 2e 29 5e 20 20 0a 53 75 63 68  tabase.)^  .Such
f4b0: 20 61 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20   a trigger will 
f4c0: 6f 6e 6c 79 20 66 69 72 65 20 77 68 65 6e 20 63  only fire when c
f4d0: 68 61 6e 67 65 73 0a 61 72 65 20 6d 61 64 65 20  hanges.are made 
f4e0: 74 6f 20 74 68 65 20 74 61 72 67 65 74 20 74 61  to the target ta
f4f0: 62 6c 65 20 62 79 20 74 68 65 20 61 70 70 6c 69  ble by the appli
f500: 63 61 74 69 6f 6e 20 74 68 61 74 20 64 65 66 69  cation that defi
f510: 6e 65 64 20 74 68 65 20 74 72 69 67 67 65 72 2e  ned the trigger.
f520: 0a 4f 74 68 65 72 20 61 70 70 6c 69 63 61 74 69  .Other applicati
f530: 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69 66 79 20  ons that modify 
f540: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c  the database wil
f550: 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f  l not be able to
f560: 20 73 65 65 20 74 68 65 0a 54 45 4d 50 20 74 72   see the.TEMP tr
f570: 69 67 67 65 72 20 61 6e 64 20 68 65 6e 63 65 20  igger and hence 
f580: 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68 65 20 74  cannot run the t
f590: 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  rigger.</p>..<p>
f5a0: 57 68 65 6e 20 64 65 66 69 6e 69 6e 67 20 61 20  When defining a 
f5b0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 6f 6e 20  TEMP trigger on 
f5c0: 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65  a non-TEMP table
f5d0: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
f5e0: 74 20 74 6f 0a 73 70 65 63 69 66 79 20 74 68 65  t to.specify the
f5f0: 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
f600: 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74  g the non-TEMP t
f610: 61 62 6c 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  able.  For examp
f620: 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  le,.in the follo
f630: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c 20  wing statement, 
f640: 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  it is important 
f650: 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e 74 61 62  to say "main.tab
f660: 31 22 20 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75  1" instead.of ju
f670: 73 74 20 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a  st "tab1":</p>..
f680: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
f690: 3e 0a 43 52 45 41 54 45 20 54 45 4d 50 20 54 52  >.CREATE TEMP TR
f6a0: 49 47 47 45 52 20 65 78 31 20 41 46 54 45 52 20  IGGER ex1 AFTER 
f6b0: 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69  INSERT ON <b>mai
f6c0: 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45 47 49 4e  n.</b>tab1 BEGIN
f6d0: 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f   ....</pre></blo
f6e0: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69  ckquote>..<p>Fai
f6f0: 6c 75 72 65 20 74 6f 20 73 70 65 63 69 66 79 20  lure to specify 
f700: 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  the schema name 
f710: 6f 6e 20 74 68 65 20 74 61 72 67 65 74 20 74 61  on the target ta
f720: 62 6c 65 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  ble could result
f730: 0a 69 6e 20 74 68 65 20 54 45 4d 50 20 74 72 69  .in the TEMP tri
f740: 67 67 65 72 20 62 65 69 6e 67 20 72 65 61 74 74  gger being reatt
f750: 61 63 68 65 64 20 74 6f 20 61 20 74 61 62 6c 65  ached to a table
f760: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
f770: 61 6d 65 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64  ame in.another d
f780: 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
f790: 20 61 6e 79 20 73 63 68 65 6d 61 20 63 68 61 6e   any schema chan
f7a0: 67 65 20 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a  ge occurs.</p>..
f7b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f800: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
f810: 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65  REATE VIEW} {cre
f820: 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54  ateview} {{CREAT
f830: 45 20 56 49 45 57 7d 20 76 69 65 77 20 56 49 45  E VIEW} view VIE
f840: 57 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72  W *views}..Recur
f850: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
f860: 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74  m create-view-st
f870: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
f880: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
f890: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
f8a0: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
f8b0: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
f8c0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
f8d0: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
f8e0: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
f8f0: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
f900: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
f910: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
f920: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
f930: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
f940: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
f950: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
f960: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
f970: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
f980: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
f990: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
f9a0: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
f9b0: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
f9c0: 68 65 0a 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  he.[database con
f9d0: 6e 65 63 74 69 6f 6e 5d 20 74 68 61 74 20 63 72  nection] that cr
f9e0: 65 61 74 65 64 20 69 74 20 61 6e 64 20 69 73 20  eated it and is 
f9f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
fa00: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
fa10: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fa20: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  on is closed.</p
fa30: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  >..<p> ^If a <yy
fa40: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
fa50: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
fa60: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
fa70: 20 76 69 65 77 20 0a 69 73 20 63 72 65 61 74 65   view .is create
fa80: 64 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  d in the specifi
fa90: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 5e 49 74  ed database..^It
faa0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
fab0: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 3c  specify both a <
fac0: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
fad0: 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20  me</yyterm>.and 
fae0: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
faf0: 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65   on a VIEW, unle
fb00: 73 73 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 73  ss the <yyterm>s
fb10: 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
fb20: 72 6d 3e 20 0a 69 73 20 22 74 65 6d 70 22 2e 0a  rm> .is "temp"..
fb30: 5e 49 66 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61  ^If no schema na
fb40: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
fb50: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
fb60: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
fb70: 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69  sent,.the VIEW i
fb80: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
fb90: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
fba0: 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e  /p>..<p>^You can
fbb0: 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  not [DELETE], [I
fbc0: 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41  NSERT], or [UPDA
fbd0: 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69  TE] a view.  ^Vi
fbe0: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
fbf0: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e  y .in SQLite.  ^
fc00: 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79  However, in many
fc10: 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75   cases you can u
fc20: 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f  se an.[INSTEAD O
fc30: 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68  F trigger] on th
fc40: 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70  e view to accomp
fc50: 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74  lish .the same t
fc60: 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72  hing.  ^Views ar
fc70: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
fc80: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
fc90: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
fca0: 3e 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63  >^If a <yyterm>c
fcb0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
fcc0: 72 6d 3e 20 6c 69 73 74 20 66 6f 6c 6c 6f 77 73  rm> list follows
fcd0: 20 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e 76 69   .the <yyterm>vi
fce0: 65 77 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ew-name</yyterm>
fcf0: 2c 20 74 68 65 6e 20 74 68 61 74 20 6c 69 73 74  , then that list
fd00: 20 64 65 74 65 72 6d 69 6e 65 73 0a 74 68 65 20   determines.the 
fd10: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c  names of the col
fd20: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 76 69 65  umns for the vie
fd30: 77 2e 20 20 5e 49 66 20 74 68 65 20 3c 79 79 74  w.  ^If the <yyt
fd40: 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
fd50: 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73  /yyterm>.list is
fd60: 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 74   omitted, then t
fd70: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
fd80: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
fd90: 69 65 77 20 61 72 65 20 64 65 72 69 76 65 64 0a  iew are derived.
fda0: 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 73 20 6f  from the names o
fdb0: 66 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  f the result-set
fdc0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fdd0: 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 2e 0a 4e  [select-stmt]..N
fde0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 3c 79 79  ote that the <yy
fdf0: 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
fe00: 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 73  </yyterm> list s
fe10: 79 6e 74 61 78 20 69 73 20 6f 6e 6c 79 0a 73 75  yntax is only.su
fe20: 70 70 6f 72 74 65 64 20 69 6e 20 53 51 4c 69 74  pported in SQLit
fe30: 65 20 76 65 72 73 69 6f 6e 73 20 33 2e 39 2e 30  e versions 3.9.0
fe40: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d   ([dateof:3.9.0]
fe50: 29 20 61 6e 64 20 6c 61 74 65 72 2e 0a 0a 3c 74  ) and later...<t
fe60: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
fe70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
feb0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
fec0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
fed0: 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b  } {createvtab} {
fee0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
fef0: 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
ff00: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
ff10: 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74  create-virtual-t
ff20: 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  able-stmt.</tcl>
ff30: 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20  ..<p>A [virtual 
ff40: 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74  table] is an int
ff50: 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74  erface to an ext
ff60: 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72  ernal storage or
ff70: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67   computation.eng
ff80: 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72 73  ine that appears
ff90: 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62   to be a table b
ffa0: 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75  ut does not actu
ffb0: 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72  ally store infor
ffc0: 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61  mation.in the da
ffd0: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
ffe0: 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c  ..<p>In general,
fff0: 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74   you can do anyt
10000 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72  hing with a [vir
10010 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74  tual table] that
10020 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74   can be done.wit
10030 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  h an ordinary ta
10040 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74  ble, except that
10050 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65   ^you cannot cre
10060 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74  ate indices or t
10070 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72  riggers on a.vir
10080 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f  tual table.  ^So
10090 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  me virtual table
100a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
100b0 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64   might impose ad
100c0 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63  ditional.restric
100d0 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d  tions.  For exam
100e0 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61  ple, many virtua
100f0 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61  l tables are rea
10100 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d-only.</p>..<p>
10110 54 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75  The <yyterm>modu
10120 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
10130 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
10140 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69  an object that i
10150 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69  mplements.the vi
10160 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54  rtual table.  ^T
10170 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c  he <yyterm>modul
10180 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
10190 6d 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72  must be register
101a0 65 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69  ed with.the SQLi
101b0 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  te database conn
101c0 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71  ection using.[sq
101d0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
101e0 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74  ule()] or [sqlit
101f0 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
10200 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20  _v2()].prior to 
10210 69 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41  issuing the CREA
10220 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
10230 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65   statement..^The
10240 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65   module takes ze
10250 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61  ro or more comma
10260 2d 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d  -separated argum
10270 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d  ents..^The argum
10280 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74  ents can be just
10290 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20   about any text 
102a0 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61  as long as it ha
102b0 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e  s balanced.paren
102c0 74 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67  theses.  The arg
102d0 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20  ument syntax is 
102e0 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e  sufficiently gen
102f0 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72  eral that the.ar
10300 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d  guments can be m
10310 61 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73  ade to appear as
10320 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
10330 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69  ions] in a tradi
10340 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54  tional.[CREATE T
10350 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
10360 20 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65    .^SQLite passe
10370 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67  s the module arg
10380 75 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a  uments directly.
10390 74 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d  to the [xCreate]
103a0 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20   and [xConnect] 
103b0 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d  methods of the m
103c0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
103d0 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79  tion.without any
103e0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e   interpretation.
103f0 20 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70    It is the resp
10400 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68  onsibility.of th
10410 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
10420 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65  ntation to parse
10430 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69   and interpret i
10440 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73  ts own arguments
10450 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72  .</p>..<p>^A vir
10460 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65  tual table is de
10470 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68  stroyed using th
10480 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50  e ordinary.[DROP
10490 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
104a0 74 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a  t.  There is no.
104b0 44 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42  DROP VIRTUAL TAB
104c0 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70  LE statement.</p
104d0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
104e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10520 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
10530 44 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44  DELETE delete {D
10540 45 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a  ELETE *DELETEs}.
10550 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
10560 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73  Diagram delete-s
10570 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
10580 68 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e  he DELETE comman
10590 64 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64  d removes record
105a0 73 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65  s from the table
105b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
105c0 68 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64  he.   [qualified
105d0 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c  -table-name]...<
105e0 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20  p>^If the WHERE 
105f0 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72  clause is not pr
10600 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72  esent, all recor
10610 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
10620 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
10630 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  ^If a WHERE clau
10640 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
10650 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
10660 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
10670 68 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75  he.   WHERE clau
10680 73 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72  se [boolean expr
10690 65 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20  ession] is true 
106a0 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
106b0 5e 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20  ^Rows for which 
106c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
106d0 73 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20  s false or NULL 
106e0 61 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c  are retained...<
106f0 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
10700 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
10710 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
10720 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
10730 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
10740 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
10750 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
10760 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
10770 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
10780 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
10790 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
107a0 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
107b0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79   <li><p>^The <yy
107c0 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  term>table-name<
107d0 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69  /yyterm> specifi
107e0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20  ed as part of a 
107f0 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74  .    DELETE stat
10800 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
10810 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20   a trigger body 
10820 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66  must be unqualif
10830 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72  ied.  ^(In other
10840 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20   words, the.    
10850 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  <i>schema-name</
10860 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69  i><b>.</b> prefi
10870 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  x on the table n
10880 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ame is not allow
10890 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74  ed .    within t
108a0 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74  riggers.)^ ^If t
108b0 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
108c0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
108d0 20 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20   attached is.   
108e0 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70   not in the temp
108f0 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
10900 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10910 73 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69  s within the tri
10920 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75  gger.    body mu
10930 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61  st operate on ta
10940 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  bles within the 
10950 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
10960 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
10970 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20  le.    to which 
10980 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
10990 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
109a0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
109b0 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e   then the.    un
109c0 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
109d0 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
109e0 67 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73  g deleted is res
109f0 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
10a00 65 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20  e way as.    it 
10a10 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76  is for a top-lev
10a20 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79  el statement (by
10a30 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74   searching first
10a40 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
10a50 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  se, then.    the
10a60 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
10a70 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64  then any other d
10a80 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20  atabases in the 
10a90 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a  order they were.
10aa0 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20      attached).. 
10ab0 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68     .  <li><p>^Th
10ac0 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
10ad0 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
10ae0 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
10af0 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20  owed on DELETE. 
10b00 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
10b10 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
10b20 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  p>..  <li><p>^Th
10b30 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  e LIMIT and ORDE
10b40 52 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65  R BY clauses (de
10b50 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61  scribed below) a
10b60 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66  re unsupported f
10b70 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74  or.    DELETE st
10b80 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
10b90 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f  triggers.</p>.</
10ba0 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  ul>..<h3>Optiona
10bb0 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
10bc0 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33  R BY clauses</h3
10bd0 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
10be0 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
10bf0 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
10c00 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
10c10 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
10c20 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
10c30 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
10c40 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
10c50 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e  atement is.exten
10c60 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74  ded by the addit
10c70 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20  ion of optional 
10c80 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
10c90 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70  IT clauses:)^</p
10ca0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
10cb0 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
10cc0 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
10cd0 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45  .<p>^If a DELETE
10ce0 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
10cf0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
10d00 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
10d10 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77  r of rows that.w
10d20 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69  ill be deleted i
10d30 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75  s found by evalu
10d40 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70  ating the accomp
10d50 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f  anying expressio
10d60 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74  n and casting.it
10d70 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
10d80 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65  alue. ^If the re
10d90 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c  sult of the eval
10da0 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  uating the LIMIT
10db0 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62   clause.cannot b
10dc0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
10dd0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
10de0 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69  eger value, it i
10df0 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a  s an error. ^A .
10e00 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76  negative LIMIT v
10e10 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65  alue is interpre
10e20 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74  ted as "no limit
10e30 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45  ". ^(If the DELE
10e40 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c  TE statement .al
10e50 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
10e60 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74   clause, then it
10e70 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
10e80 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
10e90 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76   to an.integer v
10ea0 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20  alue. Again, it 
10eb0 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  is an error if t
10ec0 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  he value cannot 
10ed0 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
10ee0 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
10ef0 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65  teger.)^ ^If the
10f00 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20  re is no OFFSET 
10f10 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63  clause, or the c
10f20 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65  alculated.intege
10f30 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74  r value is negat
10f40 69 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69  ive, the effecti
10f50 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20  ve OFFSET value 
10f60 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49  is zero...<p>^(I
10f70 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
10f80 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
10f90 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
10fa0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
10fb0 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65  t would .be dele
10fc0 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
10fd0 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
10fe0 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65  clause are sorte
10ff0 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  d according to t
11000 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68  he .ORDER BY. Th
11010 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e  e first <i>M</i>
11020 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e   rows, where <i>
11030 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  M</i> is the val
11040 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c  ue found by.eval
11050 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45  uating the OFFSE
11060 54 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  T clause express
11070 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64  ion, are skipped
11080 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77  , and the follow
11090 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77  ing .<i>N</i>, w
110a0 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73  here <i>N</i> is
110b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
110c0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
110d0 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e  on, are deleted.
110e0 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65  )^.^If there are
110f0 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c   less than <i>N<
11100 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69  /i> rows remaini
11110 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20  ng after taking 
11120 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
11130 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20  e.into account, 
11140 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20  or if the LIMIT 
11150 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64  clause evaluated
11160 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
11170 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72  alue, then all.r
11180 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72  emaining rows ar
11190 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  e deleted...<p>^
111a0 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
111b0 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
111c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
111d0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
111e0 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65  at.would be dele
111f0 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
11200 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
11210 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
11220 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
11230 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
11240 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
11250 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
11260 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
11270 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74  mine .the subset
11280 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
11290 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e  ly deleted...<p>
112a0 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  ^(The ORDER BY c
112b0 6c 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54  lause on a DELET
112c0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
112d0 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65  sed only to dete
112e0 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73  rmine which.rows
112f0 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65   fall within the
11300 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65   LIMIT. The orde
11310 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
11320 61 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61  are deleted is a
11330 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20  rbitrary.and is 
11340 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62  not influenced b
11350 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  y the ORDER BY c
11360 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68  lause.)^..<tcl>h
11370 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63  d_fragment trunc
11380 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65  ateopt {truncate
11390 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f   optimization}</
113a0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75  tcl>.<h3>The Tru
113b0 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69  ncate Optimizati
113c0 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65  on</h3>..<p>^Whe
113d0 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f  n the WHERE is o
113e0 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45  mitted from a DE
113f0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  LETE statement a
11400 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69  nd the table.bei
11410 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e  ng deleted has n
11420 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69  o triggers,.SQLi
11430 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d  te uses an optim
11440 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65  ization to erase
11450 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c   the entire tabl
11460 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75  e content.withou
11470 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69  t having to visi
11480 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  t each row of th
11490 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75  e table individu
114a0 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e  ally..This "trun
114b0 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69  cate" optimizati
114c0 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c  on makes the del
114d0 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73  ete run much fas
114e0 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51  ter..Prior to SQ
114f0 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e  Lite [version 3.
11500 36 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  6.5] ([dateof:3.
11510 36 2e 35 5d 29 2c 20 74 68 65 20 74 72 75 6e 63  6.5]), the trunc
11520 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
11530 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74  .also meant that
11540 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
11550 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71  anges()] and.[sq
11560 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
11570 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
11580 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74  s.and the [count
11590 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
115a0 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c  .will not actual
115b0 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ly return the nu
115c0 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20  mber of deleted 
115d0 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f  rows.  .That pro
115e0 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
115f0 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  xed as of [versi
11600 6f 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65  on 3.6.5] ([date
11610 6f 66 3a 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70 3e  of:3.6.5])...<p>
11620 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70  ^The truncate op
11630 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62  timization can b
11640 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
11650 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71  sabled for all q
11660 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70  ueries.by recomp
11670 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74  iling.SQLite wit
11680 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d  h the [SQLITE_OM
11690 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49  IT_TRUNCATE_OPTI
116a0 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c  MIZATION] compil
116b0 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f  e-time switch.</
116c0 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63  p>..<p>The trunc
116d0 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
116e0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73   can also be dis
116f0 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65  abled at runtime
11700 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69   using.the [sqli
11710 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
11720 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  er()] interface.
11730 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69    ^If an authori
11740 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74  zer callback.ret
11750 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e  urns [SQLITE_IGN
11760 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c  ORE] for an [SQL
11770 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69  ITE_DELETE] acti
11780 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68  on code, then.th
11790 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69  e DELETE operati
117a0 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20  on will proceed 
117b0 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65  but the truncate
117c0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69   optimization wi
117d0 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61  ll.be bypassed a
117e0 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  nd rows will be 
117f0 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f  deleted one by o
11800 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ne.</p>..<tcl>.#
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 23 23 23 23 23  ################
11840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
11860 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44  ection {DETACH D
11870 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20  ATABASE} detach 
11880 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73 69  *DETACH..Recursi
11890 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
118a0 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63  detach-stmt.</tc
118b0 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  l>..<p>^This sta
118c0 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20  tement detaches 
118d0 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  an additional da
118e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
118f0 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74  n previously .at
11900 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65  tached using the
11910 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d   [ATTACH] statem
11920 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74  ent.  .^When not
11930 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68   in [shared cach
11940 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20  e mode], .it is 
11950 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65  possible to have
11960 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
11970 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64  se file attached
11980 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
11990 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74  using .different
119a0 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61   names, and deta
119b0 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63  ching one connec
119c0 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77  tion to a file w
119d0 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f  ill leave the .o
119e0 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70  thers intact.</p
119f0 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63 61  >.^In [shared ca
11a00 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d  che mode], attem
11a10 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68 20  pting to attach 
11a20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
11a30 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e  e file more.than
11a40 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69 6e   once results in
11a50 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e 5e   an error...<p>^
11a60 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  This statement w
11a70 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69  ill fail if SQLi
11a80 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64  te is in the mid
11a90 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
11aa0 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tion.</p>...<tcl
11ab0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
11ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b00 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49  .Section {DROP I
11b10 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20  NDEX} dropindex 
11b20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a  {{DROP INDEX}}..
11b30 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
11b40 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65  iagram drop-inde
11b50 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
11b60 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45  p>^The DROP INDE
11b70 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  X statement remo
11b80 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64  ves an index add
11b90 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45  ed.with the [CRE
11ba0 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
11bb0 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78  ment.  The index
11bc0 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
11bd0 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20  emoved from.the 
11be0 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20  disk.  The only 
11bf0 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74  way to recover t
11c00 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72  he index is to r
11c10 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f  eenter the.appro
11c20 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49  priate [CREATE I
11c30 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  NDEX] command.</
11c40 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
11c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c90 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
11ca0 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72   {DROP TABLE} dr
11cb0 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54  optable {{DROP T
11cc0 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
11cd0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
11ce0 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  rop-table-stmt.<
11cf0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
11d00 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
11d10 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
11d20 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
11d30 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
11d40 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
11d50 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
11d60 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61   is the.table na
11d70 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65  me.  ^The droppe
11d80 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c  d table is compl
11d90 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
11da0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
11db0 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20  .schema and the 
11dc0 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20  disk file.  The 
11dd0 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65  table can not be
11de0 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41   recovered.  .^A
11df0 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
11e00 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
11e10 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
11e20 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
11e30 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ed.</p>..<p>^The
11e40 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49   optional IF EXI
11e50 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72  STS clause suppr
11e60 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20  esses the error 
11e70 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61  that would norma
11e80 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68  lly.result if th
11e90 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  e table does not
11ea0 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   exist.</p>..<p>
11eb0 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
11ec0 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
11ed0 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f  e enabled, a DRO
11ee0 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
11ef0 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c  performs an.impl
11f00 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44  icit [DELETE | D
11f10 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d  ELETE FROM] comm
11f20 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76  and before remov
11f30 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72  ing the.table fr
11f40 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
11f50 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69  schema. ^Any tri
11f60 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20 74  ggers attached t
11f70 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a  o the table are.
11f80 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65  dropped from the
11f90 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11fa0 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c   before the impl
11fb0 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
11fc0 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
11fd0 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
11fe0 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
11ff0 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
12000 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
12010 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 64  it DELETE FROM d
12020 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f  oes cause any co
12030 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67  nfigured.[foreig
12040 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74  n key actions] t
12050 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e  o take place. .^
12060 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  If the implicit 
12070 44 45 4c 45 54 45 20 46 52 4f 4d 20 65 78 65 63  DELETE FROM exec
12080 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20  uted.as part of 
12090 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
120a0 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e  mand violates an
120b0 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  y immediate fore
120c0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
120d0 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73  nts,.an error is
120e0 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
120f0 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64  e table is not d
12100 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65  ropped. ^If .the
12110 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
12120 20 46 52 4f 4d 20 63 61 75 73 65 73 20 61 6e 79   FROM causes any
12130 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   .deferred forei
12140 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12150 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65  ts to be violate
12160 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61  d, and the viola
12170 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73  tions still.exis
12180 74 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73  t when the trans
12190 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74  action is commit
121a0 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73  ted, an error is
121b0 20 72 65 74 75 72 6e 65 64 20 61 74 20 74 68 65   returned at the
121c0 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e   time.of commit.
121d0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
121e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
121f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12220 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
12230 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72  DROP TRIGGER} dr
12240 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50  optrigger {{DROP
12250 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75   TRIGGER}}..Recu
12260 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
12270 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d  am drop-trigger-
12280 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
12290 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  ^The DROP TRIGGE
122a0 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
122b0 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
122c0 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43  eated by the .[C
122d0 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
122e0 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20  tatement. ^Once 
122f0 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69  removed, the tri
12300 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20  gger definition 
12310 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65  is no.longer pre
12320 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69  sent in the sqli
12330 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71  te_master (or sq
12340 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
12350 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e  ) table and is.n
12360 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e 79 20  ot fired by any 
12370 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52  subsequent INSER
12380 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
12390 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ETE statements..
123a0 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
123b0 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
123c0 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65  matically droppe
123d0 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63  d when the assoc
123e0 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64  iated table is.d
123f0 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  ropped...<tcl>.#
12400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12440 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
12450 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57  ction {DROP VIEW
12460 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f  } dropview {{DRO
12470 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73  P VIEW}}..Recurs
12480 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
12490 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a   drop-view-stmt.
124a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
124b0 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
124c0 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
124d0 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
124e0 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
124f0 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
12500 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
12510 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
12520 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
12530 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
12540 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
12550 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
12560 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
12570 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
12580 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
12590 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
125a0 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
125b0 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73  nd optional .  s
125c0 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69  chema-name speci
125d0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
125e0 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
125f0 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
12600 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
12610 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
12620 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
12630 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
12640 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
12650 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
12660 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
12670 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
12680 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
12690 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
126a0 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
126b0 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
126c0 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
126d0 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
126e0 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
126f0 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
12700 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
12710 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
12720 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
12730 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
12740 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
12750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12790 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
127a0 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
127b0 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
127c0 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
127d0 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
127e0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
127f0 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
12800 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
12810 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
12820 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
12830 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
12840 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
12850 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
12860 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
12870 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
12880 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
12890 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
128a0 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
128b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
128c0 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
128d0 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
128e0 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
128f0 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
12900 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
12910 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
12920 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
12930 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
12940 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
12950 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
12960 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
12970 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
12980 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
12990 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
129a0 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
129b0 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
129c0 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
129d0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
129e0 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
129f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
12a00 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
12a10 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
12a20 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
12a30 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
12a40 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
12a50 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
12a60 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
12a70 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
12a80 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
12a90 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
12aa0 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
12ab0 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
12ac0 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
12ad0 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
12ae0 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
12af0 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
12b00 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
12b10 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
12b20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
12b30 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
12b40 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
12b50 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
12b60 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
12b70 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
12b80 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
12b90 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
12ba0 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
12bb0 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
12bc0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
12bd0 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
12be0 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
12bf0 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
12c00 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
12c10 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
12c20 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
12c30 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
12c40 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
12c50 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
12c60 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
12c70 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
12c80 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
12c90 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
12ca0 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
12cb0 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
12cc0 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
12cd0 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
12ce0 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
12cf0 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
12d00 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
12d10 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
12d20 3e 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61  >.  ^If a schema
12d30 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
12d40 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
12d50 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
12d60 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20  e, it must be.  
12d70 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f  either "main", o
12d80 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65 20  r "temp" or the 
12d90 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61  schema-name of a
12da0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
12db0 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68  ase..  ^Like oth
12dc0 65 72 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  er SQL identifie
12dd0 72 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65 73  rs, schema names
12de0 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   are case-insens
12df0 69 74 69 76 65 2e 0a 20 20 5e 49 66 20 61 20 73  itive..  ^If a s
12e00 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
12e10 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e  ecified, then on
12e20 6c 79 20 74 68 61 74 20 6f 6e 65 20 73 63 68 65  ly that one sche
12e30 6d 61 20 69 73 20 73 65 61 72 63 68 65 64 20 66  ma is searched f
12e40 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65 64 20 6f  or.  the named o
12e50 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
12e60 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
12e70 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
12e80 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
12e90 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
12ea0 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
12eb0 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
12ec0 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
12ed0 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
12ee0 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
12ef0 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
12f00 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
12f10 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
12f20 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
12f30 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
12f40 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
12f50 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
12f60 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
12f70 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
12f80 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
12f90 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
12fa0 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
12fb0 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
12fc0 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
12fd0 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
12fe0 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
12ff0 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
13000 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
13010 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
13020 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
13030 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
13040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13080 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
13090 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
130a0 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
130b0 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
130c0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
130d0 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
130e0 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
130f0 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
13100 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
13110 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
13120 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
13130 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
13140 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
13150 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
13160 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
13170 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
13180 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
13190 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
131a0 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
131b0 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
131c0 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
131d0 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
131e0 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
131f0 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
13200 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
13210 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
13220 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
13230 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
13240 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
13250 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
13260 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
13270 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
13280 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
13290 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
132a0 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
132b0 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
132c0 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
132d0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
132e0 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
132f0 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
13300 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
13310 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
13320 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
13330 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
13340 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
13350 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
13360 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
13370 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
13380 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
13390 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
133a0 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
133b0 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
133c0 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
133d0 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
133e0 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
133f0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
13400 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
13410 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
13420 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
13430 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
13440 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
13450 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
13460 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
13470 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
13480 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
13490 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
134a0 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
134b0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
134c0 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
134d0 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
134e0 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
134f0 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
13500 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
13510 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
13520 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
13530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13570 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
13580 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
13590 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
135a0 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63  on syntax}}..Rec
135b0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
135c0 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a  ram expr.</tcl>.
135d0 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
135e0 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
135f0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
13600 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
13610 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
13620 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
13630 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
13640 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
13650 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
13660 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
13670 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
13680 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
13690 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
136a0 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
136b0 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
136c0 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
136d0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
136e0 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
136f0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
13700 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
13710 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
13720 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
13730 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
13740 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
13750 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
13760 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
13770 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
13780 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
13790 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
137a0 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
137b0 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
137c0 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
137d0 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
137e0 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
137f0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
13800 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
13810 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
13820 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
13830 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
13840 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
13850 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
13860 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
13870 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
13880 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
13890 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
138a0 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
138b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
138c0 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
138d0 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
138e0 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
138f0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
13900 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
13910 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
13920 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
13930 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
13940 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
13950 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
13960 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
13970 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
13980 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
13990 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
139a0 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
139b0 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
139c0 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
139d0 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
139e0 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
139f0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62  htly) than any.b
13a00 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61  inary operator a
13a10 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65  nd any unary pre
13a20 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63  fix operator exc
13a30 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54  ept "~"..(COLLAT
13a40 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73  E and "~" are as
13a50 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65  sociative so the
13a60 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72  ir binding order
13a70 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
13a80 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e  .).^The collatin
13a90 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  g sequence set b
13aa0 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  y the COLLATE op
13ab0 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73  erator overrides
13ac0 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73   the.collating s
13ad0 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e  equence determin
13ae0 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  ed by the COLLAT
13af0 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61  E clause in a ta
13b00 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  ble.[column defi
13b10 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65  nition]..See the
13b20 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
13b30 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64  ence| detailed d
13b40 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c  iscussion on col
13b50 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
13b60 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79  ].in the [dataty
13b70 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e  pe | Datatype In
13b80 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65   SQLite3] docume
13b90 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  nt for additiona
13ba0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c  l information..<
13bb0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
13bc0 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72  s ".<p>^The unar
13bd0 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  y operator [Oper
13be0 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d  ator +] is a no-
13bf0 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20  op.  ^It can be 
13c00 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e  applied.to strin
13c10 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f  gs, numbers, blo
13c20 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69  bs or NULL and i
13c30 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  t always returns
13c40 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74   a result.with t
13c50 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
13c60 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
13c70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
13c80 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
13c90 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
13ca0 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
13cb0 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
13cc0 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
13cd0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
13ce0 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
13cf0 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
13d00 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
13d10 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
13d20 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
13d30 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
13d40 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
13d50 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
13d60 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
13d70 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
13d80 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
13d90 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
13da0 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
13db0 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
13dc0 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
13dd0 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
13de0 75 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  uts the value of
13df0 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
13e00 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
13e10 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
13e20 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
13e30 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
13e40 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65  perator is eithe
13e50 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  r a numeric valu
13e60 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65  e or .NULL, exce
13e70 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt for the [Oper
13e80 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
13e90 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
13ea0 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76  which always .ev
13eb0 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
13ec0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74  r NULL or a text
13ed0 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64   value.</p>"..hd
13ee0 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e  _fragment {isisn
13ef0 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72  ot} {IS operator
13f00 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  } {IS NOT operat
13f10 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70  or}..hd_puts "<p
13f20 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  >^The [Operator 
13f30 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
13f40 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72  r {IS NOT}] oper
13f50 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20  ators work.like 
13f60 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64  [Operator =] and
13f70 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65   [Operator !=] e
13f80 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f  xcept when one o
13f90 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70  r both of the.op
13fa0 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e  erands are NULL.
13fb0 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
13fc0 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  if both operands
13fd0 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   are NULL, then 
13fe0 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20  the.IS operator 
13ff0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28  evaluates to 1 (
14000 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53  true) and the IS
14010 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76   NOT operator ev
14020 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61  aluates.to 0 (fa
14030 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70  lse). ^If one op
14040 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e  erand is NULL an
14050 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e  d the other is n
14060 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20  ot, then the.IS 
14070 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14080 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20  es to 0 (false) 
14090 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
140a0 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72  perator is 1 (tr
140b0 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20  ue)..^It is not 
140c0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20  possible for an 
140d0 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70  IS or IS NOT exp
140e0 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75  ression to evalu
140f0 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70  ate to NULL..^Op
14100 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f  erators [Operato
14110 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
14120 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61  tor {IS NOT}] ha
14130 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65  ve the same .pre
14140 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72  cedence as [Oper
14150 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e  ator =]."..<tcl>
14160 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76  hd_fragment litv
14170 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61  alue {literal va
14180 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c  lue}</tcl>.<h3>L
14190 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28 43  iteral Values (C
141a0 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c  onstants)</h3>.<
141b0 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  p>.A literal val
141c0 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ue represents a 
141d0 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72  constant..^Liter
141e0 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65  al values may be
141f0 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74   integers, float
14200 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
14210 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42  s, strings,.BLOB
14220 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e  s, or NULLs..<p>
14230 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  .The syntax for 
14240 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61  integer and floa
14250 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
14260 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  als (collectivel
14270 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72  y."numeric liter
14280 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62  als") is shown b
14290 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  y the following 
142a0 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74  diagram:</p>..<t
142b0 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
142c0 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c   numeric-literal
142d0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66  </tcl>..<p>.^(If
142e0 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72   a numeric liter
142f0 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c  al has a decimal
14300 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70   point or an exp
14310 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75  onentiation.clau
14320 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61 67  se or if its mag
14330 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73 20 74  nitude is less t
14340 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  han -92233720368
14350 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65 61  54775808 or.grea
14360 74 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32  ter than 9223372
14370 30 33 36 38 35 34 37 37 35 38 30 37 2c 20 74 68  036854775807, th
14380 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74  en it is a float
14390 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
143a0 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73 20  l..Otherwise is 
143b0 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67 65  it is an  intege
143c0 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68  r literal.)^.^Th
143d0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
143e0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
143f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
14400 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
14410 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
14420 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
14430 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
14440 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
14450 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
14460 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
14470 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
14480 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
14490 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
144a0 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
144b0 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
144c0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
144d0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
144e0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
144f0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
14500 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
14510 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65 78  ment hexint {hex
14520 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
14530 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78 61   literals} {hexa
14540 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
14550 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61  }</tcl>.<p>^Hexa
14560 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
14570 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20  literals follow 
14580 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e  the C-language n
14590 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20  otation of."0x" 
145a0 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64  or "0X" followed
145b0 20 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c 20   by hexadecimal 
145c0 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61  digits..^For exa
145d0 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65 61  mple, 0x1234 mea
145e0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 34  ns the same as 4
145f0 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30 30  660.and 0x800000
14600 30 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e 73  0000000000 means
14610 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39 32   the same as -92
14620 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
14630 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d 61  8.. ^(Hexadecima
14640 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61  l integer litera
14650 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72 65 74  ls are interpret
14660 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77 6f  ed as 64-bit.two
14670 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  's-complement in
14680 74 65 67 65 72 73 20 61 6e 64 20 61 72 65 20 74  tegers and are t
14690 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73  hus limited.to s
146a0 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63 61  ixteen significa
146b0 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70 72 65  nt digits of pre
146c0 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72  cision.)^.Suppor
146d0 74 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d 61  t for hexadecima
146e0 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73 20 61  l integers was a
146f0 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 0a 76  dded to SQLite.v
14700 65 72 73 69 6f 6e 20 33 2e 38 2e 36 20 28 5b 64  ersion 3.8.6 ([d
14710 61 74 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e 0a 5e  ateof:3.8.6])..^
14720 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  For backwards co
14730 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65  mpatibility, the
14740 20 22 30 78 22 20 68 65 78 61 64 65 63 69 6d 61   "0x" hexadecima
14750 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69  l integer.notati
14760 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72  on is only under
14770 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c  stood by the SQL
14780 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73 65 72   language parser
14790 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70  , not by the.typ
147a0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f  e conversions ro
147b0 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67  utines..^(String
147c0 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a   variables that.
147d0 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72  contain text for
147e0 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61  matted like hexa
147f0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
14800 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72   are not.interpr
14810 65 74 65 64 20 61 73 20 68 65 78 61 64 65 63 69  eted as hexadeci
14820 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65  mal integers whe
14830 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73  n coercing the s
14840 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f  tring value.into
14850 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20   an integer due 
14860 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  to a [CAST expre
14870 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20  ssion] or for a 
14880 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
14890 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  ].transformation
148a0 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72   or prior to per
148b0 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69  forming a numeri
148c0 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66  c operation or f
148d0 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e  or.any other run
148e0 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e  -time conversion
148f0 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65  s.)^  ^(When coe
14900 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76  rcing a.string v
14910 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d  alue in the form
14920 61 74 20 6f 66 20 61 20 68 65 78 61 64 65 63 69  at of a hexadeci
14930 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  mal integer into
14940 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75   an integer.valu
14950 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  e, the conversio
14960 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20  n process stops 
14970 77 68 65 6e 20 74 68 65 20 27 78 27 20 63 68 61  when the 'x' cha
14980 72 61 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73  racter is seen.s
14990 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  o the resulting 
149a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73  integer value is
149b0 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a   always zero.)^.
149c0 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e  ^(SQLite only un
149d0 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 68 65  derstands the he
149e0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
149f0 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20  r notation when 
14a00 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68  it.appears in th
14a10 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
14a20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69  text, not when i
14a30 74 20 61 70 70 65 61 72 73 20 61 73 0a 70 61 72  t appears as.par
14a40 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  t of the content
14a50 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
14a60 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69  .)^..<p> ^A stri
14a70 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66  ng constant is f
14a80 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69  ormed by enclosi
14a90 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e  ng the.string in
14aa0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28   single quotes (
14ab0 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71  ').  ^A single q
14ac0 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
14ad0 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
14ae0 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
14af0 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
14b00 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
14b10 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
14b20 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
14b30 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
14b40 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
14b50 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
14b60 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
14b70 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a   standard SQL...
14b80 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61  <p> ^BLOB litera
14b90 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
14ba0 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
14bb0 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
14bc0 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
14bd0 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
14be0 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
14bf0 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27  .  ^(Example: X'
14c00 35 33 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a  53514C697465')^.
14c10 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20  .<p>.^A literal 
14c20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62  value can also b
14c30 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c  e the token "NUL
14c40 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  L"..</p>..<tcl>h
14c50 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61  d_fragment varpa
14c60 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61  ram parameter pa
14c70 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20  rameters {bound 
14c80 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e  parameter} {boun
14c90 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74  d parameters}</t
14ca0 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65  cl>.<h3>Paramete
14cb0 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76  rs</h3>.<p>.A "v
14cc0 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72  ariable" or "par
14cd0 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70  ameter" token.sp
14ce0 65 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68  ecifies a placeh
14cf0 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70  older in the exp
14d00 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76  ression for a .v
14d10 61 6c 75 65 20 74 68 61 74 20 69 73 20 66 69 6c  alue that is fil
14d20 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d  led in at runtim
14d30 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  e using the.[sql
14d40 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
14d50 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
14d60 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43  )] family of C/C
14d70 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50  ++ interfaces..P
14d80 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61  arameters can ta
14d90 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73  ke several forms
14da0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
14db0 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
14dc0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
14dd0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
14de0 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c  ><b>?</b><i>NNN<
14df0 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
14e00 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
14e10 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  >^(A question ma
14e20 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  rk followed by a
14e30 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f   number <i>NNN</
14e40 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  i> holds a spot 
14e50 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70  for the.NNN-th p
14e60 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d  arameter.  NNN m
14e70 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 31  ust be between 1
14e80 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58   and [SQLITE_MAX
14e90 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
14ea0 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ].)^.</td>.</tr>
14eb0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14ec0 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14ed0 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74  top"><b>?</b></t
14ee0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
14ef0 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75  ></td>.<td>^A qu
14f00 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74  estion mark that
14f10 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64   is not followed
14f20 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65   by a number cre
14f30 61 74 65 73 20 61 20 70 61 72 61 6d 65 74 65 72  ates a parameter
14f40 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f  .with a number o
14f50 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ne greater than 
14f60 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61  the largest para
14f70 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72  meter number alr
14f80 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e  eady assigned..^
14f90 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
14fa0 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  e parameter numb
14fb0 65 72 20 69 73 20 67 72 65 61 74 65 72 20 74 68  er is greater th
14fc0 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  an.[SQLITE_MAX_V
14fd0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
14fe0 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
14ff0 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20  .This parameter 
15000 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64  format is provid
15010 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
15020 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20  lity with other 
15030 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73  database.engines
15040 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 69  .  But because i
15050 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73  t is easy to mis
15060 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73 74 69  count the questi
15070 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73  on marks, the.us
15080 65 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  e of this parame
15090 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69  ter format is di
150a0 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67  scouraged.  Prog
150b0 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
150c0 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e  uraged.to use on
150d0 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69  e of the symboli
150e0 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20  c formats below 
150f0 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d  or the ?NNN form
15100 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64  at above instead
15110 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ..</td>.</tr>.<t
15120 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
15130 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
15140 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>:</b><i>AAA
15150 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
15160 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
15170 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c  td>^A colon foll
15180 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
15190 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73  ifier name holds
151a0 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b   a spot for a .[
151b0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
151c0 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65  ameter_name|name
151d0 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74  d parameter] wit
151e0 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41  h the name :AAAA
151f0 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61  .  .^(Named para
15200 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20  meters are also 
15210 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75  numbered. The nu
15220 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69 73  mber assigned is
15230 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
15240 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n.the largest pa
15250 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
15260 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
15270 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  )^ ^If this mean
15280 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a  s the parameter.
15290 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65  would be assigne
152a0 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74  d a number great
152b0 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  er than [SQLITE_
152c0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
152d0 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65  BER], it is.an e
152e0 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63  rror. To avoid c
152f0 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20  onfusion, it is 
15300 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69  best to avoid mi
15310 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e  xing named and n
15320 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65  umbered.paramete
15330 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  rs.</td>.</tr>.<
15340 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
15350 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
15360 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41  p"><b>@</b><i>AA
15370 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
15380 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
15390 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67  <td>^An "at" sig
153a0 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  n works exactly 
153b0 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78  like a colon, ex
153c0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e 61  cept that the na
153d0 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65  me of.the parame
153e0 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20 40  ter created is @
153f0 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  AAAA.</td>.</tr>
15400 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
15410 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
15420 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e  top"><b>$</b><i>
15430 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
15440 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
15450 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d  >.<td>^A dollar-
15460 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  sign followed by
15470 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
15480 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61  ame also holds a
15490 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65   spot for a name
154a0 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74 68  d.parameter with
154b0 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e   the name $AAAA.
154c0 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69    ^(The identifi
154d0 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20  er name in this 
154e0 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  case can include
154f0 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63  .one or more occ
15500 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22  urrences of "::"
15510 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e   and a suffix en
15520 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29  closed in "(...)
15530 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79  " containing.any
15540 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20   text at all.)^ 
15550 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73 20   This syntax is 
15560 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61  the form of a va
15570 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74  riable name in t
15580 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74  he.[http://www.t
15590 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c 20 54  cl-lang.org/ | T
155a0 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
155b0 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
155c0 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
155d0 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
155e0 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
155f0 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
15600 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
15610 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
15620 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
15630 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
15640 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
15650 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
15660 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
15670 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
15680 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
15690 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
156a0 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
156b0 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
156c0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c   NULL.  The [sql
156d0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
156e0 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74  ter_index()] int
156f0 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
15700 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20  ed.to translate 
15710 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d  a symbolic param
15720 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69  eter name into i
15730 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75  ts equivalent nu
15740 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e  meric index.</p>
15750 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
15760 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
15770 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
15780 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
15790 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
157a0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
157b0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
157c0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
157d0 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61  connection].D ca
157e0 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78  n reduce its max
157f0 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e  imum parameter n
15800 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20  umber below the 
15810 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78  compile-time max
15820 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b  imum.using the [
15830 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44  sqlite3_limit](D
15840 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  , [SQLITE_LIMIT_
15850 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
15860 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e  ,...) interface.
15870 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )^.</p>..<tcl>hd
15880 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
15890 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
158a0 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c 20 47  .<h3>The LIKE, G
158b0 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61 6e 64  LOB, REGEXP, and
158c0 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 73   MATCH operators
158d0 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49  </h3>.<p>^The LI
158e0 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
158f0 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
15900 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
15910 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20  ^The operand.to 
15920 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
15930 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
15940 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
15950 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74  ern and the left
15960 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f   hand.operand co
15970 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e  ntains the strin
15980 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
15990 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a  st the pattern..
159a0 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e  .<tcl>hd_puts "^
159b0 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
159c0 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20   (\"%\") in the 
159d0 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
159e0 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
159f0 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
15a00 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
15a10 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e  the string.  ^An
15a20 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f   underscore.(\"_
15a30 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
15a40 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
15a50 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
15a60 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
15a70 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72  ng.  ^(Any other
15a80 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
15a90 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73  es itself or its
15aa0 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73   lower/upper cas
15ab0 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e  e.equivalent (i.
15ac0 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  e. case-insensit
15ad0 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e  ive matching).)^
15ae0 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74 20 4e  ..<u>Important N
15af0 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69 74 65  ote:</u> ^SQLite
15b00 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
15b10 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
15b20 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
15b30 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
15b40 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
15b50 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
15b60 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
15b70 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
15b80 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
15b90 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
15ba0 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
15bb0 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
15bc0 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
15bd0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
15be0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
15bf0 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
15c00 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
15c10 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
15c20 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c 3e 0a  s FALSE."</tcl>.
15c30 54 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  The ICU extensio
15c40 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e 63 6c  n to SQLite incl
15c50 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63 65 64  udes an enhanced
15c60 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
15c70 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 74 68  LIKE operator th
15c80 61 74 20 64 6f 65 73 20 63 61 73 65 20 66 6f 6c  at does case fol
15c90 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c 6c 20  ding across all 
15ca0 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
15cb0 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  rs.</p>..<p>^If 
15cc0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
15cd0 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
15ce0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
15cf0 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f  expression.follo
15d00 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45 20  wing the ESCAPE 
15d10 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61  keyword must eva
15d20 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e  luate to a strin
15d30 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a  g consisting of.
15d40 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  a single charact
15d50 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63  er. ^This charac
15d60 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
15d70 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
15d80 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
15d90 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
15da0 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
15db0 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73  racters. ^The es
15dc0 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
15dd0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
15de0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c  cent symbol (%),
15df0 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c   underscore (_),
15e00 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73   or a second.ins
15e10 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63  tance of the esc
15e20 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69 74  ape character it
15e30 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c  self matches a.l
15e40 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73  iteral percent s
15e50 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
15e60 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65  e, or a single e
15e70 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 2c  scape character,
15e80 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a  .respectively...
15e90 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49  <p>^The infix LI
15ea0 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE operator is i
15eb0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
15ec0 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63  lling the.applic
15ed0 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
15ee0 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b  L functions [lik
15ef0 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
15f00 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c  /i>)] or.[like(<
15f10 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15f20 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e  ,<i>Z</i>)]</a>.
15f30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
15f40 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  KE operator can 
15f50 62 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e  be made case sen
15f60 73 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65  sitive using the
15f70 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65  .[case_sensitive
15f80 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _like pragma].</
15f90 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
15fa0 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f  ment glob GLOB</
15fb0 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f  tcl>.<p>^The GLO
15fc0 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69  B operator is si
15fd0 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75  milar to LIKE bu
15fe0 74 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a  t uses the Unix.
15ff0 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79  file globbing sy
16000 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c  ntax for its wil
16010 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20  dcards.  ^Also, 
16020 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e  GLOB is case.sen
16030 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c  sitive, unlike L
16040 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42  IKE.  ^Both GLOB
16050 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65   and LIKE may be
16060 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68 65   preceded by.the
16070 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20   NOT keyword to 
16080 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73 65  invert the sense
16090 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e   of the test.  ^
160a0 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a  The infix GLOB .
160b0 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
160c0 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
160d0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  ng the function.
160e0 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [glob(<i>Y</i>,<
160f0 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61  i>X</i>)] and ca
16100 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79  n be modified by
16110 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74   overriding.that
16120 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   function.</p>..
16130 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
16140 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f   regexp REGEXP</
16150 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47  tcl>.<p>^The REG
16160 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EXP operator is 
16170 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
16180 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28   for the regexp(
16190 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
161a0 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75    ^No regexp() u
161b0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
161c0 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
161d0 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
161e0 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
161f0 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
16200 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
16210 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
16220 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63 61 74  ^If an [applicat
16230 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
16240 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20  function] named 
16250 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64 65  "regexp".is adde
16260 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74  d at run-time, t
16270 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69  hen the "<i>X</i
16280 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69  > REGEXP <i>Y</i
16290 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  >" operator will
162a0 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .be implemented 
162b0 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22 72 65  as a call to "re
162c0 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  gexp(<i>Y</i>,<i
162d0 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c  >X</i>)".</p>..<
162e0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
162f0 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
16300 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
16310 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
16320 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
16330 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
16340 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
16350 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
16360 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
16370 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
16380 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
16390 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
163a0 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
163b0 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
163c0 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
163d0 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
163e0 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
163f0 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
16400 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
16410 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
16420 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
16430 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
16440 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
16450 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
16460 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
16470 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
16480 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
16490 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
164a0 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
164b0 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
164c0 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
164d0 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
164e0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
164f0 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
16500 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
16510 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
16520 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
16530 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
16540 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
16550 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
16560 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
16570 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
16580 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
16590 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
165a0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
165b0 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
165c0 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
165d0 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
165e0 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
165f0 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
16600 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
16610 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
16620 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
16630 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
16640 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
16650 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
16660 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
16670 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
16680 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
16690 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
166a0 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
166b0 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a  ng languages.  .
166c0 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
166d0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
166e0 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
166f0 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77  en the CASE keyw
16700 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73  ord and the.firs
16710 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69  t WHEN keyword i
16720 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61  s called the "ba
16730 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  se" expression. 
16740 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62  ^There are two b
16750 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68  asic forms.of th
16760 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
16770 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20  n: those with a 
16780 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
16790 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75  and those withou
167a0 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  t...<p>^In a CAS
167b0 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65  E without a base
167c0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63   expression, eac
167d0 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  h WHEN expressio
167e0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61  n is evaluated.a
167f0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72  nd the result tr
16800 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65  eated as a boole
16810 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74  an, starting wit
16820 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61  h the leftmost a
16830 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f  nd continuing.to
16840 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65   the right. ^The
16850 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
16860 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
16870 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  s the evaluation
16880 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70   of the THEN.exp
16890 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
168a0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
168b0 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65  first WHEN expre
168c0 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75  ssion that evalu
168d0 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f  ates to.true. ^O
168e0 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
168f0 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e WHEN expressio
16900 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ns evaluate to t
16910 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20  rue, the result 
16920 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
16930 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
16940 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
16950 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
16960 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
16970 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
16980 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
16990 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f  true, then the o
169a0 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
169b0 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55   NULL...<p>^A NU
169c0 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e  LL result is con
169d0 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77  sidered untrue w
169e0 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
169f0 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e  HEN terms...<p>^
16a00 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61  In a CASE with a
16a10 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
16a20 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  , the base expre
16a30 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
16a40 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64  ed just.once and
16a50 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63   the result is c
16a60 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20  ompared against 
16a70 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  the evaluation o
16a80 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70  f each WHEN .exp
16a90 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66  ression from lef
16aa0 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65  t to right. ^The
16ab0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
16ac0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
16ad0 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f  s the .evaluatio
16ae0 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78  n of the THEN ex
16af0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
16b00 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
16b10 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72   first WHEN.expr
16b20 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68  ession for which
16b30 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
16b40 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  is true. ^Or, if
16b50 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
16b60 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N.expressions ev
16b70 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75  aluate to a valu
16b80 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  e equal to the b
16b90 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
16ba0 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76  the result.of ev
16bb0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
16bc0 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
16bd0 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
16be0 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
16bf0 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
16c00 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
16c10 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61  ssions produce a
16c20 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f   result equal to
16c30 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
16c40 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c  sion,.the overal
16c50 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
16c60 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70  ...<p>^When comp
16c70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70  aring a base exp
16c80 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20  ression against 
16c90 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  a WHEN expressio
16ca0 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c  n, the same.coll
16cb0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
16cc0 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55  affinity, and NU
16cd0 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65  LL-handling rule
16ce0 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68  s apply as if th
16cf0 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e.base expressio
16d00 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65  n and WHEN expre
16d10 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63  ssion are respec
16d20 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d  tively the left-
16d30 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
16d40 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c  operands of an <
16d50 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69  big><b>=</b></bi
16d60 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e  g> operator.</p>
16d70 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65   ^If the base .e
16d80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
16d90 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
16da0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73  t of the CASE is
16db0 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75   always the resu
16dc0 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  lt .of evaluatin
16dd0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
16de0 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73  ssion if it exis
16df0 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69  ts, or NULL if i
16e00 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e  t does not...<p>
16e10 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74  ^Both forms of t
16e20 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
16e30 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20  on use lazy, or 
16e40 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a  short-circuit, .
16e50 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e  evaluation...<p>
16e60 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  ^(The only diffe
16e70 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
16e80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
16e90 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
16ea0 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69   is that .the <i
16eb0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
16ec0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65  n is evaluated e
16ed0 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
16ee0 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65  he first example
16ef0 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65   but .might be e
16f00 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c  valuated multipl
16f10 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73  e times in the s
16f20 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65  econd:..<ul><pre
16f30 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
16f40 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
16f50 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
16f60 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
16f70 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
16f80 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
16f90 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
16fa0 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a  D.</pre></ul>)^.
16fb0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
16fc0 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65  nt in_op {IN ope
16fd0 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f  rator} {NOT IN o
16fe0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
16ff0 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  h3>The IN and NO
17000 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f  T IN operators</
17010 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61  h3>.<p>^The IN a
17020 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
17030 6f 72 73 20 74 61 6b 65 20 61 6e 20 65 78 70 72  ors take an expr
17040 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 6c 65  ession on the.le
17050 66 74 20 61 6e 64 20 61 20 6c 69 73 74 20 6f 66  ft and a list of
17060 20 76 61 6c 75 65 73 20 6f 72 20 61 20 73 75 62   values or a sub
17070 71 75 65 72 79 20 6f 6e 20 74 68 65 20 72 69 67  query on the rig
17080 68 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ht..^When the ri
17090 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
170a0 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
170b0 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
170c0 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
170d0 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 74 68  ery must have th
170e0 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e same number of
170f0 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 72   columns as ther
17100 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
17110 0a 74 68 65 20 5b 72 6f 77 20 76 61 6c 75 65 5d  .the [row value]
17120 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65   of the left ope
17130 72 61 6e 64 2e 20 20 5e 54 68 65 20 73 75 62 71  rand.  ^The subq
17140 75 65 72 79 20 6f 6e 20 74 68 65 0a 72 69 67 68  uery on the.righ
17150 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  t of an IN or NO
17160 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 75  T IN operator mu
17170 73 74 20 62 65 20 61 20 73 63 61 6c 61 72 20 73  st be a scalar s
17180 75 62 71 75 65 72 79 20 69 66 20 74 68 65 20 6c  ubquery if the l
17190 65 66 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  eft.expression i
171a0 73 20 6e 6f 74 20 61 20 5b 72 6f 77 20 76 61 6c  s not a [row val
171b0 75 65 5d 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  ue] expression..
171c0 5e 49 66 20 74 68 65 20 72 69 67 68 74 20 6f 70  ^If the right op
171d0 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f  erand of an IN o
171e0 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
171f0 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 76  r is a list of v
17200 61 6c 75 65 73 2c 0a 65 61 63 68 20 6f 66 20 74  alues,.each of t
17210 68 6f 73 65 20 76 61 6c 75 65 73 20 6d 75 73 74  hose values must
17220 20 62 65 20 73 63 61 6c 61 72 73 20 61 6e 64 20   be scalars and 
17230 74 68 65 20 6c 65 66 74 20 65 78 70 72 65 73 73  the left express
17240 69 6f 6e 20 6d 75 73 74 20 61 6c 73 6f 0a 62 65  ion must also.be
17250 20 61 20 73 63 61 6c 61 72 2e 0a 5e 54 68 65 20   a scalar..^The 
17260 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
17270 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
17280 49 4e 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  IN operator can 
17290 62 65 20 61 0a 74 61 62 6c 65 20 3c 69 3e 6e 61  be a.table <i>na
172a0 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74 61 62 6c 65  me</i> or [table
172b0 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
172c0 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 69 6e  ] <i>name</i> in
172d0 20 77 68 69 63 68 20 0a 63 61 73 65 20 74 68 65   which .case the
172e0 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
172f0 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
17300 6f 20 62 65 20 73 75 62 71 75 65 72 79 20 6f 66  o be subquery of
17310 0a 74 68 65 20 66 6f 72 6d 20 22 28 53 45 4c 45  .the form "(SELE
17320 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e 61 6d  CT * FROM <i>nam
17330 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e 20 74  e</i>)"..^When t
17340 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
17350 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74   is an empty set
17360 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
17370 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  IN is false and 
17380 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f  the.result of NO
17390 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65  T IN is true, re
173a0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
173b0 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64  left operand and
173c0 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66   even if the.lef
173d0 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  t operand is NUL
173e0 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65 73 75  L..<p>^(The resu
173f0 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  lt of an IN or N
17400 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
17410 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
17420 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61  the following.ma
17430 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  trix:..<center>.
17440 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
17450 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f  .<tr>.<th>Left o
17460 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55  perand <br>is NU
17470 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
17480 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e  rand <br>contain
17490 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74  s NULL.<th>Right
174a0 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
174b0 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68  an empty set.<th
174c0 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f  >Left operand fo
174d0 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72  und <br>within r
174e0 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68  ight operand.<th
174f0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49  >Result of <br>I
17500 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52  N operator.<th>R
17510 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54  esult of <br>NOT
17520 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72   IN operator.<tr
17530 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
17540 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
17550 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
17560 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17570 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
17580 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
17590 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
175a0 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  se.<td align="ce
175b0 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a  nter">true.<tr>.
175c0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
175d0 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
175e0 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
175f0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
17600 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
17610 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17620 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
17630 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
17640 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17650 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
17660 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
17670 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
17680 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
17690 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
176a0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
176b0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
176c0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
176d0 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c  ter">true.<td al
176e0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
176f0 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  se.<tr>.<td alig
17700 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
17710 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17720 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
17730 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
17740 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
17750 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17760 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69  er">NULL.<td ali
17770 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
17780 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
17790 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
177a0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
177b0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
177c0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
177d0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
177e0 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f  "center">does no
177f0 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69  t matter.<td ali
17800 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
17810 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17820 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65  er">NULL.</table
17830 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  >.</center>)^..<
17840 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c  p>^Note that SQL
17850 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70  ite allows the p
17860 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
17870 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75  t of scalar valu
17880 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d  es on.the right-
17890 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20  hand side of an 
178a0 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
178b0 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65  rator to be an e
178c0 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f  mpty list but.mo
178d0 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  st other SQL dat
178e0 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20 65  abase database e
178f0 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53  ngines and the S
17900 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72 65  QL92 standard re
17910 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74  quire.the list t
17920 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61  o contain at lea
17930 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c  st one element.<
17940 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43  /p>..<h3>Table C
17950 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e  olumn Names</h3>
17960 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e  ..<p>^A column n
17970 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f  ame can be any o
17980 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69  f the names defi
17990 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41  ned in the [CREA
179a0 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
179b0 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68  ent or one of th
179c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63  e following spec
179d0 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a  ial identifiers:
179e0 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c   "<b>ROWID</b>",
179f0 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f  ."<b>OID</b>", o
17a00 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62  r "<b>_ROWID_</b
17a10 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73  >"..^The three s
17a20 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
17a30 72 73 20 64 65 73 63 72 69 62 65 20 74 68 65 0a  rs describe the.
17a40 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b  unique integer k
17a50 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29  ey (the [rowid])
17a60 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
17a70 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65   every .row of e
17a80 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73  very table and s
17a90 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61  o are not availa
17aa0 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20  ble on [WITHOUT 
17ab0 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e  ROWID] tables..^
17ac0 54 68 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  The special iden
17ad0 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66  tifiers only ref
17ae0 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65  er to the row ke
17af0 79 20 69 66 20 74 68 65 20 5b 43 52 45 41 54 45  y if the [CREATE
17b00 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
17b10 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  t does not defin
17b20 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20  e a real column 
17b30 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
17b40 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63  me..^The rowid c
17b50 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77 68  an be used anywh
17b60 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f  ere a regular.co
17b70 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64  lumn can be used
17b80 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
17b90 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45  ragment in_op {E
17ba0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20  XISTS operator} 
17bb0 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72  {NOT EXISTS oper
17bc0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
17bd0 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  The EXISTS opera
17be0 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  tor</h3>..<p>^Th
17bf0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
17c00 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74  r always evaluat
17c10 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  es to one of the
17c20 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
17c30 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78  0 .and 1. ^If ex
17c40 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
17c50 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  CT statement spe
17c60 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69  cified as the ri
17c70 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e  ght-hand .operan
17c80 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  d of the EXISTS 
17c90 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72  operator would r
17ca0 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  eturn one or mor
17cb0 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  e rows, then the
17cc0 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72  .EXISTS operator
17cd0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e   evaluates to 1.
17ce0 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74   ^If executing t
17cf0 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20  he SELECT would 
17d00 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61  return.no rows a
17d10 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20  t all, then the 
17d20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
17d30 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20  evaluates to 0. 
17d40 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
17d50 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65   of columns in e
17d60 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64  ach row returned
17d70 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
17d80 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79  tatement.(if any
17d90 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66  ) and the specif
17da0 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e  ic values return
17db0 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63  ed have no effec
17dc0 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
17dd0 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f  .of the EXISTS o
17de0 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72  perator. ^In par
17df0 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f  ticular, rows co
17e00 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61  ntaining NULL va
17e10 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e  lues are.not han
17e20 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65  dled any differe
17e30 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77  ntly from rows w
17e40 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75  ithout NULL valu
17e50 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  es...<tcl>hd_fra
17e60 67 6d 65 6e 74 20 73 75 62 71 20 7b 53 75 62 71  gment subq {Subq
17e70 75 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ueries}</tcl>.<h
17e80 33 3e 53 75 62 71 75 65 72 79 20 45 78 70 72 65  3>Subquery Expre
17e90 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
17ea0 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ^A [SELECT] stat
17eb0 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69  ement enclosed i
17ec0 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20 69 73  n parentheses is
17ed0 20 61 20 73 75 62 71 75 65 72 79 2e 0a 5e 41 6c   a subquery..^Al
17ee0 6c 20 74 79 70 65 73 20 6f 66 20 53 45 4c 45 43  l types of SELEC
17ef0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63  T statement, inc
17f00 6c 75 64 69 6e 67 0a 61 67 67 72 65 67 61 74 65  luding.aggregate
17f10 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53 45   and compound SE
17f20 4c 45 43 54 20 71 75 65 72 69 65 73 20 28 71 75  LECT queries (qu
17f30 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f  eries with keywo
17f40 72 64 73 20 6c 69 6b 65 0a 55 4e 49 4f 4e 20 6f  rds like.UNION o
17f50 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c  r EXCEPT) are al
17f60 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 20  lowed as scalar 
17f70 73 75 62 71 75 65 72 69 65 73 2e 0a 5e 54 68 65  subqueries..^The
17f80 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71   value of a subq
17f90 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20  uery expression 
17fa0 69 73 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  is the first row
17fb0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 66   of the result.f
17fc0 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65 64  rom the enclosed
17fd0 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
17fe0 65 6e 74 2e 0a 5e 49 6e 20 6f 74 68 65 72 20 77  ent..^In other w
17ff0 6f 72 64 73 2c 20 61 6e 20 69 6d 70 6c 69 65 64  ords, an implied
18000 20 22 4c 49 4d 49 54 20 31 22 20 69 73 20 61 64   "LIMIT 1" is ad
18010 64 65 64 20 74 6f 20 74 68 65 20 73 75 62 71 75  ded to the subqu
18020 65 72 79 2c 20 6f 76 65 72 72 69 64 69 6e 67 0a  ery, overriding.
18030 61 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 63 6f  an explicitly co
18040 64 65 64 20 4c 49 4d 49 54 2e 0a 5e 54 68 65 20  ded LIMIT..^The 
18050 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71 75  value of a subqu
18060 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ery expression i
18070 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 65 6e  s NULL if the en
18080 63 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54 5d 20  closed.[SELECT] 
18090 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e  statement return
180a0 73 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 41  s no rows...<p>A
180b0 20 73 75 62 71 75 65 72 79 20 74 68 61 74 20 72   subquery that r
180c0 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20  eturns a single 
180d0 63 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63 61 6c  column is a scal
180e0 61 72 20 73 75 62 71 75 65 72 79 20 61 6e 64 20  ar subquery and 
180f0 63 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f 73 74  can.be used most
18100 20 61 6e 79 77 68 65 72 65 2e 0a 5e 41 20 73 75   anywhere..^A su
18110 62 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75  bquery that retu
18120 72 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  rns two or more 
18130 63 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b 72 6f  columns is a [ro
18140 77 20 76 61 6c 75 65 5d 0a 73 75 62 71 75 65 72  w value].subquer
18150 79 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 20 62  y and can only b
18160 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6f 70  e used as the op
18170 65 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d 70 61  erand of a compa
18180 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
18190 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
181a0 74 20 63 6f 73 75 62 20 7b 63 6f 72 72 65 6c 61  t cosub {correla
181b0 74 65 64 20 73 75 62 71 75 65 72 69 65 73 7d 3c  ted subqueries}<
181c0 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72 65 6c  /tcl>.<h3>Correl
181d0 61 74 65 64 20 53 75 62 71 75 65 72 69 65 73 3c  ated Subqueries<
181e0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  /h3>..<p>^A [SEL
181f0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  ECT] statement u
18200 73 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20  sed as either a 
18210 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20  scalar subquery 
18220 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74  or as the .right
18230 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66  -hand operand of
18240 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f   an IN, NOT IN o
18250 72 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73  r EXISTS express
18260 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  ion may contain 
18270 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63  .references to c
18280 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75  olumns in the ou
18290 74 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20  ter query. Such 
182a0 61 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e  a subquery is kn
182b0 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61  own as.a correla
182c0 74 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41  ted subquery. ^A
182d0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
182e0 75 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61  uery is reevalua
182f0 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74  ted each time.it
18300 73 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75  s result is requ
18310 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72  ired. ^An uncorr
18320 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
18330 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c  is evaluated onl
18340 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72  y once.and the r
18350 65 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20  esult reused as 
18360 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c  necessary...<tcl
18370 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
18380 74 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72  texpr {CAST expr
18390 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b  ession} {CAST} {
183a0 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72  cast} {CAST oper
183b0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
183c0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73  CAST expressions
183d0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54  </h3>..<p>A CAST
183e0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
183f0 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28 3c 69  he form "CAST(<i
18400 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69 3e  >expr</i> AS <i>
18410 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22 0a  type-name</i>)".
18420 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65  is used to conve
18430 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  rt the value of 
18440 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20 0a  <i>expr</i> to .
18450 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f  a different [sto
18460 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63  rage class] spec
18470 69 66 69 65 64 20 62 79 20 3c 79 79 74 65 72 6d  ified by <yyterm
18480 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  >type-name</yyte
18490 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e  rm>..^A CAST con
184a0 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c  version is simil
184b0 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72  ar to the conver
184c0 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a  sion that takes.
184d0 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f  place when a [co
184e0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69  lumn affinity] i
184f0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76  s applied to a v
18500 61 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74  alue except that
18510 20 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f   with.the CAST o
18520 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76  perator the conv
18530 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61  ersion always ta
18540 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69  kes place even i
18550 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
18560 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76  .lossy and irrev
18570 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73  ersible, whereas
18580 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
18590 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68   only changes th
185a0 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61  e data type.of a
185b0 20 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68   value if the ch
185c0 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73  ange is lossless
185d0 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e   and reversible.
185e0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
185f0 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69  ue of <i>expr</i
18600 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  > is NULL, then 
18610 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
18620 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f  e CAST.expressio
18630 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20  n is also NULL. 
18640 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
18650 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66  storage class of
18660 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64   the result.is d
18670 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70  etermined by app
18680 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73  lying the [rules
18690 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67   for determining
186a0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
186b0 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74 65 72 6d  ] to.the <yyterm
186c0 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  >type-name</yyte
186d0 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  rm>...<table bor
186e0 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74  der=1>.<tr>.  <t
186f0 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20 3c  h> Affinity of <
18700 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
18710 3c 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e  </yyterm>.  <th>
18720 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63   Conversion Proc
18730 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74  essing.<tr>.  <t
18740 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20  d> NONE .  <td> 
18750 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65  ^Casting a value
18760 20 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79   to a <yyterm>ty
18770 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  pe-name</yyterm>
18780 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74   with no affinit
18790 79 20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20  y .  causes the 
187a0 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f  value to.  be co
187b0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42  nverted into a B
187c0 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74  LOB.  ^Casting t
187d0 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74  o a BLOB consist
187e0 73 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69  s of first casti
187f0 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74  ng.  the value t
18800 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65  o TEXT in the [e
18810 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20  ncoding] of the 
18820 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
18830 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65  ion, then.  inte
18840 72 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73  rpreting the res
18850 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75  ulting byte sequ
18860 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69  ence as a BLOB i
18870 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58  nstead of as TEX
18880 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  T...<tr>.  <td> 
18890 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20  TEXT.  <td> ^To 
188a0 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75  cast a BLOB valu
188b0 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73  e to TEXT, the s
188c0 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
188d0 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68   that make up th
188e0 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65  e.  BLOB is inte
188f0 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20  rpreted as text 
18900 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68  encoded using th
18910 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
18920 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43  ing..  <p>.   ^C
18930 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45  asting an INTEGE
18940 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20  R or REAL value 
18950 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72  into TEXT render
18960 73 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69  s the value as i
18970 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69  f via .    [sqli
18980 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20  te3_snprintf()] 
18990 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
189a0 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75  resulting TEXT u
189b0 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e  ses the [encodin
189c0 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61  g] of.    the da
189d0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
189e0 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  n...<tr>.  <td> 
189f0 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65  REAL.  <td> ^Whe
18a00 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42  n casting a BLOB
18a10 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c   value to a REAL
18a20 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66  , the value is f
18a30 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74  irst converted t
18a40 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a  o.        TEXT..
18a50 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20         <p>^When 
18a60 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76  casting a TEXT v
18a70 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68  alue to REAL, th
18a80 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62  e longest possib
18a90 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20  le prefix of.   
18aa0 20 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74       the value t
18ab0 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
18ac0 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
18ad0 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
18ae0 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
18af0 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
18b00 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
18b10 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
18b20 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
18b30 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
18b40 45 58 54 20 76 61 6c 75 65 20 61 72 65 20 69 67  EXT value are ig
18b50 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65  nored when conve
18b60 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rging from TEXT 
18b70 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68  to REAL. ^(If th
18b80 65 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e  ere is.        n
18b90 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61  o prefix that ca
18ba0 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  n be interpreted
18bb0 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65   as a real numbe
18bc0 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  r, the result of
18bd0 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e   the.        con
18be0 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29  version is 0.0.)
18bf0 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49  ^..<tr>.  <td> I
18c00 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57  NTEGER.  <td> ^W
18c10 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
18c20 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45  OB value to INTE
18c30 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69  GER, the value i
18c40 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  s first converte
18c50 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58  d to.        TEX
18c60 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68  T..       <p>^Wh
18c70 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58  en casting a TEX
18c80 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  T value to INTEG
18c90 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  ER, the longest 
18ca0 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
18cb0 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
18cc0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
18cd0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
18ce0 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
18cf0 72 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  r is extracted f
18d00 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20  rom.        the 
18d10 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74  TEXT value and t
18d20 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e  he remainder ign
18d30 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69  ored. ^Any leadi
18d40 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65  ng spaces in the
18d50 0a 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61  .        TEXT va
18d60 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74  lue when convert
18d70 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f  ing from TEXT to
18d80 20 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e   INTEGER are ign
18d90 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a  ored. ^If there.
18da0 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72          is no pr
18db0 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
18dc0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
18dd0 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
18de0 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20  r, the result.  
18df0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
18e00 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e  version is 0.  ^
18e10 28 54 68 65 20 43 41 53 54 20 6f 70 65 72 61 74  (The CAST operat
18e20 6f 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20 64  or understands d
18e30 65 63 69 6d 61 6c 0a 20 20 20 20 20 20 20 20 69  ecimal.        i
18e40 6e 74 65 67 65 72 73 20 6f 6e 6c 79 20 26 6d 64  ntegers only &md
18e50 61 73 68 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ash; conversion 
18e60 6f 66 20 5b 68 65 78 61 64 65 63 69 6d 61 6c 20  of [hexadecimal 
18e70 69 6e 74 65 67 65 72 73 5d 20 73 74 6f 70 73 20  integers] stops 
18e80 0a 20 20 20 20 20 20 20 20 61 74 20 74 68 65 20  .        at the 
18e90 22 78 22 20 69 6e 20 74 68 65 20 22 30 78 22 20  "x" in the "0x" 
18ea0 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 68 65  prefix of the he
18eb0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
18ec0 72 20 73 74 72 69 6e 67 20 0a 20 20 20 20 20 20  r string .      
18ed0 20 20 61 6e 64 20 74 68 75 73 20 72 65 73 75 6c    and thus resul
18ee0 74 20 6f 66 20 74 68 65 20 43 41 53 54 20 69 73  t of the CAST is
18ef0 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a   always zero.)^.
18f00 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73  .      <p>^A cas
18f10 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
18f20 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
18f30 52 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68 65  R results in the
18f40 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20 20 62   integer.      b
18f50 65 74 77 65 65 6e 20 74 68 65 20 52 45 41 4c 20  etween the REAL 
18f60 76 61 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20 74  value and zero t
18f70 68 61 74 20 69 73 20 63 6c 6f 73 65 73 74 20 74  hat is closest t
18f80 6f 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65  o the REAL value
18f90 2e 0a 20 20 20 20 20 20 5e 49 66 20 61 20 52 45  ..      ^If a RE
18fa0 41 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68  AL is greater th
18fb0 61 6e 20 74 68 65 20 67 72 65 61 74 65 73 74 20  an the greatest 
18fc0 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a  possible signed.
18fd0 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2b        integer (+
18fe0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18ff0 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 72 65  807) then the re
19000 73 75 6c 74 20 69 73 20 74 68 65 20 67 72 65 61  sult is the grea
19010 74 65 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20  test possible.  
19020 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67      signed integ
19030 65 72 20 61 6e 64 20 69 66 20 74 68 65 20 52 45  er and if the RE
19040 41 4c 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  AL is less than 
19050 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62  the least possib
19060 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20  le signed.      
19070 69 6e 74 65 67 65 72 20 28 2d 39 32 32 33 33 37  integer (-922337
19080 32 30 33 36 38 35 34 37 37 35 38 30 38 29 20 74  2036854775808) t
19090 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
190a0 73 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73  s the least poss
190b0 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65  ible.      signe
190c0 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20 20  d integer...    
190d0 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53 51    <p>Prior to SQ
190e0 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38  Lite version 3.8
190f0 2e 32 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e  .2 ([dateof:3.8.
19100 32 5d 29 2c 0a 20 20 20 20 20 20 63 61 73 74 69  2]),.      casti
19110 6e 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  ng a REAL value 
19120 67 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20  greater than.   
19130 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35     +922337203685
19140 34 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61  4775807.0 into a
19150 6e 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74  n integer result
19160 65 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e  ed in the most n
19170 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e  egative.      in
19180 74 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30  teger, -92233720
19190 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68  36854775808.  Th
191a0 69 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20  is behavior was 
191b0 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65  meant to emulate
191c0 20 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76   the.      behav
191d0 69 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68  ior of x86/x64 h
191e0 61 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69  ardware when doi
191f0 6e 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ng the equivalen
19200 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20  t cast...<tr>.  
19210 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c  <td> NUMERIC.  <
19220 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54  td> ^Casting a T
19230 45 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75  EXT or BLOB valu
19240 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66  e into NUMERIC f
19250 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63  irst does a forc
19260 65 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e  ed.   conversion
19270 20 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74   into REAL but t
19280 68 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76  hen further conv
19290 65 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  erts the result 
192a0 69 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a  into INTEGER if.
192b0 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74     and only if t
192c0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72  he conversion fr
192d0 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47  om REAL to INTEG
192e0 45 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61  ER is lossless a
192f0 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20  nd reversible.. 
19300 20 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e    This is the on
19310 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51  ly context in SQ
19320 4c 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e  Lite where the N
19330 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47  UMERIC and INTEG
19340 45 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a  ER [affinities].
19350 20 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72     behave differ
19360 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43  ently..   <p> ^C
19370 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72  asting a REAL or
19380 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74   INTEGER value t
19390 6f 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e  o NUMERIC is a n
193a0 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20  o-op, even if a 
193b0 72 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f  real.   value co
193c0 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  uld be losslessl
193d0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
193e0 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72  n integer...</tr
193f0 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e  >..</table>..<p>
19400 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72  ^Note that the r
19410 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
19420 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20  ng any non-BLOB 
19430 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c  value into a .BL
19440 4f 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  OB and the resul
19450 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
19460 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  ny BLOB value in
19470 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61  to a non-BLOB va
19480 6c 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65  lue.may be diffe
19490 72 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f  rent depending o
194a0 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61  n whether the da
194b0 74 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67  tabase [encoding
194c0 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d  ] is UTF-8,.UTF-
194d0 31 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c  16be, or UTF-16l
194e0 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  e....<tcl>hd_fra
194f0 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70  gment booleanexp
19500 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  r {boolean expre
19510 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ssion}</tcl>.<h3
19520 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73  >Boolean Express
19530 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ions</h3>..<p>Th
19540 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  e SQL language f
19550 65 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20  eatures several 
19560 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61  contexts where a
19570 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
19580 0a 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74  .evaluated and t
19590 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72  he result conver
195a0 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  ted to a boolean
195b0 20 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29   (true or false)
195c0 20 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f   value. These.co
195d0 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c  ntexts are:..  <
195e0 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  ul>.    <li> the
195f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
19600 20 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54   a SELECT, UPDAT
19610 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74  E or DELETE stat
19620 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
19630 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  the ON or USING 
19640 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
19650 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
19660 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
19670 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   the HAVING clau
19680 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
19690 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
196a0 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
196b0 73 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69  se of an SQL tri
196c0 67 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c  gger, and.    <l
196d0 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
196e0 73 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66  se or clauses of
196f0 20 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65   some CASE expre
19700 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a  ssions..  </ul>.
19710 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74  .<p>^(To convert
19720 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
19730 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f  an SQL expressio
19740 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  n to a boolean v
19750 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72  alue, SQLite.fir
19760 73 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73  st casts the res
19770 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ult to a NUMERIC
19780 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
19790 6d 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41  me way as a .[CA
197a0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  ST expression]. 
197b0 41 20 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76  A numeric zero v
197c0 61 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61  alue (integer va
197d0 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76  lue 0 or real .v
197e0 61 6c 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e  alue 0.0) is con
197f0 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 66 61  sidered to be fa
19800 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c  lse.  A NULL val
19810 75 65 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c  ue is still NULL
19820 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  ..All other valu
19830 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
19840 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
19850 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
19860 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
19870 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
19880 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
19890 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
198a0 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
198b0 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
198c0 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
198d0 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
198e0 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
198f0 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
19900 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20  </h3>.<p>SQLite 
19910 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63  supports many [c
19920 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
19930 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
19940 72 65 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e 63  regate].SQL func
19950 74 69 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73  tions.  For pres
19960 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65  entation purpose
19970 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  s, simple functi
19980 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 0a  ons are further.
19990 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20  subdivided into 
199a0 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65  [corefunc | core
199b0 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20   functions] and 
199c0 5b 64 61 74 65 66 75 6e 63 7c 64 61 74 65 2d 74  [datefunc|date-t
199d0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a  ime functions]..
199e0 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e  Applications can
199f0 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f   add new functio
19a00 6e 73 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ns, written in C
19a10 2f 43 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a  /C++, using the.
19a20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
19a30 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
19a40 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rface..</p>..<p>
19a50 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20  ^It is possible 
19a60 74 6f 20 68 61 76 65 20 61 6e 20 61 67 67 72 65  to have an aggre
19a70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
19a80 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
19a90 20 61 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e   as a.simple fun
19aa0 63 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61  ction, as long a
19ab0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
19ac0 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68  arguments for th
19ad0 65 20 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74  e two forms of t
19ae0 68 65 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20  he.function are 
19af0 64 69 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72  different.  ^For
19b00 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61   example, the [a
19b10 67 67 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75  gg_max|max()] fu
19b20 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69  nction with a.si
19b30 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73  ngle argument is
19b40 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e   an aggregate an
19b50 64 20 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75  d the [max()] fu
19b60 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20  nction with two 
19b70 6f 72 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74  or more.argument
19b80 73 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  s is a simple fu
19b90 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23  nction...<tcl>.#
19ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19be0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
19bf0 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63  ction {Core Func
19c00 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20  tions} corefunc 
19c10 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 75 6e 73 65  {*corefunc}.unse
19c20 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f  t -nocomplain co
19c30 72 65 66 75 6e 63 73 65 74 0a 70 72 6f 63 20 66  refuncset.proc f
19c40 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
19c50 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
19c60 20 20 67 6c 6f 62 61 6c 20 63 6f 72 65 66 75 6e    global corefun
19c70 63 73 65 74 0a 20 20 72 65 67 65 78 70 20 7b 5e  cset.  regexp {^
19c80 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
19c90 20 62 61 73 65 73 79 6e 74 61 78 0a 20 20 73 65   basesyntax.  se
19ca0 74 20 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62  t corefuncset($b
19cb0 61 73 65 73 79 6e 74 61 78 29 20 5b 6c 69 73 74  asesyntax) [list
19cc0 20 24 73 79 6e 74 61 78 20 24 6b 65 79 77 6f 72   $syntax $keywor
19cd0 64 73 20 24 64 65 73 63 5d 0a 7d 0a 66 75 6e 63  ds $desc].}.func
19ce0 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20  def {abs(X)} {} 
19cf0 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20  {.  ^The abs(X) 
19d00 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19d10 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
19d20 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72  lue of the numer
19d30 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e  ic.  argument X.
19d40 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e    ^Abs(X) return
19d50 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e  s NULL if X is N
19d60 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29  ULL. .  ^(Abs(X)
19d70 20 72 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20   returns 0.0 if 
19d80 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  X is a string or
19d90 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e   blob.  that can
19da0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
19db0 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61   to a numeric va
19dc0 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73  lue.)^  ^If X is
19dd0 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20   the .  integer 
19de0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
19df0 35 38 30 38 20 74 68 65 6e 20 61 62 73 28 58 29  5808 then abs(X)
19e00 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
19e10 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72  er overflow.  er
19e20 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20  ror since there 
19e30 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74  is no equivalent
19e40 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74   positive 64-bit
19e50 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20   two complement 
19e60 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  value..}..funcde
19e70 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  f {changes()} {}
19e80 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65   {.  ^The change
19e90 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  s() function ret
19ea0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
19eb0 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  of database rows
19ec0 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67   that were chang
19ed0 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64  ed.  or inserted
19ee0 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
19ef0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
19f00 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52   completed INSER
19f10 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20  T, DELETE,.  or 
19f20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
19f30 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73  , exclusive of s
19f40 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77  tatements in low
19f50 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72  er-level trigger
19f60 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65  s..  ^The change
19f70 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
19f80 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19f90 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
19fa0 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
19fb0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
19fc0 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
19fd0 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
19fe0 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
19ff0 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
1a000 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c  {char(X1,X2,...,
1a010 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68  XN)} {} {.  ^(Th
1a020 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e  e char(X1,X2,...
1a030 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ,XN) function re
1a040 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63  turns a string c
1a050 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61  omposed of chara
1a060 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68 65  cters having the
1a070 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65  .   unicode code
1a080 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66   point values of
1a090 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68 72   integers X1 thr
1a0a0 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74  ough XN, respect
1a0b0 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ively.)^.}..func
1a0c0 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c  def {coalesce(X,
1a0d0 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  Y,...)} {} {.  ^
1a0e0 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66  The coalesce() f
1a0f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a100 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
1a110 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
1a120 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
1a130 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74   if all argument
1a140 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f  s are NULL.  ^Co
1a150 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68 61  alesce() must ha
1a160 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32  ve at least .  2
1a170 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
1a180 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59  uncdef {glob(X,Y
1a190 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67  )} {} {.  ^The g
1a1a0 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
1a1b0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
1a1c0 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73  to the.  express
1a1d0 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58  ion "<b>Y GLOB X
1a1e0 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68  </b>"..  Note th
1a1f0 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61  at the X and Y a
1a200 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76  rguments are rev
1a210 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f  ersed in the glo
1a220 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  b() function.  r
1a230 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
1a240 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72  nfix [GLOB] oper
1a250 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20  ator..  ^If the 
1a260 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
1a270 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
1a280 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f  rface is used to
1a290 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  .  override the 
1a2a0 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
1a2b0 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72  on with an alter
1a2c0 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
1a2d0 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65  ation then.  the
1a2e0 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
1a2f0 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65   will invoke the
1a300 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70   alternative imp
1a310 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a  lementation..}..
1a320 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28  funcdef {ifnull(
1a330 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1a340 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
1a350 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
1a360 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
1a370 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
1a380 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
1a390 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61  both arguments a
1a3a0 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c  re NULL.  ^Ifnul
1a3b0 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78  l() must have ex
1a3c0 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74  actly 2 argument
1a3d0 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c  s..  ^The ifnull
1a3e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  () function is e
1a3f0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f  quivalent to [co
1a400 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74  alesce()] with t
1a410 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a  wo arguments..}.
1a420 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28  .funcdef {instr(
1a430 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1a440 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e  e instr(X,Y) fun
1a450 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20  ction finds the 
1a460 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
1a470 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74   of string Y wit
1a480 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20  hin .  string X 
1a490 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
1a4a0 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20  number of prior 
1a4b0 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20  characters plus 
1a4c0 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69  1, or 0 if.  Y i
1a4d0 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20  s nowhere found 
1a4e0 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c  within X..  ^Or,
1a4f0 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20   if X and Y are 
1a500 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e  both BLOBs, then
1a510 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75   instr(X,Y) retu
1a520 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74  rns one.  more t
1a530 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62  han the number b
1a540 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68  ytes prior to th
1a550 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
1a560 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66  ce of Y, or 0 if
1a570 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63  .  Y does not oc
1a580 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74  cur anywhere wit
1a590 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74  hin X..  ^If bot
1a5a0 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e  h arguments X an
1a5b0 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59  d Y to instr(X,Y
1a5c0 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ) are non-NULL a
1a5d0 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73  nd are not BLOBs
1a5e0 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65  .  then both are
1a5f0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
1a600 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65  strings..  ^If e
1a610 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65  ither X or Y are
1a620 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58   NULL in instr(X
1a630 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ,Y) then the res
1a640 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a  ult is NULL..}..
1a650 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d  funcdef {hex(X)}
1a660 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
1a670 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
1a680 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
1a690 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
1a6a0 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
1a6b0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
1a6c0 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
1a6d0 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
1a6e0 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
1a6f0 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
1a700 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
1a710 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
1a720 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1a730 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1a740 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1a750 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
1a760 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
1a770 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
1a780 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
1a790 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
1a7a0 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
1a7b0 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
1a7c0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
1a7d0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
1a7e0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
1a7f0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
1a800 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1a810 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
1a820 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
1a830 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
1a840 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
1a850 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
1a860 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
1a870 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a880 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1a890 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
1a8a0 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
1a8b0 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
1a8c0 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
1a8d0 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
1a8e0 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
1a8f0 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
1a900 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
1a910 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
1a920 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
1a930 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
1a940 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1a950 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
1a960 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
1a970 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
1a980 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
1a990 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1a9a0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
1a9b0 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
1a9c0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
1a9d0 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
1a9e0 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
1a9f0 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
1aa00 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
1aa10 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
1aa20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
1aa30 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1aa40 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
1aa50 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
1aa60 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
1aa70 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
1aa80 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
1aa90 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
1aaa0 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
1aab0 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
1aac0 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
1aad0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
1aae0 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
1aaf0 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
1ab00 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
1ab10 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
1ab20 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
1ab30 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
1ab40 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
1ab50 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
1ab60 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
1ab70 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
1ab80 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
1ab90 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
1aba0 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
1abb0 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
1abc0 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
1abd0 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
1abe0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1abf0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
1ac00 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
1ac10 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
1ac20 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
1ac30 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
1ac40 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
1ac50 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
1ac60 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
1ac70 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
1ac80 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
1ac90 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
1aca0 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
1acb0 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
1acc0 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
1acd0 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
1ace0 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
1acf0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
1ad00 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
1ad10 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
1ad20 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
1ad30 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
1ad40 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1ad50 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
1ad60 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
1ad70 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a   specified..}...
1ad80 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68  funcdef {likelih
1ad90 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ood(X,Y)} {} {. 
1ada0 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
1adb0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1adc0 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20  eturns argument 
1add0 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1ade0 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20  (The value Y in 
1adf0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1ae00 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1ae10 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e  ng point constan
1ae20 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20  t.  between 0.0 
1ae30 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69  and 1.0, inclusi
1ae40 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b  ve.)^.  ^The lik
1ae50 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74  elihood(X) funct
1ae60 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1ae70 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1ae80 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1ae90 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1aea0 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1aeb0 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67  PU cycles during
1aec0 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61   run-time.  (tha
1aed0 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1aee0 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1aef0 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1af00 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
1af10 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
1af20 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1af30 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1af40 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1af50 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1af60 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1af70 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74  lean that is.  t
1af80 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61  rue with a proba
1af90 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78  bility of approx
1afa0 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54  imately Y..  ^(T
1afb0 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  he [unlikely(X)]
1afc0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1afd0 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1afe0 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29  lihood(X,0.0625)
1aff0 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b  .)^.  ^(The [lik
1b000 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
1b010 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
1b020 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
1b030 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.9375).)^.}..fu
1b040 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29  ncdef {likely(X)
1b050 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
1b060 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1b070 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1b080 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65  ument X unchange
1b090 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79  d..  ^The likely
1b0a0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1b0b0 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1b0c0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1b0d0 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1b0e0 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1b0f0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1b100 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1b110 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1b120 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1b130 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1b140 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1b150 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  the likely(X) fu
1b160 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1b170 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1b180 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1b190 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1b1a0 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1b1b0 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74  ean value.  that
1b1c0 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
1b1d0 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58  . ^(The likely(X
1b1e0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
1b1f0 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c  uivalent.  to [l
1b200 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39  ikelihood](X,0.9
1b210 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f  375).)^ See also
1b220 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e  : [unlikely(X)].
1b230 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61  .}..funcdef {loa
1b240 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c  d_extension(X) l
1b250 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1b260 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1b270 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
1b280 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61  ,Y) function loa
1b290 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e  ds [SQLite exten
1b2a0 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68  sions] out of th
1b2b0 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61  e shared.  libra
1b2c0 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20  ry file named X 
1b2d0 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20  using the entry 
1b2e0 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72  point Y.  ^The r
1b2f0 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78  esult of load_ex
1b300 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61  tension().  is a
1b310 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e  lways a NULL.  ^
1b320 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20  If Y is omitted 
1b330 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
1b340 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d   entry point nam
1b350 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68  e is used..  ^Th
1b360 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1b370 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  () function rais
1b380 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es an exception 
1b390 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1b3a0 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64   fails to.  load
1b3b0 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
1b3c0 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
1b3d0 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1b3e0 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  ion() function w
1b3f0 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
1b400 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
1b410 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20  ts to .  modify 
1b420 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c  or delete an SQL
1b430 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c   function or col
1b440 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
1b450 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69    ^The.  extensi
1b460 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66  on can add new f
1b470 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1b480 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1b490 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f   but cannot.  mo
1b4a0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65  dify or delete e
1b4b0 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
1b4c0 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1b4d0 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65  equences because
1b4e0 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f  .  those functio
1b4f0 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74  ns and/or collat
1b500 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69  ing sequences mi
1b510 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65  ght be used else
1b520 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63  where.  in the c
1b530 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
1b540 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
1b550 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65   To load an exte
1b560 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61  nsion that.  cha
1b570 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  nges or deletes 
1b580 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1b590 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1b5a0 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c  , use the.  [sql
1b5b0 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
1b5c0 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ion()] C-languag
1b5d0 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e API.</p>..  <p
1b5e0 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65  >For security re
1b5f0 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e  asons, extension
1b600 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65   loaded is turne
1b610 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74  d off by default
1b620 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65   and must.  be e
1b630 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f  nabled by a prio
1b640 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74  r call to [sqlit
1b650 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
1b660 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e  xtension()].</p>
1b670 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
1b680 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1b690 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
1b6a0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1b6b0 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
1b6c0 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
1b6d0 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
1b6e0 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
1b6f0 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
1b700 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
1b710 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
1b720 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
1b730 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
1b740 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
1b750 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
1b760 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
1b770 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
1b780 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
1b790 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
1b7a0 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
1b7b0 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
1b7c0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1b7d0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1b7e0 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1b7f0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1b800 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1b810 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1b820 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
1b830 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1b840 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1b850 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
1b860 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1b870 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
1b880 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1b890 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
1b8a0 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
1b8b0 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
1b8c0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1b8d0 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1b8e0 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1b8f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1b900 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
1b910 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
1b920 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
1b930 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
1b940 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
1b950 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1b960 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
1b970 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1b980 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1b990 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1b9a0 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1b9b0 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1b9c0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1b9d0 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1b9e0 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1b9f0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1ba00 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1ba10 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1ba20 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
1ba30 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1ba40 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1ba50 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1ba60 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1ba70 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1ba80 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
1ba90 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1baa0 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1bab0 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1bac0 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1bad0 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
1bae0 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
1baf0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1bb00 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
1bb10 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1bb20 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1bb30 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d  f {min(X,Y,...)}
1bb40 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a   {*minCoreFunc *
1bb50 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66  min {min() SQL f
1bb60 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1bb70 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1bb80 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
1bb90 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1bba0 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20  ument with the. 
1bbb0 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a   minimum value..
1bbc0 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1bbd0 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
1bbe0 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
1bbf0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1bc00 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
1bc10 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
1bc20 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
1bc30 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1bc40 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1bc50 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
1bc60 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
1bc70 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
1bc80 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
1bc90 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
1bca0 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61  min().  define a
1bcb0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1bcc0 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
1bcd0 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
1bce0 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
1bcf0 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c  .  ^(Note that <
1bd00 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
1bd10 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1bd20 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
1bd30 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
1bd40 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
1bd50 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67  as an .  [minAgg
1bd60 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1bd70 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1bd80 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
1bd90 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1bda0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
1bdb0 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
1bdc0 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
1bdd0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bde0 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1bdf0 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
1be00 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
1be10 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
1be20 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1be30 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
1be40 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1be50 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
1be60 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
1be70 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
1be80 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
1be90 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1bea0 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
1beb0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
1bec0 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
1bed0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1bee0 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
1bef0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
1bf00 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
1bf10 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
1bf20 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1bf30 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
1bf40 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
1bf50 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72  ..}..funcdef {pr
1bf60 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1bf70 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70  } {} {.  ^(The p
1bf80 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e  rintf(FORMAT,...
1bf90 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  ) SQL function w
1bfa0 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73  orks like the [s
1bfb0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
1bfc0 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66  ] C-language.  f
1bfd0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20  unction and the 
1bfe0 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
1bff0 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  n from the stand
1c000 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e  ard C library.)^
1c010 0a 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67  .  The first arg
1c020 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61  ument is a forma
1c030 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70  t string that sp
1c040 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63  ecifies how to c
1c050 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74  onstruct the out
1c060 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69  put.  string usi
1c070 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20  ng values taken 
1c080 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20  from subsequent 
1c090 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20  arguments.  ^If 
1c0a0 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d  the FORMAT argum
1c0b0 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67  ent is.  missing
1c0c0 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   or NULL then th
1c0d0 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
1c0e0 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61  .  ^The %n forma
1c0f0 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67  t is silently ig
1c100 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73  nored and.  does
1c110 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20   not consume an 
1c120 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20  argument.  ^The 
1c130 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20  %p format is an 
1c140 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e  alias for %X.  ^
1c150 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20  The %z format.  
1c160 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  is interchangeab
1c170 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49  le with %s.  ^(I
1c180 66 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20  f there are too 
1c190 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e  few arguments in
1c1a0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69   the argument li
1c1b0 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72  st,.  missing ar
1c1c0 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75  guments are assu
1c1d0 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55  med to have a NU
1c1e0 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  LL value, which 
1c1f0 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e  is translated in
1c200 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f  to.  0 or 0.0 fo
1c210 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74  r numeric format
1c220 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74  s or an empty st
1c230 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d  ring for %s.)^.}
1c240 0a 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75  .  ..funcdef {qu
1c250 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ote(X)} {} {.  ^
1c260 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e  The quote(X) fun
1c270 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1c280 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c  e text of an SQL
1c290 20 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20   literal which. 
1c2a0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
1c2b0 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75   its argument su
1c2c0 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75  itable for inclu
1c2d0 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c  sion into an SQL
1c2e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53   statement..  ^S
1c2f0 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f  trings are surro
1c300 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d  unded by single-
1c310 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61  quotes with esca
1c320 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20  pes on interior 
1c330 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64  quotes.  as need
1c340 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20  ed.  ^BLOBs are 
1c350 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
1c360 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
1c370 0a 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68  .  ^Strings with
1c380 20 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68   embedded NUL ch
1c390 61 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20  aracters cannot 
1c3a0 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61  be represented a
1c3b0 73 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72  s string.  liter
1c3c0 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68  als in SQL and h
1c3d0 65 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e 65  ence the returne
1c3e0 64 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  d string literal
1c3f0 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 70 72   is truncated pr
1c400 69 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72  ior.  to the fir
1c410 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64  st NUL..}..funcd
1c420 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d  ef {random()} {}
1c430 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
1c440 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1c450 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  rns a pseudo-ran
1c460 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65  dom integer.  be
1c470 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33  tween -922337203
1c480 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b  6854775808 and +
1c490 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1c4a0 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  807..}..funcdef 
1c4b0 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20  {randomblob(N)} 
1c4c0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
1c4d0 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  omblob(N) functi
1c4e0 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62  on return an N-b
1c4f0 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e  yte blob contain
1c500 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  ing pseudo-rando
1c510 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e  m.  bytes. ^If N
1c520 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20   is less than 1 
1c530 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61  then a 1-byte ra
1c540 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74  ndom blob is ret
1c550 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e  urned...  <p>Hin
1c560 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  t:  applications
1c570 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c   can generate gl
1c580 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64  obally unique id
1c590 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e  entifiers.  usin
1c5a0 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  g this function 
1c5b0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68  together with [h
1c5c0 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b  ex()] and/or.  [
1c5d0 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68  lower()] like th
1c5e0 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63  is:</p>..  <bloc
1c5f0 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61  kquote>.  hex(ra
1c600 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72  ndomblob(16))<br
1c610 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68  ></br>.  lower(h
1c620 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
1c630 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f  ))).  </blockquo
1c640 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  te>.}..funcdef {
1c650 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20  replace(X,Y,Z)} 
1c660 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c  {} {.  ^The repl
1c670 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  ace(X,Y,Z) funct
1c680 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1c690 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73  ring formed by s
1c6a0 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74  ubstituting.  st
1c6b0 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79  ring Z for every
1c6c0 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73   occurrence of s
1c6d0 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e  tring Y in strin
1c6e0 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41  g X.  ^The [BINA
1c6f0 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  RY].  collating 
1c700 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
1c710 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73   for comparisons
1c720 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65  .  ^If Y is an e
1c730 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68  mpty.  string th
1c740 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68  en return X unch
1c750 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73  anged.  ^If Z is
1c760 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20   not initially. 
1c770 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73   a string, it is
1c780 20 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38   cast to a UTF-8
1c790 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f   string prior to
1c7a0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a   processing..}..
1c7b0 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58  funcdef {round(X
1c7c0 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d  ) round(X,Y)} {}
1c7d0 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28   {.  ^The round(
1c7e0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1c7f0 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
1c800 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58  -point.  value X
1c810 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69   rounded to Y di
1c820 67 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68  gits to the righ
1c830 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  t of the decimal
1c840 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68   point..  ^If th
1c850 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1c860 6f 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20 61  omitted, it is a
1c870 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a  ssumed to be 0..
1c880 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
1c890 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
1c8a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
1c8b0 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
1c8c0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1c8d0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
1c8e0 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
1c8f0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
1c900 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
1c910 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
1c920 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
1c930 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
1c940 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
1c950 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
1c960 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
1c970 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
1c980 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
1c990 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
1c9a0 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
1c9b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c9c0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
1c9d0 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
1c9e0 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
1c9f0 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
1ca00 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
1ca10 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
1ca20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
1ca30 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
1ca40 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
1ca50 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
1ca60 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
1ca70 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
1ca80 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
1ca90 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
1caa0 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
1cab0 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
1cac0 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
1cad0 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
1cae0 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
1caf0 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
1cb00 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
1cb10 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29  ileoption_get(N)
1cb20 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1cb30 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1cb40 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e  on_get() SQL fun
1cb50 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1cb60 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1cb70 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
1cb80 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f  option_get()] C/
1cb90 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  C++ function..  
1cba0 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  ^This routine re
1cbb0 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63  turns the N-th c
1cbc0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1cbd0 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  on used to build
1cbe0 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c   SQLite.  or NUL
1cbf0 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66  L if N is out of
1cc00 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73   range.  See als
1cc10 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  o the [compile_o
1cc20 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
1cc30 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1cc40 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1cc50 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20  _used(X)} {} {. 
1cc60 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
1cc70 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1cc80 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1cc90 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1cca0 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
1ccb0 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1ccc0 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75  used()] C/C++ fu
1ccd0 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20  nction..  ^When 
1cce0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74  the argument X t
1ccf0 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  o sqlite_compile
1cd00 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69  option_used(X) i
1cd10 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
1cd20 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  .  is the name o
1cd30 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
1cd40 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f   option, this ro
1cd50 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72  utine returns tr
1cd60 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73  ue (1) or.  fals
1cd70 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20  e (0) depending 
1cd80 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
1cd90 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61  t that option wa
1cda0 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68  s used during th
1cdb0 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75  e.  build..}..fu
1cdc0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
1cdd0 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
1cde0 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
1cdf0 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
1ce00 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1ce10 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
1ce20 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
1ce30 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
1ce40 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
1ce50 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
1ce60 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
1ce70 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
1ce80 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
1ce90 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
1cea0 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65 20  e_id() is.  the 
1ceb0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
1cec0 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
1ced0 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
1cee0 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20  n followed by.  
1cef0 74 68 65 20 53 48 41 31 20 68 61 73 68 20 66 6f  the SHA1 hash fo
1cf00 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e  r that check-in.
1cf10 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
1cf20 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
1cf30 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1cf40 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
1cf50 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
1cf60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1cf70 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
1cf80 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1cf90 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
1cfa0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1cfb0 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
1cfc0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
1cfd0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
1cfe0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
1cff0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
1d000 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
1d010 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1d020 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
1d030 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
1d040 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
1d050 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
1d060 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1d070 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
1d080 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1d090 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
1d0a0 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
1d0b0 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
1d0c0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
1d0d0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
1d0e0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
1d0f0 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
1d100 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
1d110 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1d120 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
1d130 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
1d140 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1d150 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1d160 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
1d170 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
1d180 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
1d190 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
1d1a0 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
1d1b0 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
1d1c0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
1d1d0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
1d1e0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
1d1f0 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
1d200 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
1d210 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
1d220 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
1d230 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
1d240 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
1d250 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
1d260 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
1d270 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
1d280 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
1d290 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1d2a0 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
1d2b0 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
1d2c0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
1d2d0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
1d2e0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
1d2f0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
1d300 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
1d310 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
1d320 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1d330 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1d340 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
1d350 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
1d360 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1d370 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
1d380 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
1d390 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1d3a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
1d3b0 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
1d3c0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1d3d0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1d3e0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
1d3f0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
1d400 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1d410 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
1d420 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
1d430 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
1d440 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1d450 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1d460 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1d470 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1d480 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1d490 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
1d4a0 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
1d4b0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1d4c0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1d4d0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1d4e0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
1d4f0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
1d500 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
1d510 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
1d520 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
1d530 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1d540 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
1d550 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
1d560 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
1d570 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
1d580 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
1d590 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
1d5a0 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
1d5b0 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
1d5c0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
1d5d0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1d5e0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1d5f0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1d600 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
1d610 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1d620 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1d630 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1d640 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1d650 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1d660 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1d670 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
1d680 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
1d690 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
1d6a0 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
1d6b0 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
1d6c0 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
1d6d0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1d6e0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1d6f0 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1d700 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1d710 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1d720 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
1d730 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
1d740 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
1d750 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1d760 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1d770 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1d780 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
1d790 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
1d7a0 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
1d7b0 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
1d7c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d7d0 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
1d7e0 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
1d7f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1d800 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
1d810 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1d820 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1d830 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1d840 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1d850 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1d860 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1d870 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1d880 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1d890 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1d8a0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1d8b0 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1d8c0 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1d8d0 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1d8e0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1d8f0 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1d900 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1d910 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1d920 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1d930 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1d940 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1d950 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1d960 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1d970 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1d980 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1d990 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1d9a0 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1d9b0 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1d9c0 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1d9d0 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1d9e0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1d9f0 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1da00 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1da10 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1da20 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1da30 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1da40 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1da50 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1da60 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1da70 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1da80 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1da90 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1daa0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1dab0 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  ..}.</tcl>..<p>T
1dac0 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e  he core function
1dad0 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1dae0 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1daf0 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75  efault. .[datefu
1db00 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20  nc | Date &amp; 
1db10 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  Time functions],
1db20 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
1db30 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
1db40 2c 20 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a  , and.[json1 | J
1db50 53 4f 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  SON functions] a
1db60 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65  re documented se
1db70 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70  parately.  An.ap
1db80 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65  plication may de
1db90 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  fine additional.
1dba0 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
1dbb0 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64  n in C and added
1dbc0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1dbd0 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68   engine using.th
1dbe0 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
1dbf0 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50  e_function()] AP
1dc00 49 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65  I.</p>..<tcl>.se
1dc10 74 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20  t lx {}.foreach 
1dc20 62 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61  basesyntax [arra
1dc30 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63  y names corefunc
1dc40 73 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  set] {.  foreach
1dc50 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
1dc60 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e  s desc} $corefun
1dc70 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
1dc80 29 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70  ) break.  regexp
1dc90 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73   {^[a-z_]+} $bas
1dca0 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74  esyntax fragment
1dcb0 0a 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73  .  foreach cores
1dcc0 79 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a  yntax $syntax {.
1dcd0 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b      lappend lx [
1dce0 6c 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24  list $fragment $
1dcf0 63 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20  coresyntax 0].  
1dd00 7d 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c  }.}.hd_list_of_l
1dd10 69 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f  inks {} 225 [lso
1dd20 72 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d  rt -index 1 $lx]
1dd30 0a 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72  ..hd_putsnl "<hr
1dd40 20 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68   class='xhr'>".h
1dd50 64 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a  d_putsnl "<dl>".
1dd60 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74  foreach basesynt
1dd70 61 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79  ax [lsort [array
1dd80 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73   names corefuncs
1dd90 65 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  et]] {.  foreach
1dda0 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
1ddb0 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e  s desc} $corefun
1ddc0 63 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78  cset($basesyntax
1ddd0 29 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62  ) break.  regsub
1dde0 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72   -all {\s+} [str
1ddf0 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78  ing trim $syntax
1de00 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61  ] {<br />} synta
1de10 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
1de20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24  {\(([^*)]+)\)} $
1de30 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f  syntax {(<i>\1</
1de40 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  i>)} syntax.  re
1de50 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73  gsub -all {,} $s
1de60 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d  yntax {</i>,<i>}
1de70 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
1de80 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e   -all {<i>\.\.\.
1de90 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e  </i>} $syntax {.
1dea0 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  ..} syntax.  reg
1deb0 65 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62  exp {^[a-z]+} $b
1dec0 61 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65  asesyntax fragme
1ded0 6e 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  nt.  if {[llengt
1dee0 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
1def0 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
1df00 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
1df10 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
1df20 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d  ment $name *$nam
1df30 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c  e "${name}() SQL
1df40 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65   function".  } e
1df50 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72  lse {.    set fr
1df60 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  agname [lindex $
1df70 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20  keywords 0].    
1df80 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61  regsub -all {[^a
1df90 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b  -z]} $fragname {
1dfa0 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68  } fragname.    h
1dfb0 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67  d_fragment $frag
1dfc0 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64  name.    eval hd
1dfd0 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e  _keywords [strin
1dfe0 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24  g map {\n { }} $
1dff0 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20  keywords].  }.  
1e000 68 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e  hd_puts "<dt><p>
1e010 3c 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f  <b>$syntax</b></
1e020 64 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76  dt>".  hd_resolv
1e030 65 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c  e "<dd><p>$desc<
1e040 2f 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74  /dd>\n".}.hd_put
1e050 73 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23  snl "</dl>"..###
1e060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e0a0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1e0b0 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69  ion {Date And Ti
1e0c0 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61  me Functions} da
1e0d0 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e  tefunc {*datefun
1e0e0 63 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65  c {date and time
1e0f0 20 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f   functions}}.hd_
1e100 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29  keywords {date()
1e110 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
1e120 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74  time() SQL funct
1e130 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
1e140 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c   {datetime() SQL
1e150 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69   function} {juli
1e160 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63  anday() SQL func
1e170 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64  tion}.hd_keyword
1e180 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51  s {strftime() SQ
1e190 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63  L function}.</tc
1e1a0 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73  l>..<p>.SQLite s
1e1b0 75 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74  upports five dat
1e1c0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1e1d0 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ions as follows:
1e1e0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a  .</p>..<p>.<ol>.
1e1f0 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c  <li> ^(<b>date(<
1e200 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1e210 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1e220 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1e230 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1e240 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62  i> ^(<b>time(</b
1e250 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1e260 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1e270 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1e280 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1e290 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c   ^(<b>datetime(<
1e2a0 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1e2b0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1e2c0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1e2d0 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1e2e0 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61  i> ^(<b>julianda
1e2f0 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  y(</b><i>timestr
1e300 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1e310 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1e320 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1e330 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74  .<li> ^(<b>strft
1e340 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61  ime(</b><i>forma
1e350 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  t, timestring, m
1e360 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1e370 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1e380 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  b>)^ </li>.</ol>
1e390 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20  ..<p>.^All five 
1e3a0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1e3b0 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74  nctions take a t
1e3c0 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e  ime string as an
1e3d0 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65   argument. .^The
1e3e0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20   time string is 
1e3f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
1e400 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65   or more modifie
1e410 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69  rs. .^The strfti
1e420 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c  me() function al
1e430 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61  so takes a forma
1e440 74 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20  t string as its 
1e450 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
1e460 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61  </p>..<p>.The da
1e470 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1e480 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73  tions use a subs
1e490 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e  et of.[http://en
1e4a0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1e4b0 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49  iki/ISO_8601 | I
1e4c0 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e  S0-8601] date an
1e4d0 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a  d time.formats..
1e4e0 5e 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63  ^The date() func
1e4f0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1e500 20 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f   date in this fo
1e510 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44  rmat: YYYY-MM-DD
1e520 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66  . .^The time() f
1e530 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e540 74 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d  the time as HH:M
1e550 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65  M:SS. .^The date
1e560 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1e570 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d  returns "YYYY-MM
1e580 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a  -DD HH:MM:SS". .
1e590 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28  ^(The julianday(
1e5a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1e5b0 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  ns the .[http://
1e5c0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1e5d0 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79  /wiki/Julian_day
1e5e0 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d   | Julian day] -
1e5f0 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64   the.number of d
1e600 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69  ays since noon i
1e610 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e  n Greenwich on N
1e620 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34  ovember 24, 4714
1e630 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f   B.C. .([http://
1e640 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1e650 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f  /wiki/Proleptic_
1e660 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64  Gregorian_calend
1e670 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47  ar | Proleptic G
1e680 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
1e690 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66  r]).)^.^The strf
1e6a0 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72  time() routine r
1e6b0 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20  eturns the date 
1e6c0 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64  formatted accord
1e6d0 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d  ing to .the form
1e6e0 61 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66  at string specif
1e6f0 69 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  ied as the first
1e700 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20   argument..^The 
1e710 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75  format string su
1e720 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20  pports the most 
1e730 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74  common substitut
1e740 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ions found in th
1e750 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67  e .[http://openg
1e760 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70  roup.org/onlinep
1e770 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73  ubs/007908799/xs
1e780 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20  h/strftime.html 
1e790 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e  | strftime() fun
1e7a0 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20  ction].from the 
1e7b0 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1e7c0 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20  ry plus two new 
1e7d0 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25  substitutions, %
1e7e0 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20  f and %J..^(The 
1e7f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63  following is a c
1e800 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20  omplete list of 
1e810 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29  valid strftime()
1e820 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a   substitutions:.
1e830 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1e840 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  e>.<table border
1e850 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
1e860 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
1e870 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74  ="0">.<tr><td><t
1e880 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64  d width="10"><td
1e890 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e  ></tr>..<tr><td>
1e8a0 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79   %d <td><td> day
1e8b0 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74   of month: 00.<t
1e8c0 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74  r><td> %f <td><t
1e8d0 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65  d> fractional se
1e8e0 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74  conds: SS.SSS.<t
1e8f0 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74  r><td> %H <td><t
1e900 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a  d> hour: 00-24 .
1e910 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e  <tr><td> %j <td>
1e920 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72  <td> day of year
1e930 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74  : 001-366.<tr><t
1e940 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a  d> %J <td><td> J
1e950 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1e960 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64  .<tr><td> %m <td
1e970 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d  ><td> month: 01-
1e980 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c  12.<tr><td> %M <
1e990 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20  td><td> minute: 
1e9a0 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
1e9b0 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  s <td><td> secon
1e9c0 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31  ds since 1970-01
1e9d0 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20  -01.<tr><td> %S 
1e9e0 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
1e9f0 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
1ea00 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79   %w <td><td> day
1ea10 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74   of week 0-6 wit
1ea20 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e  h Sunday==0.<tr>
1ea30 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e  <td> %W <td><td>
1ea40 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30   week of year: 0
1ea50 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59  0-53.<tr><td> %Y
1ea60 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20   <td><td> year: 
1ea70 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74  0000-9999.<tr><t
1ea80 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25  d> %% <td><td> %
1ea90 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
1eaa0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e  kquote>)^..<p>.^
1eab0 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c  (Notice that all
1eac0 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20   other date and 
1ead0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  time functions c
1eae0 61 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a  an be expressed.
1eaf0 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66  in terms of strf
1eb00 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62  time():.</p>..<b
1eb10 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
1eb20 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c  e border="0" cel
1eb30 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c  lpadding="0" cel
1eb40 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74  lspacing="0">.<t
1eb50 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f  r><td><b>Functio
1eb60 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22  n</b><td width="
1eb70 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76  30"><td><b>Equiv
1eb80 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29  alent strftime()
1eb90 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  </b>.<tr><td>   
1eba0 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  date(...)      <
1ebb0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1ebc0 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e  e('%Y-%m-%d', ..
1ebd0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69  .).<tr><td>   ti
1ebe0 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  me(...)      <td
1ebf0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1ec00 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29  '%H:%M:%S', ...)
1ec10 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65  .<tr><td>   date
1ec20 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c  time(...)  <td><
1ec30 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
1ec40 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53  Y-%m-%d %H:%M:%S
1ec50 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1ec60 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e     julianday(...
1ec70 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66  ) <td><td>  strf
1ec80 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a  time('%J', ...).
1ec90 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1eca0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68  quote>)^..<p>.Th
1ecb0 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66  e only reasons f
1ecc0 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e  or providing fun
1ecd0 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61  ctions other tha
1ece0 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a  n strftime() is.
1ecf0 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  for convenience 
1ed00 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e  and for efficien
1ed10 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69  cy..</p>..<h3>Ti
1ed20 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a  me Strings</h3>.
1ed30 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72  .<p>^(A time str
1ed40 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e  ing can be in an
1ed50 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
1ed60 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a  ng formats:</p>.
1ed70 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  .<ol>.<li> <i>YY
1ed80 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69  YY-MM-DD</i>.<li
1ed90 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
1eda0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
1edb0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
1edc0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
1edd0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
1ede0 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1edf0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1ee00 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1ee10 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1ee20 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1ee30 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
1ee40 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  SS</i>.<li> <i>Y
1ee50 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
1ee60 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
1ee70 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
1ee80 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
1ee90 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  <i>HH:MM:SS</i>.
1eea0 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53  <li> <i>HH:MM:SS
1eeb0 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62  .SSS</i>.<li> <b
1eec0 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69  >now</b>.<li> <i
1eed0 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a  >DDDDDDDDDD</i>.
1eee0 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e  </ol>)^..<p>.^In
1eef0 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75   formats 5 throu
1ef00 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73  gh 7, the "T" is
1ef10 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61   a literal chara
1ef20 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20  cter separating 
1ef30 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68  .the date and th
1ef40 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69  e time, as requi
1ef50 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f  red by .[http://
1ef60 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e  www.w3c.org/TR/N
1ef70 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49  OTE-datetime | I
1ef80 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d  SO-8601]. .^Form
1ef90 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30  ats 8 through 10
1efa0 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e   that specify on
1efb0 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65  ly a time assume
1efc0 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30   a date of .2000
1efd0 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31  -01-01. Format 1
1efe0 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e  1, the string 'n
1eff0 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65  ow', is converte
1f000 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72  d into the .curr
1f010 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ent date and tim
1f020 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72  e as obtained fr
1f030 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54  om the xCurrentT
1f040 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68  ime method.of th
1f050 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20  e [sqlite3_vfs] 
1f060 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e  object in use..^
1f070 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65  The 'now' argume
1f080 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74  nt to date and t
1f090 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c  ime functions al
1f0a0 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61  ways returns exa
1f0b0 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61  ctly the.same va
1f0c0 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lue for multiple
1f0d0 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74   invocations wit
1f0e0 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71  hin the same [sq
1f0f0 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61  lite3_step()] ca
1f100 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e  ll..^[http://en.
1f110 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1f120 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55  ki/Coordinated_U
1f130 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20  niversal_Time | 
1f140 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69  Universal Coordi
1f150 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29  nated Time (UTC)
1f160 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72  ] is used. .^For
1f170 6d 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b  mat 12 is the .[
1f180 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1f190 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
1f1a0 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
1f1b0 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70   day number].exp
1f1c0 72 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61  ressed as a floa
1f1d0 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
1f1e0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d  ..</p>..<p>.Form
1f1f0 61 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30  ats 2 through 10
1f200 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
1f210 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
1f220 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61   timezone indica
1f230 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a  tor of the form.
1f240 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b  "<i>&#91;+-&#93;
1f250 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75  HH:MM</i>" or ju
1f260 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20  st "<i>Z</i>".  
1f270 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1f280 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1f290 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69  UTC or "zulu".ti
1f2a0 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61  me internally, a
1f2b0 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75  nd so the "Z" su
1f2c0 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  ffix is a no-op.
1f2d0 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22    Any non-zero "
1f2e0 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73  HH:MM" suffix is
1f2f0 0a 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d  .subtracted from
1f300 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64   the indicated d
1f310 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20  ate and time in 
1f320 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65  order to compute
1f330 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20   zulu time..For 
1f340 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20  example, all of 
1f350 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69  the following ti
1f360 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65  me strings are e
1f370 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a  quivalent:.</p>.
1f380 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30  .<blockquote>.20
1f390 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31  13-10-07 08:23:1
1f3a0 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31  9.120<br>.2013-1
1f3b0 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32  0-07T08:23:19.12
1f3c0 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30  0Z<br>.2013-10-0
1f3d0 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30  7 04:23:19.120-0
1f3e0 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32  4:00<br>.2456572
1f3f0 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63  .84952685.</bloc
1f400 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49  kquote>..<p>.^(I
1f410 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20  n formats 4, 7, 
1f420 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63  and 10, the frac
1f430 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76  tional seconds v
1f440 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20  alue SS.SSS can 
1f450 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  have.one or more
1f460 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e   digits followin
1f470 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  g the decimal po
1f480 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68  int.  Exactly th
1f490 72 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73  ree digits are.s
1f4a0 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d  hown in the exam
1f4b0 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c  ples because onl
1f4c0 79 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  y the first thre
1f4d0 65 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67  e digits are sig
1f4e0 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20  nificant.to the 
1f4f0 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20  result, but the 
1f500 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e  input string can
1f510 20 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d   have fewer or m
1f520 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64  ore than three d
1f530 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61  igits.and the da
1f540 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
1f550 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65  s will still ope
1f560 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29  rate correctly.)
1f570 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72  ^.Similarly, for
1f580 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20  mat 12 is shown 
1f590 77 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63  with 10 signific
1f5a0 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20  ant digits, but 
1f5b0 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75  the date/time.fu
1f5c0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61  nctions will rea
1f5d0 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61  lly accept as ma
1f5e0 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67  ny or as few dig
1f5f0 69 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73  its as are neces
1f600 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e  sary to.represen
1f610 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79  t the Julian day
1f620 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c   number..</p>..<
1f630 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33  h3>Modifiers</h3
1f640 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20  >..<p>^The time 
1f650 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f  string can be fo
1f660 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
1f670 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
1f680 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74   that .alter dat
1f690 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e  e and/or time. ^
1f6a0 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73  Each modifier.is
1f6b0 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f   a transformatio
1f6c0 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65  n that is applie
1f6d0 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61  d to the time va
1f6e0 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e  lue to its left.
1f6f0 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20  .^Modifiers are 
1f700 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66  applied from lef
1f710 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65  t to right; orde
1f720 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a  r is important..
1f730 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20  ^(The available 
1f740 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73  modifiers are as
1f750 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c   follows.</p>..<
1f760 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79  ol>.<li> NNN day
1f770 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73  s.<li> NNN hours
1f780 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65  .<li> NNN minute
1f790 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20  s.<li> NNN.NNNN 
1f7a0 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e  seconds.<li> NNN
1f7b0 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e   months.<li> NNN
1f7c0 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72   years.<li> star
1f7d0 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20  t of month.<li> 
1f7e0 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c  start of year.<l
1f7f0 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a  i> start of day.
1f800 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c  <li> weekday N.<
1f810 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c  li> unixepoch.<l
1f820 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69  i> localtime.<li
1f830 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  > utc .</ol>)^..
1f840 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69  <p>^The first si
1f850 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74  x modifiers (1 t
1f860 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c  hrough 6) .simpl
1f870 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66  y add the specif
1f880 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  ied amount of ti
1f890 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61  me to the date a
1f8a0 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69  nd time .specifi
1f8b0 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64  ed by the preced
1f8c0 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61  ing timestring a
1f8d0 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54  nd modifiers..^T
1f8e0 68 65 20 27 73 27 20 63 68 61 72 61 63 74 65 72  he 's' character
1f8f0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
1f900 68 65 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65  he modifier name
1f910 73 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  s is optional..^
1f920 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73  Note that "&plus
1f930 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77  mn;NNN months" w
1f940 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e  orks by renderin
1f950 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  g the original d
1f960 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59  ate into.the YYY
1f970 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20  Y-MM-DD format, 
1f980 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73  adding the &plus
1f990 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d  mn;NNN to the MM
1f9a0 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68   month value, th
1f9b0 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74  en.normalizing t
1f9c0 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75  he result.  ^Thu
1f9d0 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  s, for example, 
1f9e0 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33  the data 2001-03
1f9f0 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20  -31 modified.by 
1fa00 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69  '+1 month' initi
1fa10 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31  ally yields 2001
1fa20 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69  -04-31, but Apri
1fa30 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61  l only has 30 da
1fa40 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69  ys.so the date i
1fa50 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20  s normalized to 
1fa60 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20  2001-05-01.  ^A 
1fa70 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f  similar effect o
1fa80 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f  ccurs when.the o
1fa90 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20  riginal date is 
1faa0 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61  February 29 of a
1fab0 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68   leapyear and th
1fac0 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70  e modifier is.&p
1fad0 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68  lusmn;N years wh
1fae0 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d  ere N is not a m
1faf0 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e  ultiple of four.
1fb00 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73  </p>..<p>^The "s
1fb10 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65  tart of" modifie
1fb20 72 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29  rs (7 through 9)
1fb30 20 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20   shift the date 
1fb40 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68  backwards .to th
1fb50 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
1fb60 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
1fb70 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f  , year or day.</
1fb80 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65  p>..<p>^The "wee
1fb90 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61  kday" modifier a
1fba0 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65  dvances the date
1fbb0 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20   forward to the 
1fbc0 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65  next date .where
1fbd0 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d   the weekday num
1fbe0 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79  ber is N. Sunday
1fbf0 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73   is 0, Monday is
1fc00 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68   1, and so forth
1fc10 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1fc20 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1fc30 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f  ier (11) only wo
1fc40 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69  rks if it immedi
1fc50 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61  ately follows .a
1fc60 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74   timestring in t
1fc70 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f  he DDDDDDDDDD fo
1fc80 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64  rmat. .^This mod
1fc90 69 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65  ifier causes the
1fca0 20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62   DDDDDDDDDD to b
1fcb0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f  e interpreted no
1fcc0 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64  t .as a Julian d
1fcd0 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20  ay number as it 
1fce0 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62  normally would b
1fcf0 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a  e, but as.[http:
1fd00 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1fd10 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d  rg/wiki/Unix_tim
1fd20 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d  e | Unix Time] -
1fd30 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20   the .number of 
1fd40 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1fd50 37 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69  70.  If the "uni
1fd60 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1fd70 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77   does not.follow
1fd80 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66   a timestring of
1fd90 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44   the form DDDDDD
1fda0 44 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65  DDDD which expre
1fdb0 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  sses the number.
1fdc0 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
1fdd0 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65   1970 or if othe
1fde0 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61  r modifiers.sepa
1fdf0 72 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70  rate the "unixep
1fe00 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72  och" modifier fr
1fe10 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44  om prior DDDDDDD
1fe20 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68  DDD then the.beh
1fe30 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
1fe40 65 64 2e 0a 46 6f 72 20 53 51 4c 69 74 65 20 76  ed..For SQLite v
1fe50 65 72 73 69 6f 6e 73 20 62 65 66 6f 72 65 20 33  ersions before 3
1fe60 2e 31 36 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  .16.0 ([dateof:3
1fe70 2e 31 36 2e 30 5d 29 2c 20 0a 74 68 65 20 22 75  .16.0]), .the "u
1fe80 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1fe90 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  er only works fo
1fea0 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r.dates between 
1feb0 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
1fec0 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d  :00 and 5352-11-
1fed0 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69  01 10:52:47 (uni
1fee0 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36  x times.of -6216
1fef0 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20  7219200 through 
1ff00 31 30 36 37 35 31 39 39 31 31 36 37 29 2e 3c 2f  106751991167).</
1ff10 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
1ff20 6d 65 6e 74 20 6c 6f 63 61 6c 74 69 6d 65 20 7b  ment localtime {
1ff30 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69  localtime modifi
1ff40 65 72 7d 20 7b 27 75 74 63 27 20 6d 6f 64 69 66  er} {'utc' modif
1ff50 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ier}</tcl>.<p>^T
1ff60 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d  he "localtime" m
1ff70 6f 64 69 66 69 65 72 20 28 31 32 29 20 61 73 73  odifier (12) ass
1ff80 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20 73 74  umes the time st
1ff90 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74  ring to its left
1ffa0 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c   is in.Universal
1ffb0 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d   Coordinated Tim
1ffc0 65 20 28 55 54 43 29 20 61 6e 64 20 61 64 6a 75  e (UTC) and adju
1ffd0 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73 74 72  sts the time.str
1ffe0 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74 20 64  ing so that it d
1fff0 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d  isplays localtim
20000 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d  e.  If "localtim
20010 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d  e".follows a tim
20020 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 55 54  e that is not UT
20030 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  C, then the beha
20040 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
20050 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22 20 6d  d..^(The "utc" m
20060 6f 64 69 66 69 65 72 20 69 73 20 74 68 65 20 6f  odifier is the o
20070 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61  pposite of "loca
20080 6c 74 69 6d 65 22 2e 20 20 0a 22 75 74 63 22 20  ltime".  ."utc" 
20090 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65  assumes that the
200a0 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c   string.to its l
200b0 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f  eft is in the lo
200c0 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64  cal timezone and
200d0 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74   adjusts that st
200e0 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54  ring to be in UT
200f0 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f  C.)^.If the prio
20100 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20  r string is not 
20110 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68  in localtime, th
20120 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
20130 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69   "utc" is.undefi
20140 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78  ned.</p>..<h3>Ex
20150 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c  amples</h3>..^(<
20160 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
20170 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a  rrent date.<p>..
20180 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
20190 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c  CT date('now');<
201a0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
201b0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
201c0 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68 65   last day of the
201d0 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c   current month.<
201e0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
201f0 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f  >SELECT date('no
20200 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e  w','start of mon
20210 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27  th','+1 month','
20220 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63  -1 day');.</bloc
20230 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20240 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
20250 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
20260 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
20270 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e   1092941466.</p>
20280 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
20290 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69     SELECT dateti
202a0 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27  me(1092941466, '
202b0 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62  unixepoch');.</b
202c0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
202d0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
202e0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
202f0 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
20300 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20  amp 1092941466, 
20310 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20  and .compensate 
20320 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74  for your local t
20330 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62  imezone.</p>..<b
20340 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20350 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
20360 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
20370 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65  och', 'localtime
20380 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
20390 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
203a0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e  e the current un
203b0 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70  ix timestamp.</p
203c0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
203d0 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d    SELECT strftim
203e0 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c  e('%s','now');.<
203f0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
20400 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
20410 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20   number of days 
20420 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e  since the signin
20430 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c  g of the US Decl
20440 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70  aration.of Indep
20450 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62  endence.</p>..<b
20460 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20470 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e  ECT julianday('n
20480 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79  ow') - julianday
20490 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a  ('1776-07-04');.
204a0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
204b0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
204c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
204d0 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74  nds since a part
204e0 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e  icular moment in
204f0 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f   2004:</p>..<blo
20500 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
20510 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
20520 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d  'now') - strftim
20530 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d  e('%s','2004-01-
20540 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c  01 02:34:56');.<
20550 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
20560 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68  ^(<p>.Compute th
20570 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66 69  e date of the fi
20580 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f  rst Tuesday in O
20590 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63  ctober.for the c
205a0 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70  urrent year..</p
205b0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
205c0 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e    SELECT date('n
205d0 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65  ow','start of ye
205e0 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c  ar','+9 months',
205f0 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f  'weekday 2');.</
20600 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
20610 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
20620 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75  time since the u
20630 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63  nix epoch in sec
20640 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66  onds .(like strf
20650 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
20660 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73   except includes
20670 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
20680 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ):</p>..<blockqu
20690 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a  ote>.  SELECT (j
206a0 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
206b0 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34  - 2440587.5)*864
206c0 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  00.0;.</blockquo
206d0 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61  te>)^..<h3>Cavea
206e0 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e  ts And Bugs</h3>
206f0 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61  ..<p>The computa
20700 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69  tion of local ti
20710 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69  me depends heavi
20720 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a  ly on the whim .
20730 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61  of politicians a
20740 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69  nd is thus diffi
20750 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72  cult to get corr
20760 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63  ect for .all loc
20770 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69  ales. ^In this i
20780 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
20790 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
207a0 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20  brary .function 
207b0 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73  localtime_r() is
207c0 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74 20   used to assist 
207d0 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69  in the calculati
207e0 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d  on of .local tim
207f0 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c  e.  ^(The .local
20800 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74  time_r() C funct
20810 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c  ion normally onl
20820 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72  y works for year
20830 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61  s.between 1970 a
20840 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74  nd 2037. For dat
20850 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20  es outside this 
20860 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61  range, SQLite .a
20870 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74  ttempts to map t
20880 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20  he year into an 
20890 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20  equivalent year 
208a0 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e  within .this ran
208b0 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75  ge, do the calcu
208c0 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70  lation, then map
208d0 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29   the year back.)
208e0 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65  ^</p>...<p>^(The
208f0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c  se functions onl
20900 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73  y work for dates
20910 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31   between 0000-01
20920 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64  -01 00:00:00.and
20930 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35   9999-12-31 23:5
20940 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61  9:59 (julidan da
20950 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35  y numbers 172105
20960 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37 33  9.5 through 5373
20970 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61  484.5).)^.For da
20980 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61 74  tes outside that
20990 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75   range, the resu
209a0 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e  lts of these.fun
209b0 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66  ctions are undef
209c0 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f  ined.</p>..<p>No
209d0 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
209e0 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73  platforms only s
209f0 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f  upport one set o
20a00 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69  f DST rules. .Vi
20a10 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  sta only support
20a20 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65  s two. Therefore
20a30 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66  , on these platf
20a40 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61  orms, .historica
20a50 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f  l DST calculatio
20a60 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72  ns will be incor
20a70 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70  rect. .For examp
20a80 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69  le, in the US, i
20a90 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72  n 2007 the DST r
20aa0 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e  ules changed. .N
20ab0 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
20ac0 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79   platforms apply
20ad0 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53   the new 2007 DS
20ae0 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20  T rules .to all 
20af0 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61  previous years a
20b00 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f  s well. Vista do
20b10 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74  es somewhat bett
20b20 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c  er.getting resul
20b30 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20  ts correct back 
20b40 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68  to 1986, when th
20b50 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73  e rules were als
20b60 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a  o changed.</p>..
20b70 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20  <p>All internal 
20b80 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73  computations ass
20b90 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f  ume the .[http:/
20ba0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
20bb0 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e  g/wiki/Gregorian
20bc0 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67  _calendar | Greg
20bd0 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a  orian calendar].
20be0 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61  system.  It is a
20bf0 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74  lso assumed that
20c00 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78   every.day is ex
20c10 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f  actly 86400 seco
20c20 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e  nds in duration.
20c30 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
20c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c80 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
20c90 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75  on {Aggregate Fu
20ca0 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63  nctions} aggfunc
20cb0 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 75 6e 73 65   {*aggfunc}.unse
20cc0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f  t -nocomplain co
20cd0 72 65 66 75 6e 63 73 65 74 0a 0a 66 75 6e 63 64  refuncset..funcd
20ce0 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76  ef {avg(X)} {*av
20cf0 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61  g {avg() aggrega
20d00 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
20d10 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e    ^The avg() fun
20d20 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
20d30 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
20d40 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e of all non-NUL
20d50 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69  L <i>X</i> withi
20d60 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53  n a.  group.  ^S
20d70 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
20d80 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
20d90 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
20da0 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
20db0 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54  reted as 0..  ^T
20dc0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
20dd0 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
20de0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
20df0 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20  lue as long as. 
20e00 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20   at there is at 
20e10 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55  least one non-NU
20e20 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66  LL input even if
20e30 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72   all.  inputs ar
20e40 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68  e integers.  ^Th
20e50 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
20e60 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  ) is NULL if and
20e70 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65   only if.  there
20e80 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
20e90 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75   inputs.  .}..fu
20ea0 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20  ncdef {count(X) 
20eb0 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e  count(*)} {*coun
20ec0 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65  t {count() aggre
20ed0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
20ee0 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58  {.  ^The count(X
20ef0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
20f00 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
20f10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
20f20 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
20f30 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
20f40 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68  in a group.  ^Th
20f50 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74  e count(*) funct
20f60 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61  ion.  (with no a
20f70 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e  rguments) return
20f80 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
20f90 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
20fa0 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
20fb0 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  def {group_conca
20fc0 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61  t(X) group_conca
20fd0 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f  t(X,Y)} {.  *gro
20fe0 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70  up_concat {group
20ff0 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67  _concat() aggreg
21000 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
21010 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63  {.  ^The group_c
21020 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e  oncat() function
21030 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
21040 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
21050 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
21060 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  f.  all non-NULL
21070 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c   values of <i>X<
21080 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65  /i>.  ^If parame
21090 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20  ter <i>Y</i> is 
210a0 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69  present then.  i
210b0 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  t is used as the
210c0 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74   separator.  bet
210d0 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f  ween instances o
210e0 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20  f <i>X</i>.  ^A 
210f0 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75  comma (",") is u
21100 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
21110 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f  ator.  if <i>Y</
21120 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20  i> is omitted.  
21130 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  The order of the
21140 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c   concatenated el
21150 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69  ements is.  arbi
21160 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65  trary..}..funcde
21170 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78  f {max(X)} {*max
21180 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78  AggFunc *agg_max
21190 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74   {max() aggregat
211a0 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
211b0 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72   ^The max() aggr
211c0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
211d0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78   returns the max
211e0 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c  imum value of al
211f0 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
21200 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61  group..  ^The ma
21210 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  ximum value is t
21220 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f  he value that wo
21230 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
21240 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44  last in an.  ORD
21250 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d  ER BY on the sam
21260 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72  e column.  ^Aggr
21270 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75  egate max() retu
21280 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61  rns NULL .  if a
21290 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
212a0 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
212b0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
212c0 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
212d0 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41   {min(X)} {*minA
212e0 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20  ggFunc *agg_min 
212f0 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65  {min() aggregate
21300 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
21310 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65  ^The min() aggre
21320 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
21330 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69  returns the mini
21340 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  mum non-NULL val
21350 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
21360 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
21370 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61   ^The minimum va
21380 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74  lue is the first
21390 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
213a0 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61  that would appea
213b0 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20  r.  in an ORDER 
213c0 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  BY of the column
213d0 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d  ..  ^Aggregate m
213e0 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
213f0 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
21400 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
21410 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
21420 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
21430 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29  .funcdef {sum(X)
21440 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a   total(X)} {.  *
21450 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f  sumFunc *sum *to
21460 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67  tal.  {sum() agg
21470 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
21480 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72  .  {total() aggr
21490 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
214a0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29  } {.  ^The sum()
214b0 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67   and total() agg
214c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
214d0 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66  .  return sum of
214e0 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
214f0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
21500 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61  p..  ^If there a
21510 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
21520 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73  nput rows then s
21530 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e  um() returns.  N
21540 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20  ULL but total() 
21550 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e  returns 0.0..  N
21560 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61  ULL is not norma
21570 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65  lly a helpful re
21580 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d  sult for the sum
21590 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75   of no rows.  bu
215a0 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  t the SQL standa
215b0 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61  rd requires it a
215c0 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20  nd most other.  
215d0 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
215e0 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73  ines implement s
215f0 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f  um() that way so
21600 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20   SQLite does it 
21610 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61  in the.  same wa
21620 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
21630 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54   compatible.   T
21640 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  he non-standard 
21650 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e  total() function
21660 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61  .  is provided a
21670 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77  s a convenient w
21680 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  ay to work aroun
21690 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72  d this design pr
216a0 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53  oblem.  in the S
216b0 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e  QL language.</p>
216c0 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75  ..  <p>^The resu
216d0 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
216e0 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
216f0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
21700 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
21710 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
21720 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
21730 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
21740 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
21750 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20    ^If any input 
21760 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74  to sum() is neit
21770 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
21780 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20  r a NULL.  then 
21790 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20  sum() returns a 
217a0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
217b0 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67  alue.  which mig
217c0 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69  ht be an approxi
217d0 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72  mation to the tr
217e0 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c  ue sum.</p>..  <
217f0 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  p>^Sum() will th
21800 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
21810 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
21820 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
21830 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
21840 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
21850 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
21860 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
21870 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
21880 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
21890 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20   ^Total() never 
218a0 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
218b0 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f  r overflow..}.</
218c0 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a 54 68 65 20 61  tcl>...<p>.The a
218d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
218e0 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
218f0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
21900 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
21910 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66  onal.aggregate f
21920 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
21930 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64   in C may be add
21940 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73  ed using the .[s
21950 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
21960 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50  nction()]</a>.AP
21970 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20  I.</p>..<p>.^In 
21980 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75  any aggregate fu
21990 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  nction that take
219a0 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  s a single argum
219b0 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65  ent, that argume
219c0 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt.can be preced
219d0 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
219e0 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e  d DISTINCT.  ^In
219f0 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70   such cases, dup
21a00 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20  licate.elements 
21a10 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66  are filtered bef
21a20 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64  ore being passed
21a30 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67   into the aggreg
21a40 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46  ate function..^F
21a50 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
21a60 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28  function "count(
21a70 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c  distinct X)" wil
21a80 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  l return the num
21a90 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20  ber.of distinct 
21aa0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
21ab0 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68   X instead of th
21ac0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
21ad0 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65  f non-null.value
21ae0 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c  s in column X..<
21af0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c  /p>..<tcl>.set l
21b00 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61 73  x {}.foreach bas
21b10 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20 6e  esyntax [array n
21b20 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
21b30 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
21b40 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
21b50 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
21b60 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
21b70 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e  reak.  regexp {^
21b80 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79  [a-z_]+} $basesy
21b90 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20  ntax fragment.  
21ba0 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e 74  foreach coresynt
21bb0 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20 20  ax $syntax {.   
21bc0 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73   lappend lx [lis
21bd0 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f 72  t $fragment $cor
21be0 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d  esyntax 0].  }.}
21bf0 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b  .hd_list_of_link
21c00 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20  s {} 225 [lsort 
21c10 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68  -index 1 $lx]..h
21c20 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c  d_putsnl "<hr cl
21c30 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70  ass='xhr'>".hd_p
21c40 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72  utsnl "<dl>".for
21c50 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78 20  each basesyntax 
21c60 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61  [lsort [array na
21c70 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d  mes corefuncset]
21c80 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
21c90 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
21ca0 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
21cb0 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
21cc0 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d 61  reak.  regsub -a
21cd0 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67  ll {\s+} [string
21ce0 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b   trim $syntax] {
21cf0 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20  <br />} syntax. 
21d00 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28   regsub -all {\(
21d10 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e  ([^*)]+)\)} $syn
21d20 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29  tax {(<i>\1</i>)
21d30 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
21d40 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74  b -all {,} $synt
21d50 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79  ax {</i>,<i>} sy
21d60 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
21d70 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69  ll {<i>\.\.\.</i
21d80 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d  >} $syntax {...}
21d90 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78 70   syntax.  regexp
21da0 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65   {^[a-z]+} $base
21db0 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
21dc0 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
21dd0 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
21de0 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
21df0 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
21e00 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
21e10 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
21e20 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
21e30 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
21e40 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
21e50 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
21e60 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
21e70 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
21e80 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
21e90 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
21ea0 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
21eb0 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
21ec0 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
21ed0 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
21ee0 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
21ef0 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e  puts "<dt><p><b>
21f00 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e  $syntax</b></dt>
21f10 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22  ".  hd_resolve "
21f20 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64  <dd><p>$desc</dd
21f30 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c  >\n".}.hd_putsnl
21f40 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23   "</dl>"..######
21f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21f90 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
21fa0 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b   INSERT insert {
21fb0 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d  INSERT *INSERTs}
21fc0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
21fd0 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d  eDiagram insert-
21fe0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
21ff0 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  The INSERT state
22000 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68  ment comes in th
22010 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e  ree basic forms.
22020 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e    .<ul>.<li><p>^
22030 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28  The first form (
22040 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53  with the "VALUES
22050 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74  " keyword) creat
22060 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e  es one or more.n
22070 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78  ew rows in.an ex
22080 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49  isting table. ^I
22090 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f  f the <yyterm>co
220a0 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
220b0 6d 3e 20 6c 69 73 74 20 61 66 74 65 72 0a 3c 79  m> list after.<y
220c0 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
220d0 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f 6d 69  </yyterm> is omi
220e0 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  tted then the nu
220f0 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69  mber.of values i
22100 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63  nserted into eac
22110 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68  h row.must be th
22120 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
22130 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
22140 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
22150 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
22160 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
22170 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
22180 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72  st expression fr
22190 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a  om each term of.
221a0 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
221b0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
221c0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
221d0 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65  olumn of each ne
221e0 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f  w row,.and so fo
221f0 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62  rth for each sub
22200 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69  sequent expressi
22210 6f 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74 65 72  on. ^If a <yyter
22220 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
22230 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 73  yterm>.list is s
22240 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
22250 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
22260 75 65 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d  ues in each term
22270 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c 69   of the.VALUE li
22280 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68  st must match th
22290 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63  e number of.spec
222a0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e  ified columns. ^
222b0 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65  Each of the name
222c0 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  d columns of the
222d0 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
222e0 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 72  lated.with the r
222f0 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61  esults of evalua
22300 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ting the corresp
22310 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78  onding VALUES ex
22320 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65  pression. ^Table
22330 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f  .columns that do
22340 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
22350 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61  he column list a
22360 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  re populated wit
22370 68 20 74 68 65 20 0a 5b 64 65 66 61 75 6c 74 20  h the .[default 
22380 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20 28 73  column value] (s
22390 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
223a0 20 6f 66 20 74 68 65 20 5b 43 52 45 41 54 45 20   of the [CREATE 
223b0 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
223c0 29 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c 4c 20  ), or.with NULL 
223d0 69 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74 20 76  if no [default v
223e0 61 6c 75 65 5d 20 69 73 20 73 70 65 63 69 66 69  alue] is specifi
223f0 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
22400 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
22410 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
22420 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b  ent contains a [
22430 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
22440 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
22450 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
22460 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
22470 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
22480 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
22490 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
224a0 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
224b0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
224c0 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
224d0 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
224e0 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
224f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
22500 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
22510 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
22520 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
22530 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
22540 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
22550 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
22560 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
22570 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
22580 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
22590 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
225a0 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
225b0 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
225c0 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
225d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
225e0 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
225f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
22600 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d  , including.[com
22610 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61  pound SELECTs] a
22620 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
22630 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52  ents with [ORDER
22640 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d   BY] and/or [LIM
22650 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61  IT] clauses, .ma
22660 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20  y be used in an 
22670 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
22680 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a   of this form...
22690 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64  <li><p>The third
226a0 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45   form of an INSE
226b0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
226c0 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c  with DEFAULT VAL
226d0 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52  UES..^(The INSER
226e0 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41  T ... DEFAULT VA
226f0 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69  LUES statement i
22700 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20  nserts a single 
22710 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65  new row into the
22720 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20  .named table.)^ 
22730 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ^Each column of 
22740 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70  the new row is p
22750 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74  opulated with it
22760 73 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75  s .[default valu
22770 65 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e 55  e], or with a NU
22780 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74  LL if no default
22790 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66   value is specif
227a0 69 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66 20  ied .as part of 
227b0 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  the column defin
227c0 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52  ition in the [CR
227d0 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
227e0 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c  ement...</ul>..<
227f0 70 3e 5e 54 68 65 20 22 52 45 50 4c 41 43 45 22  p>^The "REPLACE"
22800 20 61 6e 64 20 22 49 4e 53 45 52 54 20 4f 52 20   and "INSERT OR 
22810 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 66  <i>action</i>" f
22820 6f 72 6d 73 20 73 70 65 63 69 66 79 20 61 6e 20  orms specify an 
22830 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
22840 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
22850 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
22860 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
22870 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45  ng this one INSE
22880 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  RT command..See 
22890 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
228a0 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
228b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
228c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
228d0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
228e0 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20  ith MySQL, ^the 
228f0 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68  parser allows th
22900 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e  e use of the.sin
22910 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68  gle keyword <a h
22920 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63  ref="lang_replac
22930 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c  e.html">REPLACE<
22940 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73  /a> as an .alias
22950 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
22960 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28  REPLACE"...<p>^(
22970 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69  The optional "<i
22980 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
22990 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78  <b>.</b>" prefix
229a0 20 6f 6e 20 74 68 65 20 0a 3c 79 79 74 65 72 6d   on the .<yyterm
229b0 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  >table-name</yyt
229c0 65 72 6d 3e 0a 69 73 20 73 75 70 70 6f 72 74 65  erm>.is supporte
229d0 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  d for top-level 
229e0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
229f0 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
22a00 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
22a10 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
22a20 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
22a30 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
22a40 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
22a50 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
22a60 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
22a70 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
22a80 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
22a90 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
22aa0 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
22ab0 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
22ac0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
22ad0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
22ae0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
22af0 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
22b00 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<tcl>.##
22b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b50 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
22b60 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
22b70 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
22b80 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
22b90 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
22ba0 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  CT}}..RecursiveB
22bb0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
22bc0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
22bd0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
22be0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
22bf0 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
22c00 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
22c10 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
22c20 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
22c30 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
22c40 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
22c50 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
22c60 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
22c70 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
22c80 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
22c90 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
22ca0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
22cb0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
22cc0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
22cd0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
22ce0 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
22cf0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
22d00 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
22d10 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
22d20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
22d30 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
22d40 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
22d50 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
22d60 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
22d70 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
22d80 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
22d90 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
22da0 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
22db0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
22dc0 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
22dd0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
22de0 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
22df0 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
22e00 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
22e10 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
22e20 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
22e30 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
22e40 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
22e50 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
22e60 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
22e70 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f  to [UNIQUE], [NO
22e80 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d  T NULL],.[CHECK]
22e90 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  , and [PRIMARY K
22ea0 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  EY] constraints.
22eb0 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  .The ON CONFLICT
22ec0 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20   algorithm does 
22ed0 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f  not.apply to [FO
22ee0 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
22ef0 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72  aints]..There ar
22f00 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20  e five conflict 
22f10 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
22f20 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f  ithm choices:.RO
22f30 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46  LLBACK, ABORT, F
22f40 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
22f50 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64   REPLACE..^The d
22f60 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
22f70 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
22f80 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
22f90 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
22fa0 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
22fb0 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
22fc0 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
22fd0 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
22fe0 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
22ff0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
23000 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rs, the ROLLBACK
23010 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
23020 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
23030 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
23040 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53  tement with.an S
23050 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
23060 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73   error and rolls
23070 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e   back the curren
23080 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  t transaction..^
23090 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
230a0 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
230b0 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
230c0 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
230d0 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
230e0 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
230f0 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  ) then the ROLLB
23100 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK resolution a
23110 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74  lgorithm works t
23120 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41  he same as the.A
23130 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c  BORT algorithm.<
23140 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
23150 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
23160 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
23170 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
23180 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
23190 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f   occurs, the ABO
231a0 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RT.resolution al
231b0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
231c0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
231d0 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e  tatement.with an
231e0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
231f0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63  NT error and bac
23200 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67  ks out any chang
23210 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63  es.made by the c
23220 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
23230 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65  ment; but change
23240 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f  s caused.by prio
23250 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
23260 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
23270 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65   transaction are
23280 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74   preserved and t
23290 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  he.transaction r
232a0 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54  emains active..T
232b0 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
232c0 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  lt behavior and 
232d0 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65  the behavior spe
232e0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51  cified by the SQ
232f0 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c  L.standard.</p><
23300 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
23310 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
23320 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
23330 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
23340 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
23350 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73  rs, the FAIL.res
23360 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
23370 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
23380 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
23390 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54  nt with an.SQLIT
233a0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
233b0 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41  or.  ^But the FA
233c0 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f  IL resolution do
233d0 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20  es not.back out 
233e0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66  prior changes of
233f0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
23400 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e  nt that failed n
23410 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74  or does.it end t
23420 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
23430 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66  ^For example, if
23440 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   an UPDATE.state
23450 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64  ment encountered
23460 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
23470 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31  olation on the 1
23480 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74  00th row that.it
23490 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64   attempts to upd
234a0 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69  ate, then the fi
234b0 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67  rst 99 row chang
234c0 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64  es are preserved
234d0 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20  .but changes to 
234e0 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79  rows 100 and bey
234f0 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e  ond never occur.
23500 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
23510 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74  b>IGNORE</b></dt
23520 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
23530 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
23540 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
23550 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20  on occurs, .the 
23560 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f  IGNORE resolutio
23570 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70  n algorithm skip
23580 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68  s the one row th
23590 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20  at contains.the 
235a0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
235b0 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tion and continu
235c0 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75  es processing su
235d0 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66  bsequent rows.of
235e0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
235f0 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67  nt as if nothing
23600 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68   went wrong..Oth
23610 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
23620 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
23630 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
23640 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
23650 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73  iolation are ins
23660 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
23670 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65  .normally. ^No e
23680 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
23690 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
236a0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
236b0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
236c0 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
236d0 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
236e0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
236f0 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51 55  > ^When a [UNIQU
23700 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b  E] or [PRIMARY K
23710 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  EY] constraint v
23720 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
23730 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c   .the REPLACE al
23740 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
23750 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
23760 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
23770 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
23780 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
23790 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
237a0 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
237b0 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
237c0 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
237d0 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
237e0 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
237f0 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74  [NOT NULL] const
23800 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
23810 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
23820 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73  ACE conflict.res
23830 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73  olution replaces
23840 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
23850 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74  with.the default
23860 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20   value for that 
23870 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68  column, or if th
23880 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20  e column has no 
23890 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74  default.value, t
238a0 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c  hen the ABORT al
238b0 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
238c0 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d 20 63  .^If a [CHECK] c
238d0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
238e0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
238f0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
23900 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
23910 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72  rithm always wor
23920 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f  ks like ABORT.</
23930 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  p>..<p>^When the
23940 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
23950 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
23960 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
23970 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
23980 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
23990 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49  int, [CREATE TRI
239a0 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72  GGER | delete tr
239b0 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20  iggers] fire if 
239c0 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63  and only if.[rec
239d0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20  ursive_triggers 
239e0 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69  pragma | recursi
239f0 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65  ve triggers] are
23a00 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c   enabled.</p>..<
23a10 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  p>^The [sqlite3_
23a20 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70  update_hook | up
23a30 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f  date hook] is no
23a40 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f  t invoked for ro
23a50 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65  ws that.are dele
23a60 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ted by the REPLA
23a70 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
23a80 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e  lution strategy.
23a90 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c    ^Nor does.REPL
23aa0 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ACE increment th
23ab0 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
23ac0 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e  es | change coun
23ad0 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74  ter]..The except
23ae0 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20  ional behaviors 
23af0 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
23b00 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20  paragraph might 
23b10 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74  change .in a fut
23b20 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
23b30 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</dl>..<p>^The 
23b40 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
23b50 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
23b60 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52  ause of an INSER
23b70 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
23b80 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
23b90 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
23ba0 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
23bb0 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
23bc0 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
23bd0 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
23be0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
23bf0 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
23c00 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
23c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
23c50 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
23c60 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
23c70 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
23c80 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
23c90 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
23ca0 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  ^The REINDEX com
23cb0 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
23cc0 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
23cd0 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
23ce0 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
23cf0 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
23d00 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
23d10 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
23d20 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
23d30 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
23d40 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f  he REINDEX keywo
23d50 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  rd is not follow
23d60 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
23d70 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61  n-sequence or da
23d80 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69  tabase .object i
23d90 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20  dentifier, then 
23da0 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
23db0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
23dc0 62 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c  bases are rebuil
23dd0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  t...<p>^If the R
23de0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
23df0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
23e00 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
23e10 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c  ce name, then.al
23e20 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
23e30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
23e40 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
23e50 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e   named collation
23e60 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72   sequences.are r
23e70 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e  ecreated. ..<p>^
23e80 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d  Or, if the argum
23e90 65 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20  ent attached to 
23ea0 74 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e  the REINDEX iden
23eb0 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  tifies a specifi
23ec0 63 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c  c .database tabl
23ed0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  e, then all indi
23ee0 63 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ces attached to 
23ef0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23f00 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20  le are rebuilt. 
23f10 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69  .^If it identifi
23f20 65 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61  es a specific da
23f30 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68  tabase index, th
23f40 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64  en just that ind
23f50 65 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e  ex is recreated.
23f60 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d  ..<p>^For a comm
23f70 61 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  and of the form 
23f80 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e 61 6d 65  "REINDEX <i>name
23f90 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63 68 0a 61  </i>", a match.a
23fa0 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 63  gainst <yyterm>c
23fb0 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79  ollation-name</y
23fc0 79 74 65 72 6d 3e 20 74 61 6b 65 73 20 70 72 65  yterm> takes pre
23fd0 63 65 64 65 6e 63 65 20 6f 76 65 72 20 61 20 6d  cedence over a m
23fe0 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79 79  atch.against <yy
23ff0 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c  term>index-name<
24000 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c 79 79 74  /yyterm> or <yyt
24010 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
24020 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73 20 61 6d  yyterm>..This am
24030 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
24040 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
24050 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
24060 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 79 79 74  pecifying a.<yyt
24070 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
24080 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e 20 72 65  /yyterm> when re
24090 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69  indexing a speci
240a0 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
240b0 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
240c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
240d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
240e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
240f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24100 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
24110 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
24120 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
24130 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
24140 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
24150 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
24160 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
24170 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
24180 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
24190 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
241a0 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
241b0 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
241c0 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
241d0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
241e0 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
241f0 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
24200 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
24210 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
24220 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
24230 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
24240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24280 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
24290 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75  ction {WITH clau
242a0 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f  se} with {{commo
242b0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
242c0 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75  ons} WITH}..Recu
242d0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
242e0 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c  am with-clause.<
242f0 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e  /tcl>..<p>Common
24300 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
24310 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c  ns or CTEs act l
24320 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76  ike temporary [v
24330 69 65 77 73 5d 20 74 68 61 74 20 65 78 69 73 74  iews] that exist
24340 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75  .only for the du
24350 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67  ration of a sing
24360 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
24370 2e 20 20 54 68 65 72 65 20 61 72 65 20 74 77 6f  .  There are two
24380 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e   kinds of.common
24390 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
243a0 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61  ns: "ordinary" a
243b0 6e 64 20 22 72 65 63 75 72 73 69 76 65 22 2e 20  nd "recursive". 
243c0 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e  Ordinary .common
243d0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
243e0 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66  ns are helpful f
243f0 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65  or making.querie
24400 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65  s easier to unde
24410 72 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72  rstand by factor
24420 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f  ing.subqueries o
24430 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53  ut of the main S
24440 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65  QL statement..Re
24450 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
24460 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
24470 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61 62 69  .provide the abi
24480 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61  lity to do hiera
24490 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72  rchical or.recur
244a0 73 69 76 65 20 71 75 65 72 69 65 73 20 6f 66 20  sive queries of 
244b0 74 72 65 65 73 20 61 6e 64 20 67 72 61 70 68 73  trees and graphs
244c0 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74  , a capability.t
244d0 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72  hat is not other
244e0 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69  wise available i
244f0 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
24500 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d  ge...<p>All comm
24510 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
24520 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61  ions (ordinary a
24530 6e 64 20 72 65 63 75 72 73 69 76 65 29 20 61 72  nd recursive) ar
24540 65 20 0a 63 72 65 61 74 65 64 20 62 79 20 70 72  e .created by pr
24550 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20  epending a WITH 
24560 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20  clause in front 
24570 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b  of a [SELECT], [
24580 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45  INSERT], [DELETE
24590 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ],.or [UPDATE] s
245a0 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e  tatement.  A sin
245b0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  gle WITH clause 
245c0 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20  can specify one 
245d0 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74  or more.common t
245e0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
245f0 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20  , some of which 
24600 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64  are ordinary and
24610 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61   some of which.a
24620 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c  re recursive...<
24630 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
24640 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64  ordinarycte {ord
24650 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
24660 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c  le expressions}<
24670 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61  /tcl>.<h3>Ordina
24680 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  ry Common Table 
24690 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
246a0 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79  ..<p>An ordinary
246b0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
246c0 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61  pression works a
246d0 73 20 69 66 20 69 74 20 77 65 72 65 20 61 20 5b  s if it were a [
246e0 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74  view] that.exist
246f0 73 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  s for the durati
24700 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73  on of a single s
24710 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e  tatement.  Ordin
24720 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
24730 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65  .expressions are
24740 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74   useful for fact
24750 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65  oring out subque
24760 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20  ries and making 
24770 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20  the overall.SQL 
24780 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72  statement easier
24790 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64   to read and und
247a0 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57  erstand...<p>A W
247b0 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63  ITH clause can c
247c0 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20  ontain ordinary 
247d0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
247e0 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66  ressions even if
247f0 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65  .it includes the
24800 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f   RECURSIVE keywo
24810 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20  rd.  The use of 
24820 52 45 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e  RECURSIVE does n
24830 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20  ot force.common 
24840 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
24850 73 20 74 6f 20 62 65 20 72 65 63 75 72 73 69 76  s to be recursiv
24860 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61  e...<tcl>.hd_fra
24870 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65 63  gment recursivec
24880 74 65 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f  te {recursive co
24890 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
248a0 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72  ssions} \.{recur
248b0 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
248c0 65 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 72  e expression} {r
248d0 65 63 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a  ecursive query}.
248e0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72  </tcl>.<h3>Recur
248f0 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c  sive Common Tabl
24900 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68  e Expressions</h
24910 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69  3>..<p>A recursi
24920 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
24930 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
24940 65 20 75 73 65 64 20 74 6f 20 77 72 69 74 65 20  e used to write 
24950 61 20 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c  a query that.wal
24960 6b 73 20 61 20 74 72 65 65 20 6f 72 20 67 72 61  ks a tree or gra
24970 70 68 2e 20 20 41 20 72 65 63 75 72 73 69 76 65  ph.  A recursive
24980 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
24990 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65  pression has the
249a0 20 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74   same.basic synt
249b0 61 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ax as an ordinar
249c0 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
249d0 78 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77  xpression, but w
249e0 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
249f0 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61  g.additional fea
24a00 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  tures:..<ol>.<li
24a10 3e 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73  > The "[select-s
24a20 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20  tmt]".     must 
24a30 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  be a [compound s
24a40 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65  elect] where the
24a50 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d   right-most [com
24a60 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20  pound-operator] 
24a70 69 73 0a 20 20 20 20 20 65 69 74 68 65 72 20 55  is.     either U
24a80 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c  NION or UNION AL
24a90 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c  L..<li> The tabl
24aa0 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c  e named on the l
24ab0 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
24ac0 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
24ad0 6d 75 73 74 20 61 70 70 65 61 72 0a 20 20 20 20  must appear.    
24ae0 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e   exactly once in
24af0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
24b00 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   of the right-mo
24b10 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  st SELECT statem
24b20 65 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20  ent.     of the 
24b30 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c  compound select,
24b40 20 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73   and nowhere els
24b50 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20  e..</ol>..<p>To 
24b60 70 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77  put it another w
24b70 61 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20  ay, a recursive 
24b80 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
24b90 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f  ression must.loo
24ba0 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f  k like the follo
24bb0 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75  wing:..<tcl>Recu
24bc0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
24bd0 61 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65  am recursive-cte
24be0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20  </tcl>..<p>Call 
24bf0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
24c00 62 79 20 74 68 65 20 5b 63 74 65 2d 74 61 62 6c  by the [cte-tabl
24c10 65 2d 6e 61 6d 65 5d 20 69 6e 20 61 20 72 65 63  e-name] in a rec
24c20 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61  ursive.common ta
24c30 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ble expression t
24c40 68 65 20 22 72 65 63 75 72 73 69 76 65 20 74 61  he "recursive ta
24c50 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20 5b 72 65  ble"..In the [re
24c60 63 75 72 73 69 76 65 2d 63 74 65 5d 20 62 75 62  cursive-cte] bub
24c70 62 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f 76  ble diagram abov
24c80 65 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65  e, the recursive
24c90 0a 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70 65  .table must appe
24ca0 61 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20  ar exactly once 
24cb0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
24cc0 73 65 20 6f 66 20 74 68 65 20 0a 3c 79 79 74 65  se of the .<yyte
24cd0 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
24ce0 65 63 74 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64  ect</yyterm>.and
24cf0 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72   must not appear
24d00 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69   anywhere else i
24d10 6e 20 65 69 74 68 65 72 20 74 68 65 0a 3c 79 79  n either the.<yy
24d20 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c  term>initial-sel
24d30 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20  ect</yyterm> or 
24d40 74 68 65 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75  the.<yyterm>recu
24d50 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
24d60 74 65 72 6d 3e 2c 20 69 6e 63 6c 75 64 69 6e 67  term>, including
24d70 20 73 75 62 71 75 65 72 69 65 73 2e 0a 54 68 65   subqueries..The
24d80 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c   <yyterm>initial
24d90 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
24da0 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f   may be.a [compo
24db0 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74  und select], but
24dc0 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c   it may not incl
24dd0 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c  ude an ORDER BY,
24de0 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45   LIMIT, or OFFSE
24df0 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65  T..The recursive
24e00 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20  -select must be 
24e10 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c  a simple select,
24e20 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e   not a compound.
24e30 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d    The.recursive-
24e40 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65  select is allowe
24e50 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20  d to include an 
24e60 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c  ORDER BY, LIMIT,
24e70 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a   and/or OFFSET..
24e80 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c  .<p>The basic al
24e90 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70  gorithm for comp
24ea0 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  uting the conten
24eb0 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
24ec0 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66  ve table.is as f
24ed0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  ollows:..<ol>.<l
24ee0 69 3e 20 52 75 6e 20 74 68 65 20 3c 79 79 74 65  i> Run the <yyte
24ef0 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
24f00 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 61  t</yyterm> and a
24f10 64 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74  dd the results t
24f20 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  o a queue..<li> 
24f30 57 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20  While the queue 
24f40 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f  is not empty:.<o
24f50 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e  l type="a">.<li>
24f60 20 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c   Extract a singl
24f70 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71  e row from the q
24f80 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72  ueue..<li> Inser
24f90 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f  t that single ro
24fa0 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72  w into the recur
24fb0 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20  sive table.<li> 
24fc0 50 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65  Pretend that the
24fd0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74   single row just
24fe0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
24ff0 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20  e only.     row 
25000 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
25010 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74   table and run t
25020 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
25030 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67  ect,.     adding
25040 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20   all results to 
25050 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e  the queue..</ol>
25060 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62  .</ol>..<p>The b
25070 61 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61  asic procedure a
25080 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65  bove may modifie
25090 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
250a0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75  ng additional ru
250b0 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  les:..<ul>.<li><
250c0 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20  p>.  If a UNION 
250d0 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74  operator connect
250e0 73 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  s the <yyterm>in
250f0 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
25100 74 65 72 6d 3e 20 77 69 74 68 20 74 68 65 0a 20  term> with the. 
25110 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69   <yyterm>recursi
25120 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  ve-select</yyter
25130 6d 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64  m>, then only ad
25140 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75  d rows to the qu
25150 65 75 65 20 69 66 20 0a 20 20 6e 6f 20 69 64 65  eue if .  no ide
25160 6e 74 69 63 61 6c 20 72 6f 77 20 68 61 73 0a 20  ntical row has. 
25170 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
25180 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
25190 65 75 65 2e 20 20 52 65 70 65 61 74 65 64 20 72  eue.  Repeated r
251a0 6f 77 73 20 61 72 65 20 64 69 73 63 61 72 64 65  ows are discarde
251b0 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20  d before being. 
251c0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
251d0 65 75 65 20 65 76 65 6e 20 69 66 20 74 68 65 20  eue even if the 
251e0 72 65 70 65 61 74 65 64 20 72 6f 77 73 20 68 61  repeated rows ha
251f0 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ve already been 
25200 65 78 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d  extracted.  from
25210 20 74 68 65 20 71 75 65 75 65 20 62 79 20 74 68   the queue by th
25220 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 65 70  e recursion step
25230 2e 20 20 49 66 20 74 68 65 20 6f 70 65 72 61 74  .  If the operat
25240 6f 72 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c  or is UNION ALL,
25250 0a 20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  .  then all rows
25260 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f   generated by bo
25270 74 68 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69  th the <yyterm>i
25280 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79  nitial-select</y
25290 79 74 65 72 6d 3e 20 61 6e 64 20 74 68 65 0a 20  yterm> and the. 
252a0 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69   <yyterm>recursi
252b0 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  ve-select</yyter
252c0 6d 3e 20 61 72 65 20 61 6c 77 61 79 73 20 61 64  m> are always ad
252d0 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
252e0 20 65 76 65 6e 20 69 66 0a 20 20 74 68 65 79 20   even if.  they 
252f0 61 72 65 20 72 65 70 65 61 74 73 2e 0a 20 20 57  are repeats..  W
25300 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining 
25310 69 66 20 61 20 72 6f 77 20 69 73 20 72 65 70 65  if a row is repe
25320 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  ated, NULL value
25330 73 20 63 6f 6d 70 61 72 65 0a 20 20 65 71 75 61  s compare.  equa
25340 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
25350 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 20 74   and not equal t
25360 6f 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75  o any other valu
25370 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65  e..<li><p>.  The
25380 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 69   LIMIT clause, i
25390 66 20 70 72 65 73 65 6e 74 2c 20 64 65 74 65 72  f present, deter
253a0 6d 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75  mines the maximu
253b0 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
253c0 20 74 68 61 74 0a 20 20 77 69 6c 6c 20 65 76 65   that.  will eve
253d0 72 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  r be added to th
253e0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
253f0 65 20 69 6e 20 73 74 65 70 20 32 62 2e 0a 20 20  e in step 2b..  
25400 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69 74 20 69  Once the limit i
25410 73 20 72 65 61 63 68 65 64 2c 20 74 68 65 20 72  s reached, the r
25420 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
25430 20 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72    A limit of zer
25440 6f 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  o means that no 
25450 72 6f 77 73 20 61 72 65 20 65 76 65 72 20 61 64  rows are ever ad
25460 64 65 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63  ded to the.  rec
25470 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e  ursive table, an
25480 64 20 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d  d a negative lim
25490 69 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69  it means an unli
254a0 6d 69 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mited number of 
254b0 72 6f 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64  rows.  may be ad
254c0 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
254d0 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e  sive table..<li>
254e0 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54  <p>.  The OFFSET
254f0 20 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69   clause, if it i
25500 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61  s present and ha
25510 73 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c  s a positive val
25520 75 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74  ue N, prevents t
25530 68 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77  he.  first N row
25540 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64  s from being add
25550 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
25560 69 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65  ive table..  The
25570 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72   first N rows ar
25580 65 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65  e still processe
25590 64 0a 20 20 62 79 20 74 68 65 20 3c 79 79 74 65  d.  by the <yyte
255a0 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
255b0 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 26 6d 64  ect</yyterm> &md
255c0 61 73 68 3b 20 74 68 65 79 0a 20 20 6a 75 73 74  ash; they.  just
255d0 20 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74   are not added t
255e0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
255f0 74 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65  table.  Rows are
25600 20 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77   not counted tow
25610 61 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67  ard.  fulfilling
25620 20 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c   the LIMIT until
25630 20 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73   all OFFSET rows
25640 20 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70   have been skipp
25650 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66  ed..<li><p>.  If
25660 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
25670 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
25680 69 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  it determines th
25690 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
256a0 20 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72   rows.  are extr
256b0 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71  acted from the q
256c0 75 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e  ueue in step 2a.
256d0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
256e0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
256f0 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64  ,.  then the ord
25700 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
25710 20 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69   are extracted i
25720 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49  s undefined.  (I
25730 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  n the current.  
25740 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
25750 74 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65  the queue become
25760 73 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20  s a FIFO if the 
25770 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
25780 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75  is omitted,.  bu
25790 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73  t applications s
257a0 68 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64  hould not depend
257b0 20 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69   on that fact si
257c0 6e 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61  nce it might cha
257d0 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63  nge.).</ul>..<tc
257e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63  l>hd_fragment rc
257f0 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65  ex1</tcl>.<h4>Re
25800 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
25810 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
25820 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
25830 65 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ery returns all 
25840 69 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e  integers between
25850 20 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a   1 and 1000000:.
25860 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
25870 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
25880 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56  E.  cnt(x) AS (V
25890 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41  ALUES(1) UNION A
258a0 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52  LL SELECT x+1 FR
258b0 4f 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31  OM cnt WHERE x<1
258c0 30 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78  000000).SELECT x
258d0 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65   FROM cnt;.</pre
258e0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
258f0 3c 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20  <p>Consider how 
25900 74 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73  this query works
25910 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73  .  The initial-s
25920 65 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74  elect.runs first
25930 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73   and returns a s
25940 69 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61  ingle row.with a
25950 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22   single column "
25960 31 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f  1".  This one ro
25970 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
25980 65 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65  e queue.  In.ste
25990 70 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72  p 2a, that one r
259a0 6f 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20  ow is extracted 
259b0 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61  from the queue a
259c0 6e 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74  nd added to "cnt
259d0 22 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75  "..Then the recu
259e0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20  rsive-select is 
259f0 72 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63  run in accordanc
25a00 65 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67  e with step 2c g
25a10 65 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67  enerating.a sing
25a20 6c 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20  le new row with 
25a30 76 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64  value "2" to add
25a40 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20   to the queue.  
25a50 54 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a  The queue still.
25a60 68 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20  has one row, so 
25a70 73 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20  step 2 repeats. 
25a80 20 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20   The "2" row is 
25a90 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
25aa0 64 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72  ded to the.recur
25ab0 73 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74  sive table by st
25ac0 65 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20  eps 2a and 2b.  
25ad0 54 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e  Then the row con
25ae0 74 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65  taining 2 is use
25af0 64 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65  d .as if it were
25b00 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f   the complete co
25b10 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
25b20 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64  ursive table and
25b30 20 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d   the .recursive-
25b40 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67  select is run ag
25b50 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ain, resulting i
25b60 6e 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c  n a row with val
25b70 75 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64  ue "3" being add
25b80 65 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed.to the queue.
25b90 20 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39    This repeats 9
25ba0 39 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69  99999 times unti
25bb0 6c 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65  l finally at ste
25bc0 70 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61  p 2a the.only va
25bd0 6c 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65  lue on the queue
25be0 20 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69   is a row contai
25bf0 6e 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54  ning 1000000.  T
25c00 68 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61  hat row is.extra
25c10 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
25c20 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
25c30 74 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73  table.  But this
25c40 20 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45   time, the.WHERE
25c50 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
25c60 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
25c70 65 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f  ect to return no
25c80 20 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75   rows, so the.qu
25c90 65 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74  eue remains empt
25ca0 79 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  y and the recurs
25cb0 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c  ion stops...<p><
25cc0 62 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e  b>Optimization n
25cd0 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20  ote:</b>.In the 
25ce0 64 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65  discussion above
25cf0 2c 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b  , statements lik
25d00 65 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f  e "insert the ro
25d10 77 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72  w into.the recur
25d20 73 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75  sive table" shou
25d30 6c 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64  ld be understood
25d40 20 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e   conceptually, n
25d50 6f 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74  ot literally..It
25d60 20 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51   sounds as if SQ
25d70 4c 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61  Lite is accumula
25d80 74 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c  ting a huge tabl
25d90 65 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65  e.containing one
25da0 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74   million rows, t
25db0 68 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61  hen going back a
25dc0 6e 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74  nd scanning that
25dd0 20 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20   table.from top 
25de0 74 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e  to bottom to gen
25df0 65 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74  erate the result
25e00 2e 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68  .  What really h
25e10 61 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74  appens.is that t
25e20 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
25e30 65 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c  er sees that val
25e40 75 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22  ues in the."cnt"
25e50 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
25e60 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f   are only used o
25e70 6e 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68  nce.  So as each
25e80 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
25e90 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74  .the recursive t
25ea0 61 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69  able, that row i
25eb0 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65  s immediately re
25ec0 74 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75  turned as a resu
25ed0 6c 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53  lt of the main.S
25ee0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
25ef0 61 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64  and then discard
25f00 65 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73  ed.  SQLite does
25f10 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63   <em>not</em> ac
25f20 63 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f  cumulate.a tempo
25f30 72 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61  rary table conta
25f40 69 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20  ining a million 
25f50 72 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74  rows.  Very litt
25f60 6c 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65  le memory is.nee
25f70 64 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61  ded to run the a
25f80 62 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48  bove example.  H
25f90 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65  owever, if the e
25fa0 78 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a  xample had used.
25fb0 55 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66  UNION instead of
25fc0 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e   UNION ALL, then
25fd0 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61   SQLite would ha
25fe0 76 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61  ve had to keep a
25ff0 72 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f  round.all previo
26000 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63  usly generated c
26010 6f 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  ontent in order 
26020 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70  to check for dup
26030 6c 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69  licates..For thi
26040 73 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61  s reason, progra
26050 6d 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72  mmers should str
26060 69 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e  ive to use UNION
26070 20 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20   ALL instead.of 
26080 55 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69  UNION when feasi
26090 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ble...<p>Here is
260a0 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
260b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61  the previous exa
260c0 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  mple:..<blockquo
260d0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
260e0 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29  CURSIVE.  cnt(x)
260f0 20 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43   AS (.     SELEC
26100 54 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41  T 1.     UNION A
26110 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78  LL.     SELECT x
26120 2b 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20  +1 FROM cnt.    
26130 20 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a    LIMIT 1000000.
26140 20 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f    ).SELECT x FRO
26150 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
26160 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
26170 68 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66  here are two dif
26180 66 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73  ferences in this
26190 20 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65   variation.  The
261a0 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
261b0 69 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e  is."SELECT 1" in
261c0 73 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53  stead of "VALUES
261d0 28 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65  (1)".  But those
261e0 20 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72   are just differ
261f0 65 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72  ent.syntaxes for
26200 20 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20   saying exactly 
26210 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
26220 20 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67   The other chang
26230 65 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65  e is that the.re
26240 63 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70  cursion is stopp
26250 65 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61  ed by a LIMIT ra
26260 74 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52  ther than a WHER
26270 45 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75  E clause.  The u
26280 73 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e  se of.LIMIT mean
26290 73 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20  s that when the 
262a0 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f  one-millionth ro
262b0 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
262c0 65 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61  e "cnt" table.(a
262d0 6e 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  nd returned by t
262e0 68 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20  he main SELECT, 
262f0 74 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75  thanks to the qu
26300 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74  ery optimizer).t
26310 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f  hen the recursio
26320 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74  n stops immediat
26330 65 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ely regardless o
26340 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20  f how many rows 
26350 6d 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e  might be.left in
26360 20 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20   the queue.  On 
26370 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65  more complex que
26380 72 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d  ries, it can som
26390 65 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63  etimes be.diffic
263a0 75 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ult to ensure th
263b0 61 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  at the WHERE cla
263c0 75 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61  use will eventua
263d0 6c 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75  lly cause the.qu
263e0 65 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64  eue to drain and
263f0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74   the recursion t
26400 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  o terminate.  Bu
26410 74 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  t the LIMIT clau
26420 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73  se will.always s
26430 74 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f  top the recursio
26440 6e 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f  n.  So it is goo
26450 64 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c  d practice to al
26460 77 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c  ways include a.L
26470 49 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61  IMIT clause as a
26480 20 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70   safety if an up
26490 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
264a0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63   size of the rec
264b0 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e  ursion .is known
264c0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
264d0 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a  ent rcex2</tcl>.
264e0 3c 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c  <h4>Hierarchical
264f0 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c   Query Examples<
26500 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65  /h4>..<p>Conside
26510 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64  r a table that d
26520 65 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d  escribes the mem
26530 62 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e  bers of an organ
26540 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20  ization as.well 
26550 61 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d  as the chain-of-
26560 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74  command within t
26570 68 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  hat organization
26580 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26590 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
265a0 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
265b0 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
265c0 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
265d0 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65  RENCES org,.  he
265e0 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f  ight INT,.  -- o
265f0 74 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69  ther content omi
26600 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tted.);.</pre></
26610 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
26620 45 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20  Every member in 
26630 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  the organization
26640 20 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64   has a name, and
26650 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61   most members ha
26660 76 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73  ve.a single boss
26670 2e 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20  .  (The head of 
26680 74 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69  the whole organi
26690 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c  zation has a NUL
266a0 4c 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29  L."boss" field.)
266b0 20 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65   The rows of the
266c0 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72   "org" table for
266d0 6d 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65  m a tree...<p>He
266e0 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68  re is a query th
266f0 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
26700 61 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f  average height o
26710 76 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20  ver everyone.in 
26720 41 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61  Alice's organiza
26730 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  tion, including 
26740 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  Alice:..<blockqu
26750 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
26760 45 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73  ECURSIVE.  works
26770 5f 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53  _for_alice(n) AS
26780 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41   (.    VALUES('A
26790 6c 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e  lice').    UNION
267a0 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  .    SELECT name
267b0 20 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73   FROM org, works
267c0 5f 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20  _for_alice.     
267d0 57 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77  WHERE org.boss=w
267e0 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e  orks_for_alice.n
267f0 0a 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28  .  ).SELECT avg(
26800 68 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67  height) FROM org
26810 0a 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65  . WHERE org.name
26820 20 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c   IN works_for_al
26830 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
26840 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
26850 20 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73   next example us
26860 65 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74  es two .common t
26870 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
26880 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54   in a single WIT
26890 48 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20  H clause.  .The 
268a0 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
268b0 72 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79  records a family
268c0 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75   tree:..<blockqu
268d0 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
268e0 20 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20   TABLE family(. 
268f0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
26900 52 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45  RY KEY,.  mom TE
26910 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61  XT REFERENCES fa
26920 6d 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54  mily,.  dad TEXT
26930 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69   REFERENCES fami
26940 6c 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54  ly,.  born DATET
26950 49 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45  IME,.  died DATE
26960 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66  TIME, -- NULL if
26970 20 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d   still alive.  -
26980 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a  - other content.
26990 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
269a0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
269b0 66 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73  family" table is
269c0 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
269d0 65 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61  earlier "org" ta
269e0 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ble except that 
269f0 0a 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74  .now there are t
26a00 77 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61  wo parents to ea
26a10 63 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61  ch member..We wa
26a20 6e 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c  nt to know all l
26a30 69 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20  iving ancestors 
26a40 6f 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f  of Alice, from o
26a50 6c 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73  ldest to younges
26a60 74 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63  t..An ordinary c
26a70 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
26a80 65 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f  ession, "parent_
26a90 6f 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20  of", is defined 
26aa0 66 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64  first.  That.ord
26ab0 69 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76  inary CTE is a v
26ac0 69 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20  iew that can be 
26ad0 75 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c  used to find all
26ae0 20 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a   parents of any.
26af0 69 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61  individual.  Tha
26b00 74 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t ordinary CTE i
26b10 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74  s then used in t
26b20 68 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  he "ancestor_of_
26b30 61 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65  alice".recursive
26b40 20 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72   CTE.  The recur
26b50 73 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e  sive CTE is then
26b60 20 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e   used in the fin
26b70 61 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63  al query:..<bloc
26b80 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
26b90 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61  H RECURSIVE.  pa
26ba0 72 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61  rent_of(name, pa
26bb0 72 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45  rent) AS.    (SE
26bc0 4c 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46  LECT name, mom F
26bd0 52 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e  ROM family UNION
26be0 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61   SELECT name, da
26bf0 64 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a  d FROM family),.
26c00 20 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c    ancestor_of_al
26c10 69 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20  ice(name) AS.   
26c20 20 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20   (SELECT parent 
26c30 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57  FROM parent_of W
26c40 48 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65  HERE name='Alice
26c50 27 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  '.     UNION ALL
26c60 0a 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72  .     SELECT par
26c70 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f  ent FROM parent_
26c80 6f 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  of JOIN ancestor
26c90 5f 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28  _of_alice USING(
26ca0 6e 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61  name)).SELECT fa
26cb0 6d 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61  mily.name FROM a
26cc0 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
26cd0 2c 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20  , family. WHERE 
26ce0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
26cf0 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61  e.name=family.na
26d00 6d 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49  me.   AND died I
26d10 53 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59  S NULL. ORDER BY
26d20 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62   born;.</pre></b
26d30 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c  lockquote>..<tcl
26d40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
26d50 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65  x2</tcl>.<h4>Que
26d60 72 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47  ries Against A G
26d70 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20  raph</h4>..<p>A 
26d80 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20  version control 
26d90 73 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c  system (VCS) wil
26da0 6c 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72  l typically stor
26db0 65 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76  e the evolving.v
26dc0 65 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f  ersions of a pro
26dd0 6a 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74  ject as a direct
26de0 65 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68  ed acyclic graph
26df0 20 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61   (DAG).  Call ea
26e00 63 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ch.version of th
26e10 65 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65  e project a "che
26e20 63 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65  ckin".  A single
26e30 0a 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76  .checkin can hav
26e40 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
26e50 61 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68  arents.  Most ch
26e60 65 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74  eckins (except t
26e70 68 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61  he.first) have a
26e80 20 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20   single parent, 
26e90 62 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20  but in the case 
26ea0 6f 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68  of a merge, a ch
26eb0 65 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65  eckin.might have
26ec0 20 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72   two or three or
26ed0 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20   more parents.  
26ee0 41 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70  A schema to keep
26ef0 20 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69   track of.checki
26f00 6e 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72  ns and the order
26f10 20 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f   in which they o
26f20 63 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20  ccur might look 
26f30 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74  something like.t
26f40 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  his:..<blockquot
26f50 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
26f60 41 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20  ABLE checkin(.  
26f70 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
26f80 52 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20  RY KEY,.  mtime 
26f90 49 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73  INTEGER -- times
26fa0 74 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63  tamp when this c
26fb0 68 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a  heckin occurred.
26fc0 29 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  );.CREATE TABLE 
26fd0 64 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78  derivedfrom(.  x
26fe0 66 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54  from INTEGER NOT
26ff0 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53   NULL REFERENCES
27000 20 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72   checkin, -- par
27010 65 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74  ent checkin.  xt
27020 6f 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  o INTEGER NOT NU
27030 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
27040 65 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69  eckin,   -- deri
27050 76 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52  ved checkin.  PR
27060 49 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c  IMARY KEY(xfrom,
27070 78 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49  xto).);.CREATE I
27080 4e 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d  NDEX derivedfrom
27090 5f 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64  _back ON derived
270a0 66 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b  from(xto,xfrom);
270b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
270c0 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72  ote>..<p>This gr
270d0 61 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20  aph is acyclic. 
270e0 20 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74   And we assume t
270f0 68 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  hat the mtime of
27100 20 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65   every.child che
27110 63 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20  ckin is no less 
27120 74 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f  than the mtime o
27130 66 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74  f all its parent
27140 73 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74  s.  But.unlike t
27150 68 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70  he earlier examp
27160 6c 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20  les, this graph 
27170 6d 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69  might have multi
27180 70 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66  ple paths of.dif
27190 66 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62  fering lengths b
271a0 65 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63  etween any two c
271b0 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20  heckins...<p>We 
271c0 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65  want to know the
271d0 20 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63   twenty most rec
271e0 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e  ent ancestors in
271f0 20 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68   time (out of.th
27200 65 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20  e thousands and 
27210 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63  thousands of anc
27220 65 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68  estors in the wh
27230 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65  ole DAG) for.che
27240 63 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22  ckin "@BASELINE"
27250 2e 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69  .  (A query simi
27260 6c 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75  lar to this is u
27270 73 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72  sed.by the <a hr
27280 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66  ef="http://www.f
27290 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e  ossil-scm.org/">
272a0 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74  Fossil</a> VCS t
272b0 6f 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73  o.show the N mos
272c0 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
272d0 72 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20  rs of a check.  
272e0 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20  For example:.<a 
272f0 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77  href="http://www
27300 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
27310 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
27320 26 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77  &n=30">http://ww
27330 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
27340 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e  /timeline?p=trun
27350 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62  k&n=30</a>.)..<b
27360 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
27370 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
27380 20 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69   ancestor(id,mti
27390 6d 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  me) AS (.    SEL
273a0 45 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52  ECT id, mtime FR
273b0 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45  OM checkin WHERE
273c0 20 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20   id=@BASELINE.  
273d0 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45    UNION.    SELE
273e0 43 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  CT derivedfrom.x
273f0 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74  from, checkin.mt
27400 69 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61  ime.      FROM a
27410 6e 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64  ncestor, derived
27420 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20  from, checkin.  
27430 20 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f     WHERE ancesto
27440 72 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d  r.id=derivedfrom
27450 2e 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20  .xto.       AND 
27460 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76  checkin.id=deriv
27470 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20  edfrom.xfrom.   
27480 20 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b    ORDER BY check
27490 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20  in.mtime DESC.  
274a0 20 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a     LIMIT 20.  ).
274b0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68  SELECT * FROM ch
274c0 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73  eckin JOIN ances
274d0 74 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c  tor USING(id);.<
274e0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
274f0 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44  e>..<p>.The "ORD
27500 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
27510 69 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69  ime DESC" term i
27520 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
27530 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65  select makes.the
27540 20 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20   query run much 
27550 66 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e  faster by preven
27560 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c  ting it from fol
27570 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20  lowing.branches 
27580 74 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b  that merge check
27590 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67  ins.from long ag
275a0 6f 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59  o.  The ORDER BY
275b0 20 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75   forces the recu
275c0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20  rsive-select to 
275d0 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73  focus.on the mos
275e0 74 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e  t recent checkin
275f0 73 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77  s, the ones we w
27600 61 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68  ant.  Without th
27610 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68  e ORDER BY.on th
27620 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
27630 63 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65  ct, one would be
27640 20 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75   forced to compu
27650 74 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  te the complete 
27660 73 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73  set of.thousands
27670 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73   of ancestors, s
27680 6f 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20  ort them all by 
27690 6d 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65  mtime, then take
276a0 20 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e   the top twenty.
276b0 0a 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73  .The ORDER BY es
276c0 73 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75  sentially sets u
276d0 70 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65  p a priority que
276e0 75 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74  ue that.forces t
276f0 68 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65  he recursive que
27700 72 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68  ry to look at th
27710 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  e most recent an
27720 63 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61  cestors first,.a
27730 6c 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20  llowing the use 
27740 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  of a LIMIT claus
27750 65 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68  e to restrict th
27760 65 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71  e scope of the.q
27770 75 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65  uery to just the
27780 20 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74   checkins of int
27790 65 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  erest...<tcl>hd_
277a0 66 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64  fragment withord
277b0 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43  erby</tcl>.<h4>C
277c0 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68  ontrolling Depth
277d0 2d 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72  -First Versus Br
277e0 65 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72  eadth-First Sear
277f0 63 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69  ch Of a Tree.Usi
27800 6e 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e  ng ORDER BY</h4>
27810 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59  ..<p>An ORDER BY
27820 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72   clause on the r
27830 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
27840 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
27850 6f 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74  ontrol.whether t
27860 68 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74  he search of a t
27870 72 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72  ree is depth-fir
27880 73 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69  st or breadth-fi
27890 72 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72  rst.  To.illustr
278a0 61 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65  ate, we will use
278b0 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
278c0 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20  the "org" table 
278d0 66 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a  from an example.
278e0 61 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74  above, without t
278f0 68 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75  he "height" colu
27900 6d 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d  mn, and with som
27910 65 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65  e real data inse
27920 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  rted:..<blockquo
27930 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
27940 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d  TABLE org(.  nam
27950 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
27960 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20  EY,.  boss TEXT 
27970 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29  REFERENCES org.)
27980 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a   WITHOUT ROWID;.
27990 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
279a0 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e  VALUES('Alice',N
279b0 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ULL);.INSERT INT
279c0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f  O org VALUES('Bo
279d0 62 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53  b','Alice');.INS
279e0 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
279f0 55 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69  UES('Cindy','Ali
27a00 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ce');.INSERT INT
27a10 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61  O org VALUES('Da
27a20 76 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45  ve','Bob');.INSE
27a30 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
27a40 45 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29  ES('Emma','Bob')
27a50 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
27a60 67 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c  g VALUES('Fred',
27a70 27 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54  'Cindy');.INSERT
27a80 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
27a90 28 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29  ('Gail','Cindy')
27aa0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
27ab0 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69  uote>..<p>Here i
27ac0 73 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f  s a query to sho
27ad0 77 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63  w the tree struc
27ae0 74 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74  ture in a breadt
27af0 68 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a  h-first pattern:
27b00 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
27b10 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
27b20 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
27b30 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
27b40 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
27b50 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
27b60 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
27b70 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
27b80 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
27b90 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
27ba0 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
27bb0 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
27bc0 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
27bd0 20 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a   ORDER BY 2.  ).
27be0 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
27bf0 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
27c00 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
27c10 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
27c20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
27c30 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44  te>..<p>The "ORD
27c40 45 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20  ER BY 2" (which 
27c50 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
27c60 73 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65  s "ORDER BY unde
27c70 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22  r_alice.level+1"
27c80 29 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20  ).causes higher 
27c90 6c 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72  levels in the or
27ca0 67 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74  ganization chart
27cb0 20 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22   (with smaller "
27cc0 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74  level" values).t
27cd0 6f 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66  o be processed f
27ce0 69 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  irst, resulting 
27cf0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
27d00 73 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20  st search.  The 
27d10 6f 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f  output is:..<blo
27d20 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c  ckquote><pre>.Al
27d30 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69  ice....Bob....Ci
27d40 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e  ndy.......Dave..
27d50 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e  .....Emma.......
27d60 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a  Fred.......Gail.
27d70 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
27d80 74 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77  te>..<p>But if w
27d90 65 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44  e change the ORD
27da0 45 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20  ER BY clause to 
27db0 61 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d  add the "DESC" m
27dc0 6f 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69  odifier, that wi
27dd0 6c 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c  ll.cause lower l
27de0 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
27df0 61 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20  anization (with 
27e00 6c 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76  larger "level" v
27e10 61 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f  alues) to be.pro
27e20 63 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20  cessed first by 
27e30 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
27e40 6c 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  lect, resulting 
27e50 69 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74  in a depth-first
27e60 20 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b   search:..<block
27e70 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
27e80 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
27e90 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
27ea0 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
27eb0 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
27ec0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
27ed0 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
27ee0 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
27ef0 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
27f00 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
27f10 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
27f20 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
27f30 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
27f40 59 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a  Y 2 <b>DESC</b>.
27f50 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74    ).SELECT subst
27f60 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31  r('..........',1
27f70 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d  ,level*3) || nam
27f80 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69  e FROM under_ali
27f90 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
27fa0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
27fb0 6f 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72  output of this r
27fc0 65 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a  evised query is:
27fd0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
27fe0 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62  re>.Alice....Bob
27ff0 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
28000 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a  ..Emma....Cindy.
28010 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e  ......Fred......
28020 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  .Gail.</pre></bl
28030 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68  ockquote>..<p>Wh
28040 65 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  en the ORDER BY 
28050 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65  clause is omitte
28060 64 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72  d from the recur
28070 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65  sive-select, the
28080 0a 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61  .queue behaves a
28090 73 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20  s a FIFO, which 
280a0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65  results in a bre
280b0 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
280c0 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h....<tcl>hd_fra
280d0 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74  gment mandelbrot
280e0 20 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61   {compute the Ma
280f0 6e 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74  ndelbrot set}</t
28100 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69  cl>.<h4>Outlandi
28110 73 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65  sh Recursive Que
28120 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
28130 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
28140 6e 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65  ng query compute
28150 73 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  s an approximati
28160 6f 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c  on of the Mandel
28170 62 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74  brot Set.and out
28180 70 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  puts the result 
28190 61 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c  as ASCII-art:..<
281a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
281b0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
281c0 20 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56    xaxis(x) AS (V
281d0 41 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f  ALUES(-2.0) UNIO
281e0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30  N ALL SELECT x+0
281f0 2e 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57  .05 FROM xaxis W
28200 48 45 52 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a  HERE x&lt;1.2),.
28210 20 20 79 61 78 69 73 28 79 29 20 41 53 20 28 56    yaxis(y) AS (V
28220 41 4c 55 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f  ALUES(-1.0) UNIO
28230 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30  N ALL SELECT y+0
28240 2e 31 20 46 52 4f 4d 20 79 61 78 69 73 20 57 48  .1 FROM yaxis WH
28250 45 52 45 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20  ERE y&lt;1.0),. 
28260 20 6d 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c   m(iter, cx, cy,
28270 20 78 2c 20 79 29 20 41 53 20 28 0a 20 20 20 20   x, y) AS (.    
28280 53 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c 20  SELECT 0, x, y, 
28290 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61  0.0, 0.0 FROM xa
282a0 78 69 73 2c 20 79 61 78 69 73 0a 20 20 20 20 55  xis, yaxis.    U
282b0 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
282c0 45 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20  ECT iter+1, cx, 
282d0 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78  cy, x*x-y*y + cx
282e0 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46  , 2.0*x*y + cy F
282f0 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48 45 52  ROM m .     WHER
28300 45 20 28 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c  E (x*x + y*y) &l
28310 74 3b 20 34 2e 30 20 41 4e 44 20 69 74 65 72 26  t; 4.0 AND iter&
28320 6c 74 3b 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28  lt;28.  ),.  m2(
28330 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53  iter, cx, cy) AS
28340 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   (.    SELECT ma
28350 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20  x(iter), cx, cy 
28360 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20  FROM m GROUP BY 
28370 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28  cx, cy.  ),.  a(
28380 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  t) AS (.    SELE
28390 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
283a0 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c   substr(' .+*#',
283b0 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29   1+min(iter/7,4)
283c0 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46  , 1), '') .    F
283d0 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20  ROM m2 GROUP BY 
283e0 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72  cy.  ).SELECT gr
283f0 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d  oup_concat(rtrim
28400 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20  (t),x'0a') FROM 
28410 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  a;.</pre></block
28420 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
28430 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78  is query, the "x
28440 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73  axis" and "yaxis
28450 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68  " CTEs define th
28460 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73  e grid of points
28470 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d   for.which the M
28480 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69  andelbrot Set wi
28490 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74  ll be approximat
284a0 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e  ed.  Each row in
284b0 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c   the."m(iter,cx,
284c0 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61  cy,x,y)" CTE mea
284d0 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69  ns that after "i
284e0 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c  ter" iterations,
284f0 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a   the Mandelbrot.
28500 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69  iteration starti
28510 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20  ng at cx,cy has 
28520 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c  reached point x,
28530 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
28540 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20  f iterations.in 
28550 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20  this example is 
28560 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77  limited to 28 (w
28570 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69  hich severely li
28580 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74  mits the resolut
28590 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75  ion of.the compu
285a0 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73  tation, but is s
285b0 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f  ufficient for lo
285c0 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43  w-resolution ASC
285d0 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a  II-art output)..
285e0 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c  The "m2(iter,cx,
285f0 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74  cy)" CTE holds t
28600 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
28610 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
28620 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61  reached when.sta
28630 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63  rting at point c
28640 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65  x,cy..Finally, e
28650 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22  ach row in the "
28660 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20  a(t)" CTE holds 
28670 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20  a string .which 
28680 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  is a single line
28690 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41   of the output A
286a0 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45  SCII-art..The SE
286b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
286c0 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71  t the end just q
286d0 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43  ueries the "a" C
286e0 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61  TE to.retrieve a
286f0 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49  ll lines of ASCI
28700 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e  I-art, one by on
28710 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74  e...<p>Running t
28720 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69  he query above i
28730 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d  n an SQLite [com
28740 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
28750 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20   results.in the 
28760 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74  following output
28770 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
28780 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20  pre>.           
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20           ....#. 
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287d0 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20    ..#*...       
287e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287f0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
28800 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
28830 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28850 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23  ..##+*##########
28860 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20  +.++++.         
28870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28880 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23   .+.############
28890 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
288a0 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e         .........
288b0 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23  ....+###########
288c0 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20  ########+.+.    
288d0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
288e0 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
288f0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
28900 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b              ...+
28910 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23  #######++#######
28920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28930 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
28940 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
28950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28960 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23  ##.. ###########
28970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28990 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  ##....          
289a0 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
289b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
289c0 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
289d0 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23       ...+#######
289e0 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ++##############
289f0 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
28a00 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
28a10 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
28a20 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
28a30 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
28a40 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
28a50 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
28a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a70 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23             .+.##
28a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28a90 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
28ab0 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e  ##+*##########+.
28ac0 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20  ++++.           
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ae0 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
28af0 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
28b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b10 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
28b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b40 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20      ..#*...     
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
28b70 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20  ...#.           
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b90 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72           +..</pr
28ba0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
28bb0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
28bc0 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20  t sudoku {solve 
28bd0 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20  Sudoku puzzles} 
28be0 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e  </tcl>.<p>This n
28bf0 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73  ext query solves
28c00 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65   a Sudoku puzzle
28c10 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  .  The state of 
28c20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65  the puzzle is.de
28c30 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63  fined by an 81-c
28c40 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
28c50 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e  formed by readin
28c60 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  g entries from t
28c70 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f  he.puzzle box ro
28c80 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65  w by row from le
28c90 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20  ft to right and 
28ca0 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f  then from top to
28cb0 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73   bottom..Blank s
28cc0 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75  quares in the pu
28cd0 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64  zzle are denoted
28ce0 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63   by a "." charac
28cf0 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20  ter.  .Thus the 
28d00 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c  input string:..<
28d10 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e  blockquote>.53..
28d20 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
28d30 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
28d40 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
28d50 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
28d60 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f  9..5....8..79.</
28d70 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
28d80 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  Corresponds to a
28d90 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69   puzzle like thi
28da0 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
28db0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
28dc0 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
28dd0 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64  5">.<tr><td>5<td
28de0 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >3<td> <td> <td>
28df0 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
28e00 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74  <td>.<tr><td>6<t
28e10 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64  d> <td> <td>1<td
28e20 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e  >9<td>5<td> <td>
28e30 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c   <td>.<tr><td> <
28e40 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td>9<td>8<td> <t
28e50 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
28e60 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38  >6<td>.<tr><td>8
28e70 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
28e80 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>6<td> <td> <t
28e90 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64  d> <td>3.<tr><td
28ea0 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >4<td> <td> <td>
28eb0 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20  8<td> <td>3<td> 
28ec0 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c  <td> <td>1.<tr><
28ed0 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
28ee0 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64  d> <td>2<td> <td
28ef0 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72  > <td> <td>6.<tr
28f00 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20  ><td> <td>6<td> 
28f10 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
28f20 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74  td>2<td>8<td>.<t
28f30 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  r><td> <td> <td>
28f40 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39   <td>4<td>1<td>9
28f50 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a  <td> <td> <td>5.
28f60 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  <tr><td> <td> <t
28f70 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
28f80 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e  > <td> <td>7<td>
28f90 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  9.</table>.</blo
28fa0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69  ckquote>..<p>Thi
28fb0 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74  s is the query t
28fc0 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70  hat solves the p
28fd0 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  uzzle:..<blockqu
28fe0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
28ff0 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74  ECURSIVE.  input
29000 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56  (sud) AS (.    V
29010 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e  ALUES('53..7....
29020 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e  6..195....98....
29030 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e  6.8...6...34..8.
29040 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e  3..17...2...6.6.
29050 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e  ...28....419..5.
29060 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a  ...8..79').  ),.
29070 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20    digits(z, lp) 
29080 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
29090 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f  '1', 1).    UNIO
290a0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20  N ALL SELECT.   
290b0 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45   CAST(lp+1 AS TE
290c0 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64  XT), lp+1 FROM d
290d0 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 26 6c  igits WHERE lp&l
290e0 74 3b 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20  t;9.  ),.  x(s, 
290f0 69 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45  ind) AS (.    SE
29100 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
29110 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
29120 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41  nput.    UNION A
29130 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20  LL.    SELECT.  
29140 20 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c      substr(s, 1,
29150 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
29160 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
29170 2c 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73  ,.      instr( s
29180 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
29190 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
291a0 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
291b0 20 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20   ).     FROM x, 
291c0 64 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20  digits AS z.    
291d0 57 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20  WHERE ind>0.    
291e0 20 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53    AND NOT EXISTS
291f0 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53   (.            S
29200 45 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20  ELECT 1.        
29210 20 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74        FROM digit
29220 73 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20  s AS lp.        
29230 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
29240 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
29250 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
29260 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
29270 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
29280 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29  r(s, ((ind-1)%9)
29290 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c   + (lp-1)*9 + 1,
292a0 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
292b0 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62      OR z.z = sub
292c0 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29  str(s, (((ind-1)
292d0 2f 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20  /3) % 3) * 3.   
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f       + ((ind-1)/
29300 32 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20  27) * 27 + lp.  
29310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29320 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
29330 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20  / 3) * 6, 1).   
29340 20 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45        ).  ).SELE
29350 43 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52  CT s FROM x WHER
29360 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c  E ind=0;.</pre><
29370 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
29380 3e 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45  >The "input" CTE
29390 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70   defines the inp
293a0 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22  ut puzzle..The "
293b0 64 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69  digits" CTE defi
293c0 6e 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74  nes a table that
293d0 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74   holds all digit
293e0 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
293f0 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73  9..The work of s
29400 6f 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c  olving the puzzl
29410 65 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20  e is undertaken 
29420 62 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a  by the "x" CTE..
29430 41 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c  An entry in x(s,
29440 69 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20  ind) means that 
29450 74 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72  the 81-character
29460 20 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61   string "s" is a
29470 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
29480 7a 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20  zzle (it has no 
29490 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74  conflicts) and t
294a0 68 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e  hat the first un
294b0 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a  known character.
294c0 69 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22  is at position "
294d0 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20  ind", or ind==0 
294e0 69 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  if all character
294f0 20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66   positions are f
29500 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f  illed in..The go
29510 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20  al, then, is to 
29520 63 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20  compute entries 
29530 66 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20  for "x" with an 
29540 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e  "ind" of 0...<p>
29550 54 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73  The solver works
29560 20 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65   by adding new e
29570 6e 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78  ntries to the "x
29580 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  " recursive tabl
29590 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65  e..Given prior e
295a0 6e 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75  ntries, the recu
295b0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69  rsive-select tri
295c0 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20  es to fill in a 
295d0 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74  single new.posit
295e0 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c  ion with all val
295f0 75 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ues between 1 an
29600 64 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c  d 9 that actuall
29610 79 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70  y work in that.p
29620 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f  osition.  The co
29630 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45  mplicated "NOT E
29640 58 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20  XISTS" subquery 
29650 69 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61  is the magic tha
29660 74 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68  t.figures out wh
29670 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
29680 68 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20  h candidate "s" 
29690 73 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69  string is a vali
296a0 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
296b0 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20  or not...<p>The 
296c0 66 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20  final answer is 
296d0 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  found by looking
296e0 20 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69   for a string wi
296f0 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68  th ind==0..If th
29700 65 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b  e original sudok
29710 75 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f  u problem did no
29720 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
29730 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74  solution, then.t
29740 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65  he query will re
29750 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c  turn all possibl
29760 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66  e solutions.  If
29770 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72   the original pr
29780 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76  oblem.was unsolv
29790 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f  able, then no ro
297a0 77 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  ws will be retur
297b0 6e 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  ned.  In this ca
297c0 73 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61  se, the unique.a
297d0 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63  nswer is:..<bloc
297e0 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31  kquote>.53467891
297f0 32 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32  2672195348198342
29800 35 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38  5678597614234268
29810 35 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36  5379171392485696
29820 31 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35  1537284287419635
29830 33 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63  345286179.</bloc
29840 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
29850 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d  solution was com
29860 70 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68  puted in less th
29870 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f  an 300 milliseco
29880 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a  nds on a modern.
29890 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68  workstation...<h
298a0 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e  3>Limitations An
298b0 64 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a  d Caveats</h3>..
298c0 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  <ul>.<li><p>.The
298d0 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
298e0 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
298f0 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  in a [CREATE TRI
29900 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  GGER]..<li><p>.T
29910 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d  he WITH clause m
29920 75 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68  ust appear at th
29930 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
29940 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45   top-level [SELE
29950 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  CT] statement.or
29960 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
29970 67 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e  g of a subquery.
29980 20 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73    The WITH claus
29990 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70  e cannot be prep
299a0 65 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63  ended to.the sec
299b0 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e  ond or subsequen
299c0 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
299d0 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
299e0 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c  d select]..<li><
299f0 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20  p>.The SQL:1999 
29a00 73 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68  spec requires th
29a10 61 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45  at the RECURSIVE
29a20 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20   keyword follow 
29a30 57 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48  WITH in any.WITH
29a40 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63   clause that inc
29a50 6c 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76  ludes a recursiv
29a60 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
29a70 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65  xpression.  Howe
29a80 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ver, for.compati
29a90 62 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53  bility with SqlS
29aa0 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65  erver and Oracle
29ab0 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
29ac0 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72  t enforce this r
29ad0 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ule..</ul>..<tcl
29ae0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
29af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29b30 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  #.Section SELECT
29b40 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20   select {SELECT 
29b50 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76  query}..Recursiv
29b60 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
29b70 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c  elect-stmt.</tcl
29b80 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
29b90 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
29ba0 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
29bb0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
29bc0 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
29bd0 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
29be0 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
29bf0 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
29c00 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
29c10 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  r of columns.  A
29c20 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
29c30 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a  t does not make.
29c40 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
29c50 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70  he database...<p
29c60 3e 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74  >The "[select-st
29c70 6d 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67  mt]" syntax diag
29c80 72 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70  ram above attemp
29c90 74 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75  ts to show as mu
29ca0 63 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  ch of the.SELECT
29cb0 20 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61   statement synta
29cc0 78 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e  x as possible in
29cd0 20 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61   a single diagra
29ce0 6d 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20  m, because some 
29cf0 72 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61  readers.find tha
29d00 74 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20  t helpful.  The 
29d10 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74  following "[fact
29d20 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
29d30 5d 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61  ]" is an alterna
29d40 74 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67  tive.syntax diag
29d50 72 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73  rams that expres
29d60 73 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e  ses the same syn
29d70 74 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f  tax but tries to
29d80 20 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61   break the synta
29d90 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61  x .down into sma
29da0 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74  ller chunks...<t
29db0 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
29dc0 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69  bleDiagram --ini
29dd0 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61  tially-hidden fa
29de0 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74  ctored-select-st
29df0 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c  mt select-core.<
29e00 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
29e10 68 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61  hat there are pa
29e20 74 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ths through the 
29e30 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
29e40 74 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c  that.are not all
29e50 6f 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65  owed in practice
29e60 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  .  Some examples
29e70 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41  :.<ul>.<li>A [VA
29e80 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
29e90 20 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c   be the first el
29ea0 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70  ement in a [comp
29eb0 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20  ound SELECT].   
29ec0 20 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49   that uses a [WI
29ed0 54 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20  TH] clause, but 
29ee0 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a [simple SELECT
29ef0 5d 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  ] that consists 
29f00 6f 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56  of.    just a [V
29f10 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61  ALUES] clause ca
29f20 6e 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64  nnot be preceded
29f30 20 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61   by a [WITH] cla
29f40 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49  use..<li>The [WI
29f50 54 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20  TH] clause must 
29f60 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72  occur on the fir
29f70 73 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b  st SELECT of a [
29f80 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
29f90 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20  ..    It cannot 
29fa0 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75  follow a [compou
29fb0 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f  nd-operator]..</
29fc0 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74  ul>.These and ot
29fd0 68 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74  her similar synt
29fe0 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
29ff0 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e  are described in
2a000 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54   the text...<p>T
2a010 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2a020 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
2a030 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
2a040 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
2a050 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
2a060 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
2a070 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
2a080 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
2a090 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
2a0a0 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
2a0b0 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
2a0c0 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
2a0d0 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
2a0e0 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
2a0f0 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
2a100 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
2a110 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
2a120 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
2a130 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
2a140 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
2a150 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
2a160 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
2a170 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
2a180 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
2a190 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
2a1a0 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74  fic process...<t
2a1b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
2a1c0 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d  impleselect {sim
2a1d0 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c  ple SELECT}</tcl
2a1e0 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  >.<h3>Simple Sel
2a1f0 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
2a200 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  h3>..<p>The core
2a210 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
2a220 74 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d  tement is a "sim
2a230 70 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77  ple SELECT" show
2a240 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74  n by the.[select
2a250 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70  -core] and [simp
2a260 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20  le-select-stmt] 
2a270 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
2a280 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63  below.  .In prac
2a290 74 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43  tice, most SELEC
2a2a0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  T statements are
2a2b0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2a2c0 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c  tatements...<tcl
2a2d0 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
2a2e0 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d  eDiagram simple-
2a2f0 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
2a300 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
2a310 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68  <p>Generating th
2a320 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
2a330 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
2a340 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
2a350 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
2a360 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
2a370 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
2a380 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
2a390 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
2a3a0 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
2a3b0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
2a3c0 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
2a3d0 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
2a3e0 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
2a3f0 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
2a400 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
2a410 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
2a420 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
2a430 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
2a440 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
2a450 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2a460 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20  y the FROM.     
2a470 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e    clause..  <li>
2a480 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73   <p>[WHERE claus
2a490 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
2a4a0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
2a4b0 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20   filtered using 
2a4c0 74 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20  the WHERE.      
2a4d0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2a4e0 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  on.  .  <li> <p>
2a4f0 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20  [GROUP BY|GROUP 
2a500 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72  BY, HAVING and r
2a510 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70  esult-column exp
2a520 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73  ression] process
2a530 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65  ing: .       The
2a540 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2a550 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20  ows is computed 
2a560 62 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74  by aggregating t
2a570 68 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e  he data accordin
2a580 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20  g to.       any 
2a590 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2a5a0 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20  and calculating 
2a5b0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65  the result-set e
2a5c0 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74  xpressions for t
2a5d0 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f  he.       rows o
2a5e0 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
2a5f0 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a  nput dataset.  .
2a600 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49    <li> <p>[DISTI
2a610 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c  NCT|DISTINCT/ALL
2a620 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73   keyword] proces
2a630 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65  sing: If the que
2a640 72 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a  ry is a "SELECT.
2a650 20 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22         DISTINCT"
2a660 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74   query, duplicat
2a670 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
2a680 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed from the set 
2a690 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a  of result rows..
2a6a0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </ol>..<p>There 
2a6b0 61 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66  are two types of
2a6c0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2a6d0 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65  tatement - aggre
2a6e0 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67  gate and .non-ag
2a6f0 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e  gregate queries.
2a700 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   ^A simple SELEC
2a710 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
2a720 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2a730 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73  y if.it contains
2a740 20 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20   either a GROUP 
2a750 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65  BY clause or one
2a760 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
2a770 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20  te functions.in 
2a780 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20  the result-set. 
2a790 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61  ^Otherwise, if a
2a7a0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63   simple SELECT c
2a7b0 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65  ontains no aggre
2a7c0 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f  gate.functions o
2a7d0 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
2a7e0 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e  use, it is a non
2a7f0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2a800 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65  ...<p><b>1. Dete
2a810 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70  rmination of inp
2a820 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c  ut data (FROM cl
2a830 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29  ause processing)
2a840 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2a850 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73  agment fromclaus
2a860 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
2a870 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63  keywords {FROM c
2a880 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
2a890 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20  >The input data 
2a8a0 75 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  used by a simple
2a8b0 20 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73   SELECT query is
2a8c0 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f   a set of <i>N</
2a8d0 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69  i> rows .each <i
2a8e0 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77  >M</i> columns w
2a8f0 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  ide...<p>^(If th
2a900 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
2a910 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
2a920 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2a930 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
2a940 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73  e .input data is
2a950 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
2a960 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f  ngle row zero co
2a970 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e  lumns wide)^ (i.
2a980 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e  e. <i>N</i>=1 an
2a990 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a  d.<i>M</i>=0)...
2a9a0 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61  <p>If a FROM cla
2a9b0 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
2a9c0 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68  , the data on wh
2a9d0 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  ich a simple SEL
2a9e0 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74  ECT query.operat
2a9f0 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  es comes from th
2aa00 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  e one or more ta
2aa10 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
2aa20 65 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65  es (SELECT state
2aa30 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68  ments.in parenth
2aa40 65 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20  esis) specified 
2aa50 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
2aa60 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73  OM keyword. ^A s
2aa70 75 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65  ubquery specifie
2aa80 64 0a 69 6e 20 74 68 65 20 3c 79 79 74 65 72 6d  d.in the <yyterm
2aa90 3e 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65  >table-or-subque
2aaa0 72 79 3c 2f 79 79 74 65 72 6d 3e 20 66 6f 6c 6c  ry</yyterm> foll
2aab0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63  owing the FROM c
2aac0 6c 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70  lause in a .simp
2aad0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2aae0 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61  ent is.handled a
2aaf0 73 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61  s if it was a ta
2ab00 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
2ab10 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
2ab20 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
2ab30 65 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65  e.subquery state
2ab40 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75  ment. ^Each colu
2ab50 6d 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  mn of the subque
2ab60 72 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c  ry has the.[coll
2ab70 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20  ation|collation 
2ab80 73 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61  sequence] and [a
2ab90 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
2aba0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
2abb0 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20  pression.in the 
2abc0 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65  subquery stateme
2abd0 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72  nt...<p>^If ther
2abe0 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67  e is only a sing
2abf0 6c 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  le table or subq
2ac00 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
2ac10 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68  .clause, then th
2ac20 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65  e input data use
2ac30 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
2ac40 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65  statement is the
2ac50 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
2ac60 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49  .named table. ^I
2ac70 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
2ac80 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f  than one table o
2ac90 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52  r subquery in FR
2aca0 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74  OM clause.then t
2acb0 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61  he contents of a
2acc0 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72  ll tables and/or
2acd0 20 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20   subqueries.are 
2ace0 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  joined into a si
2acf0 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72  ngle dataset for
2ad00 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
2ad10 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
2ad20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63  operate on..Exac
2ad30 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61  tly how the data
2ad40 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70   is combined dep
2ad50 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63  ends on the spec
2ad60 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61  ific [join-opera
2ad70 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63  tor] and.[join-c
2ad80 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20  onstraint] used 
2ad90 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74  to connect the t
2ada0 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
2adb0 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c  ies together...<
2adc0 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53  p>All joins in S
2add0 51 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20  QLite are based 
2ade0 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  on the cartesian
2adf0 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
2ae00 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68  left and.right-h
2ae10 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54  and datasets. ^T
2ae20 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
2ae30 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2ae40 75 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c  uct dataset are,
2ae50 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20   in .order, all 
2ae60 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
2ae70 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
2ae80 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79  aset followed by
2ae90 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73   all the columns
2aea0 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61  .of the right-ha
2aeb0 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65  nd dataset. ^The
2aec0 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74  re is a row in t
2aed0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2aee0 64 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72  duct dataset.for
2aef0 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67  med by combining
2af00 20 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d   each unique com
2af10 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f  bination of a ro
2af20 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d  w from the left-
2af30 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d  hand .and right-
2af40 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e  hand datasets. ^
2af50 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
2af60 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   if the left-han
2af70 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73  d dataset consis
2af80 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c  ts of.<i>N<sub><
2af90 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2afa0 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77  l></sub></i> row
2afb0 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c  s of .<i>M<sub><
2afc0 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2afd0 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
2afe0 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69  umns, and the ri
2aff0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
2b000 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d   of.<i>N<sub><sm
2b010 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
2b020 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
2b030 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d   of.<i>M<sub><sm
2b040 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
2b050 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
2b060 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61  mns, then the ca
2b070 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2b080 69 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20  is a.dataset of 
2b090 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
2b0a0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
2b0b0 75 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e  ub>&times;N<sub>
2b0c0 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2b0d0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72  all></sub></i>.r
2b0e0 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69  ows, each contai
2b0f0 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c  ning .<i>M<sub><
2b100 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2b110 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c  l></sub>+M<sub><
2b120 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
2b130 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f  ll></sub></i> co
2b140 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66  lumns.)^..<p>^If
2b150 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
2b160 6f 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  or is "CROSS JOI
2b170 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
2b180 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
2b190 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
2b1a0 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
2b1b0 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2b1c0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
2b1d0 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
2b1e0 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
2b1f0 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
2b200 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
2b210 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
2b220 49 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  If join-operator
2b230 20 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72   does have ON or
2b240 20 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20   USING clauses, 
2b250 74 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65  those are handle
2b260 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74  d according to.t
2b270 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c  he following bul
2b280 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c  let points:..<ul
2b290 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  >.  <li> <p>^(If
2b2a0 20 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20   there is an ON 
2b2b0 63 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20  clause then the 
2b2c0 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ON expression is
2b2d0 0a 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65  .       evaluate
2b2e0 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
2b2f0 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  f the cartesian 
2b300 70 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20  product as a .  
2b310 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78       [boolean ex
2b320 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2b330 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2b340 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  he expression ev
2b350 61 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20  aluates to .    
2b360 20 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c     true are incl
2b370 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
2b380 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e  taset.)^..  <li>
2b390 20 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73   <p>^If there is
2b3a0 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a   a USING clause.
2b3b0 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68         then each
2b3c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
2b3d0 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d  ames specified m
2b3e0 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
2b3f0 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20   datasets to .  
2b400 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65       both the le
2b410 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20  ft and right of 
2b420 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2b430 72 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61  r. ^(For each pa
2b440 69 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20  ir of named.    
2b450 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20     columns, the 
2b460 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e  expression "lhs.
2b470 58 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76  X = rhs.X" is ev
2b480 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
2b490 20 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74   row of.       t
2b4a0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2b4b0 64 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65  duct as a [boole
2b4c0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
2b4d0 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68  Only rows for wh
2b4e0 69 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73  ich.       all s
2b4f0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20  uch expressions 
2b500 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75  evaluates to tru
2b510 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66  e are included f
2b520 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72  rom the.       r
2b530 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68  esult set.)^ ^Wh
2b540 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c  en comparing val
2b550 75 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20  ues as a result 
2b560 6f 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  of a USING claus
2b570 65 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f  e, the.       no
2b580 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68  rmal rules for h
2b590 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69  andling affiniti
2b5a0 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  es, collation se
2b5b0 71 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c  quences and NULL
2b5c0 0a 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69  .       values i
2b5d0 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70  n comparisons ap
2b5e0 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e  ply. ^The column
2b5f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
2b600 74 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  t on the.       
2b610 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
2b620 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61  f the join-opera
2b630 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tor is considere
2b640 64 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c  d to be on the l
2b650 65 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  eft-hand.       
2b660 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
2b670 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20  arison operator 
2b680 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70  (=) for the purp
2b690 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  oses of collatio
2b6a0 6e 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e  n .       sequen
2b6b0 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20  ce and affinity 
2b6c0 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20  precedence...   
2b6d0 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68      <p>^For each
2b6e0 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73   pair of columns
2b6f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2b700 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
2b710 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  he column.      
2b720 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
2b730 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20  hand dataset is 
2b740 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
2b750 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e   joined dataset.
2b760 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69   ^This .       i
2b770 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  s the only diffe
2b780 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
2b790 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64  USING clause and
2b7a0 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
2b7b0 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72  ON.       constr
2b7c0 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  aint...  <li> <p
2b7d0 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41  >^(If the NATURA
2b7e0 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20  L keyword is in 
2b7f0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2b800 72 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20  r then an.      
2b810 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20   implicit USING 
2b820 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20  clause is added 
2b830 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  to the join-cons
2b840 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70  traints. The imp
2b850 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49  licit.       USI
2b860 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  NG clause contai
2b870 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  ns each of the c
2b880 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
2b890 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a   appear in both.
2b8a0 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20         the left 
2b8b0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69  and right-hand i
2b8c0 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e  nput datasets.)^
2b8d0 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e   ^If the left an
2b8e0 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20  d right-hand.   
2b8f0 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65      input datase
2b900 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f  ts feature no co
2b910 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  mmon column name
2b920 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55  s, then the NATU
2b930 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20  RAL keyword.    
2b940 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74     has no effect
2b950 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
2b960 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20  of the join. ^A 
2b970 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75  USING or ON clau
2b980 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f  se may.       no
2b990 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20  t be added to a 
2b9a0 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66  join that specif
2b9b0 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20  ies the NATURAL 
2b9c0 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e  keyword...  <li>
2b9d0 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69   <p>^(If the joi
2b9e0 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  n-operator is a 
2b9f0 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22  "LEFT JOIN" or "
2ba00 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22  LEFT OUTER JOIN"
2ba10 2c 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66  , then.       af
2ba20 74 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f  ter.       the O
2ba30 4e 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65  N or USING filte
2ba40 72 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76  ring clauses hav
2ba50 65 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20  e been applied, 
2ba60 61 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20  an extra row is 
2ba70 0a 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f  .       added to
2ba80 20 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20   the output for 
2ba90 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
2baa0 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61  original left-ha
2bab0 6e 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20  nd input .      
2bac0 20 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f   dataset that co
2bad0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20  rresponds to no 
2bae0 72 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74  rows at all in t
2baf0 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20  he composite.   
2bb00 20 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20      dataset (if 
2bb10 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64  any).)^ ^The add
2bb20 65 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20  ed rows contain 
2bb30 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
2bb40 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20  he columns.     
2bb50 20 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72    that would nor
2bb60 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61  mally contain va
2bb70 6c 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d  lues copied from
2bb80 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2bb90 69 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74  input.       dat
2bba0 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c  aset.  .</ul>..<
2bbb0 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68  p>^(When more th
2bbc0 61 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72  an two tables ar
2bbd0 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65  e joined togethe
2bbe0 72 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46  r as part of a F
2bbf0 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20  ROM clause,.the 
2bc00 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20  join operations 
2bc10 61 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e  are processed in
2bc20 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74   order from left
2bc30 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74   to right. In ot
2bc40 68 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20  her .words, the 
2bc50 46 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a  FROM clause (A j
2bc60 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d  oin-op-1 B join-
2bc70 6f 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75  op-2 C) is compu
2bc80 74 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e  ted as .((A join
2bc90 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70  -op-1 B) join-op
2bca0 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68  -2 C).)^..<tcl>h
2bcb0 64 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73  d_fragment cross
2bcc0 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65  join {treats the
2bcd0 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72   CROSS JOIN oper
2bce0 61 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c  ator specially}<
2bcf0 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65  /tcl>.<p><b>Side
2bd00 20 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68   note: Special h
2bd10 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
2bd20 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72   JOIN.</b>.^Ther
2bd30 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
2bd40 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  ce between the "
2bd50 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
2bd60 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e  IN" and "," join
2bd70 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79  .operators. They
2bd80 20 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20   are completely 
2bd90 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20  interchangeable 
2bda0 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65  in SQLite..^(The
2bdb0 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f   "CROSS JOIN" jo
2bdc0 69 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64  in operator prod
2bdd0 75 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65  uces the same re
2bde0 73 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e  sult as the ."IN
2bdf0 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e  NER JOIN", "JOIN
2be00 22 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74  " and "," operat
2be10 6f 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b  ors)^, but is .[
2be20 43 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c  CROSS JOIN|handl
2be30 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62  ed differently b
2be40 79 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  y the query opti
2be50 6d 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69  mizer].in that i
2be60 74 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71  t prevents the q
2be70 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66  uery optimizer f
2be80 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74  rom reordering.t
2be90 68 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  he tables in the
2bea0 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69   join.  An appli
2beb0 63 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65  cation programme
2bec0 72 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52  r can use the CR
2bed0 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74  OSS JOIN .operat
2bee0 6f 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69  or to directly i
2bef0 6e 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67  nfluence the alg
2bf00 6f 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63  orithm that is c
2bf10 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65  hosen to impleme
2bf20 6e 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  nt.the SELECT st
2bf30 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20  atement.  Avoid 
2bf40 75 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e  using CROSS JOIN
2bf50 20 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69   except in speci
2bf60 66 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a  fic situations .
2bf70 77 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e  where manual con
2bf80 74 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72  trol of the quer
2bf90 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64  y optimizer is d
2bfa0 65 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75  esired.  Avoid u
2bfb0 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20  sing.CROSS JOIN 
2bfc0 65 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76  early in the dev
2bfd0 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61  elopment of an a
2bfe0 70 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f  pplication as do
2bff0 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68  ing so is.a <a h
2c000 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63  ref="http://c2.c
2c010 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d  om/cgi/wiki?Prem
2c020 61 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f  atureOptimizatio
2c030 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74  n">premature.opt
2c040 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20  imization</a>.  
2c050 54 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64  The special hand
2c060 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
2c070 49 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d  IN is an SQLite-
2c080 73 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65  specific.feature
2c090 20 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61   and is not a pa
2c0a0 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
2c0b0 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63  QL..       ..<tc
2c0c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68  l>hd_fragment wh
2c0d0 65 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a  ereclause</tcl>.
2c0e0 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
2c0f0 20 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c   {WHERE clause}<
2c100 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57  /tcl>.<p><b>2. W
2c110 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74  HERE clause filt
2c120 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e  ering.</b>..<p>^
2c130 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  (If a WHERE clau
2c140 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
2c150 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65   the WHERE expre
2c160 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
2c170 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77  ed for .each row
2c180 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
2c190 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ta as a [boolean
2c1a0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e   expression]. On
2c1b0 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ly rows for whic
2c1c0 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  h the.WHERE clau
2c1d0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  se expression ev
2c1e0 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20  aluates to true 
2c1f0 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f  are included fro
2c200 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65  m the dataset be
2c210 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e  fore.continuing.
2c220 29 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63  )^  Rows are exc
2c230 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72  luded from the r
2c240 65 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45  esult if the WHE
2c250 52 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61  RE clause.evalua
2c260 74 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61  tes to either fa
2c270 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70  lse or NULL...<p
2c280 3e 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49  >For a JOIN or I
2c290 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f  NNER JOIN or CRO
2c2a0 53 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69  SS JOIN, there i
2c2b0 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
2c2c0 62 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74  between .a const
2c2d0 72 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  raint expression
2c2e0 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2c2f0 61 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20  ause and one in 
2c300 74 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20  the ON clause.  
2c310 48 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c  However,.for a L
2c320 45 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54  EFT JOIN or LEFT
2c330 20 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65   OUTER JOIN, the
2c340 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76   difference is v
2c350 65 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20  ery important.  
2c360 0a 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c  .In a LEFT JOIN,
2c370 0a 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20  .the extra NULL 
2c380 72 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68  row for the righ
2c390 74 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20  t-hand table is 
2c3a0 61 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63  added after ON c
2c3b0 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
2c3c0 0a 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52  .but before WHER
2c3d0 45 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  E clause process
2c3e0 69 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69  ing.  A constrai
2c3f0 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nt of the form "
2c400 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a  left.x=right.y".
2c410 69 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20  in an ON clause 
2c420 77 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61  will therefore a
2c430 6c 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65  llow through the
2c440 20 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20   added all-NULL 
2c450 72 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68  rows of the.righ
2c460 74 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66  t table.  But if
2c470 20 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74   that same const
2c480 72 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20  raint is in the 
2c490 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e  WHERE clause a N
2c4a0 55 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22  ULL in."right.y"
2c4b0 20 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68   will prevent th
2c4c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65  e expression "le
2c4d0 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72  ft.x=right.y" fr
2c4e0 6f 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61  om being true, a
2c4f0 6e 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20  nd.thus exclude 
2c500 74 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68  that row from th
2c510 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62  e output...<p><b
2c520 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f  >3. Generation o
2c530 66 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  f the set of res
2c540 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74  ult rows.</b>.<t
2c550 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
2c560 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c  esultset</tcl>.<
2c570 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2c580 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72  {result-set expr
2c590 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20  essions} {GROUP 
2c5a0 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e  BY}</tcl>..<p>On
2c5b0 63 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  ce the input dat
2c5c0 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20  a from the FROM 
2c5d0 63 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20  clause has been 
2c5e0 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a  filtered by the.
2c5f0 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
2c600 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29  ression (if any)
2c610 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  , the set of res
2c620 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65  ult rows for the
2c630 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20   simple .SELECT 
2c640 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20  are calculated. 
2c650 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73  Exactly how this
2c660 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73   is done depends
2c670 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
2c680 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69  simple .SELECT i
2c690 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f  s an aggregate o
2c6a0 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  r non-aggregate 
2c6b0 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68  query, and wheth
2c6c0 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55  er or not a GROU
2c6d0 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20  P.BY clause was 
2c6e0 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20  specified...<p> 
2c6f0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
2c700 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20  essions between 
2c710 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46  the SELECT and F
2c720 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20  ROM keywords is 
2c730 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73  known as.the res
2c740 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2c750 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75  ist.  ^If a resu
2c760 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  lt expression is
2c770 20 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70   the special exp
2c780 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e  ression."*" then
2c790 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   all columns in 
2c7a0 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61  the input data a
2c7b0 72 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  re substituted f
2c7c0 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72  or that one expr
2c7d0 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65  ession..^(If the
2c7e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
2c7f0 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61  he alias of a ta
2c800 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2c810 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
2c820 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22  se.followed by "
2c830 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c  .*" then all col
2c840 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61  umns from the na
2c850 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62  med table or sub
2c860 71 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69  query are.substi
2c870 74 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69  tuted for the si
2c880 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  ngle expression.
2c890 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72  )^ ^(It is an er
2c8a0 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
2c8b0 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78   or."alias.*" ex
2c8c0 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20  pression in any 
2c8d0 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68  context other th
2c8e0 61 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  an a result expr
2c8f0 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e  ession list.)^.^
2c900 28 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65  (It is also an e
2c910 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a  rror to use a "*
2c920 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65  " or "alias.*" e
2c930 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73  xpression in a s
2c940 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65  imple SELECT.que
2c950 72 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ry that does not
2c960 20 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61   have a FROM cla
2c970 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68  use.)^..<p> ^(Th
2c980 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
2c990 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20  mns in the rows 
2c9a0 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69  returned by a si
2c9b0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2c9c0 65 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74  ement.is equal t
2c9d0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2c9e0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2c9f0 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2ca00 73 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a  sion list after.
2ca10 73 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20  substitution of 
2ca20 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78  * and alias.* ex
2ca30 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63  pressions.)^ Eac
2ca40 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  h result row is 
2ca50 63 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76  calculated by.ev
2ca60 61 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70  aluating the exp
2ca70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2ca80 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2ca90 6e 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70  n list with resp
2caa0 65 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20  ect to a.single 
2cab0 72 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74  row of input dat
2cac0 61 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67  a or, for aggreg
2cad0 61 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74  ate queries, wit
2cae0 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67  h respect to a g
2caf0 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c  roup.of rows...<
2cb00 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  ul>.  <li><p>^If
2cb10 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2cb20 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f  ement is <b>a no
2cb30 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
2cb40 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20  y</b>, then .   
2cb50 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
2cb60 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2cb70 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69  xpression list i
2cb80 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2cb90 65 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20  each row in.    
2cba0 74 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74  the dataset filt
2cbb0 65 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52  ered by the WHER
2cbc0 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69  E clause...  <li
2cbd0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
2cbe0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2cbf0 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20  <b>an aggregate 
2cc00 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20  query without a 
2cc10 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
2cc20 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
2cc30 63 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70  ch aggregate exp
2cc40 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
2cc50 65 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20  esult-set is .  
2cc60 20 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65    evaluated once
2cc70 20 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69   across the enti
2cc80 72 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63  re dataset. ^Eac
2cc90 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  h non-aggregate 
2cca0 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69  expression.    i
2ccb0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2ccc0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
2ccd0 63 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72  ce for an arbitr
2cce0 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2ccf0 6f 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61  ow of.    the da
2cd00 74 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65  taset. ^The same
2cd10 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
2cd20 65 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65  ected row is use
2cd30 64 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e  d for each.    n
2cd40 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2cd50 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66  ression. ^Or, if
2cd60 20 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e   the dataset con
2cd70 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c  tains zero rows,
2cd80 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20   then .    each 
2cd90 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
2cda0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
2cdb0 75 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20  uated against a 
2cdc0 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20  row consisting. 
2cdd0 20 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e     entirely of N
2cde0 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20  ULL values...   
2cdf0 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72  <p>^The single r
2ce00 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  ow of result-set
2ce10 20 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79   data created by
2ce20 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2ce30 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e  aggregate.    an
2ce40 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  d non-aggregate 
2ce50 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2ce60 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f  he result-set fo
2ce70 72 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  rms the result o
2ce80 66 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61  f an.    aggrega
2ce90 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
2cea0 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2ceb0 73 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74  se. ^An aggregat
2cec0 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
2ced0 61 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63  a.    GROUP BY c
2cee0 6c 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74  lause always ret
2cef0 75 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  urns exactly one
2cf00 20 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76   row of data, ev
2cf10 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
2cf20 20 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66      zero rows of
2cf30 20 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20   input data...  
2cf40 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20  <li><p>^(If the 
2cf50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2cf60 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
2cf70 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
2cf80 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62   GROUP.    BY</b
2cf90 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65  > clause, then e
2cfa0 61 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65  ach of the expre
2cfb0 73 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64  ssions specified
2cfc0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a   as part of the.
2cfd0 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61      GROUP BY cla
2cfe0 75 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64  use is evaluated
2cff0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
2d000 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61   the dataset. Ea
2d010 63 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68  ch row.    is th
2d020 65 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61  en assigned to a
2d030 20 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f   "group" based o
2d040 6e 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72  n the results; r
2d050 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20  ows for which.  
2d060 20 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66    the results of
2d070 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2d080 47 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73  GROUP BY express
2d090 69 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d  ions are the sam
2d0a0 65 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e  e get.    assign
2d0b0 65 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67  ed to the same g
2d0c0 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65  roup.)^ ^For the
2d0d0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f   purposes of gro
2d0e0 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c  uping rows, NULL
2d0f0 20 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65   .    values are
2d100 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
2d110 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75  l. ^The usual ru
2d120 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69  les for [collati
2d130 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20  on|selecting a. 
2d140 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71     collation seq
2d150 75 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63  uence] with whic
2d160 68 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  h to compare tex
2d170 74 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77  t values apply w
2d180 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20  hen evaluating. 
2d190 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69     expressions i
2d1a0 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  n a GROUP BY cla
2d1b0 75 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65  use.  ^The expre
2d1c0 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52  ssions in the GR
2d1d0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20  OUP BY clause.  
2d1e0 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d    do <em>not</em
2d1f0 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70  > have to be exp
2d200 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70  ressions that ap
2d210 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75  pear in the resu
2d220 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70  lt. ^The.    exp
2d230 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
2d240 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61  OUP BY clause ma
2d250 79 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61  y not be aggrega
2d260 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a  te expressions..
2d270 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48  .    <p>^(If a H
2d280 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2d290 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73  specified, it is
2d2a0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2d2b0 66 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a  for each group .
2d2c0 20 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61      of rows as a
2d2d0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
2d2e0 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65  sion]. If the re
2d2f0 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
2d300 6e 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e  ng the.    HAVIN
2d310 47 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73  G clause is fals
2d320 65 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20  e, the group is 
2d330 64 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66  discarded.)^ ^If
2d340 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   the HAVING clau
2d350 73 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67  se is.    an agg
2d360 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2d370 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2d380 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f  ed across all ro
2d390 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
2d3a0 20 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e   ^If.    a HAVIN
2d3b0 47 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f  G clause is a no
2d3c0 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2d3d0 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76  ession, it is ev
2d3e0 61 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73  aluated with res
2d3f0 70 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61  pect.    to an a
2d400 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
2d410 74 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  ted row from the
2d420 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41   group.  ^The HA
2d430 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20  VING expression 
2d440 6d 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f  may.    refer to
2d450 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67   values, even ag
2d460 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2d470 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  s, that are not 
2d480 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f  in the result.</
2d490 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  p>..    <p>^Each
2d4a0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2d4b0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2d4c0 20 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20   then evaluated 
2d4d0 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20  once for each.  
2d4e0 20 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e    group of rows.
2d4f0 20 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73   ^If the express
2d500 69 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67  ion is an aggreg
2d510 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2d520 69 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75  it is .    evalu
2d530 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20  ated across all 
2d540 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
2d550 70 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  p. ^Otherwise, i
2d560 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  t is evaluated a
2d570 67 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e  gainst.    a sin
2d580 67 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20  gle arbitrarily 
2d590 63 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20  chosen row from 
2d5a0 77 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70  within the group
2d5b0 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d  . ^If there is m
2d5c0 6f 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65  ore.    than one
2d5d0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2d5e0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
2d5f0 20 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65   result-set, the
2d600 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65  n all such.    e
2d610 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
2d620 76 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65  valuated for the
2d630 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20   same row...    
2d640 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f  <p>^Each group o
2d650 66 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20  f input dataset 
2d660 72 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73  rows contributes
2d670 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f   a single row to
2d680 20 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66   the .    set of
2d690 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53   result rows. ^S
2d6a0 75 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72  ubject to filter
2d6b0 69 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77  ing associated w
2d6c0 69 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54  ith the DISTINCT
2d6d0 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68  .    keyword, th
2d6e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2d6f0 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20   returned by an 
2d700 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2d710 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20  with a GROUP.   
2d720 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68   BY clause is th
2d730 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
2d740 6d 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f  mber of groups o
2d750 66 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20  f rows produced 
2d760 62 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20  by applying.    
2d770 74 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64  the GROUP BY and
2d780 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20   HAVING clauses 
2d790 74 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  to the filtered 
2d7a0 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c  input dataset..<
2d7b0 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ul>..<tcl>hd_fr
2d7c0 61 67 6d 65 6e 74 20 62 61 72 65 61 67 67 20 7b  agment bareagg {
2d7d0 62 61 72 65 20 61 67 67 72 65 67 61 74 65 20 74  bare aggregate t
2d7e0 65 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c  erms}</tcl>.<p><
2d7f0 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 42 61 72  b>Side note: Bar
2d800 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  e columns in an 
2d810 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65  aggregate querie
2d820 73 2e 3c 2f 62 3e 0a 54 68 65 20 75 73 75 61 6c  s.</b>.The usual
2d830 20 63 61 73 65 20 69 73 20 74 68 61 74 20 61 6c   case is that al
2d840 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  l column names i
2d850 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  n an aggregate q
2d860 75 65 72 79 20 61 72 65 20 65 69 74 68 65 72 0a  uery are either.
2d870 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 5b 61 67  arguments to [ag
2d880 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 20  gfunc|aggregate 
2d890 66 75 6e 63 74 69 6f 6e 73 5d 20 6f 72 20 65 6c  functions] or el
2d8a0 73 65 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  se appear in the
2d8b0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2d8c0 2e 0a 41 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  ..A result colum
2d8d0 6e 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  n which contains
2d8e0 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
2d8f0 68 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69  hat is not withi
2d900 6e 20 61 6e 0a 61 67 67 72 65 67 61 74 65 20 66  n an.aggregate f
2d910 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 61 74  unction and that
2d920 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72   does not appear
2d930 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
2d940 20 63 6c 61 75 73 65 20 28 69 66 0a 6f 6e 65 20   clause (if.one 
2d950 65 78 69 73 74 73 29 20 69 73 20 63 61 6c 6c 65  exists) is calle
2d960 64 20 61 20 22 62 61 72 65 22 20 63 6f 6c 75 6d  d a "bare" colum
2d970 6e 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f  n..Example:.<blo
2d980 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45  ckquote><pre>.SE
2d990 4c 45 43 54 20 61 2c 20 62 2c 20 73 75 6d 28 63  LECT a, b, sum(c
2d9a0 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55  ) FROM tab1 GROU
2d9b0 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  P BY a;.</pre></
2d9c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 3e 49  blockquote>.<p>I
2d9d0 6e 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76  n the query abov
2d9e0 65 2c 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d  e, the "a" colum
2d9f0 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
2da00 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2da10 0a 61 6e 64 20 73 6f 20 65 61 63 68 20 72 6f 77  .and so each row
2da20 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63   of the output c
2da30 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 66 20 74  ontains one of t
2da40 68 65 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  he distinct valu
2da50 65 73 20 66 6f 72 0a 22 61 22 2e 20 20 54 68 65  es for."a".  The
2da60 20 22 63 22 20 63 6f 6c 75 6d 6e 20 69 73 20 63   "c" column is c
2da70 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
2da80 74 68 65 20 5b 73 75 6d 28 29 5d 20 61 67 67 72  the [sum()] aggr
2da90 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 61  egate function.a
2daa0 6e 64 20 73 6f 20 74 68 61 74 20 6f 75 74 70 75  nd so that outpu
2dab0 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  t column is the 
2dac0 73 75 6d 20 6f 66 20 61 6c 6c 20 22 63 22 20 76  sum of all "c" v
2dad0 61 6c 75 65 73 20 69 6e 20 72 6f 77 73 20 74 68  alues in rows th
2dae0 61 74 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65  at.have the same
2daf0 20 76 61 6c 75 65 20 66 6f 72 20 22 61 22 2e 20   value for "a". 
2db00 20 42 75 74 20 77 68 61 74 20 69 73 20 74 68 65   But what is the
2db10 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 62   result of the b
2db20 61 72 65 20 0a 63 6f 6c 75 6d 6e 20 22 62 22 3f  are .column "b"?
2db30 20 54 68 65 20 61 6e 73 77 65 72 20 69 73 20 74   The answer is t
2db40 68 61 74 20 74 68 65 20 22 62 22 20 72 65 73 75  hat the "b" resu
2db50 6c 74 20 77 69 6c 6c 20 62 65 20 74 68 65 0a 76  lt will be the.v
2db60 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69 6e 20  alue for "b" in 
2db70 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
2db80 20 72 6f 77 73 20 74 68 61 74 20 66 6f 72 6d 20   rows that form 
2db90 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 54  the aggregate..T
2dba0 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 20 74 68  he problem is th
2dbb0 61 74 20 79 6f 75 20 75 73 75 61 6c 6c 79 20 64  at you usually d
2dbc0 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68 69 63 68  o not know which
2dbd0 20 69 6e 70 75 74 20 72 6f 77 20 69 73 20 75 73   input row is us
2dbe0 65 64 0a 74 6f 20 63 6f 6d 70 75 74 65 20 22 62  ed.to compute "b
2dbf0 22 2c 20 61 6e 64 20 73 6f 20 69 6e 20 6d 61 6e  ", and so in man
2dc00 79 20 63 61 73 65 73 20 74 68 65 20 76 61 6c 75  y cases the valu
2dc10 65 20 66 6f 72 20 22 62 22 20 69 73 20 75 6e 64  e for "b" is und
2dc20 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 3c 70 3e  efined..</p>.<p>
2dc30 0a 53 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73  .Special process
2dc40 69 6e 67 20 6f 63 63 75 72 73 20 6f 63 63 75 72  ing occurs occur
2dc50 73 20 77 68 65 6e 20 74 68 65 20 61 67 67 72 65  s when the aggre
2dc60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 73  gate function is
2dc70 20 0a 65 69 74 68 65 72 20 5b 6d 61 78 41 67 67   .either [maxAgg
2dc80 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b  Func|min()] or [
2dc90 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29  minAggFunc|max()
2dca0 5d 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c  ].  Example:.<bl
2dcb0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53  ockquote><pre>.S
2dcc0 45 4c 45 43 54 20 61 2c 20 62 2c 20 6d 61 78 28  ELECT a, b, max(
2dcd0 63 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f  c) FROM tab1 GRO
2dce0 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c  UP BY a;.</pre><
2dcf0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 57 68 65  /blockquote>.Whe
2dd00 6e 20 74 68 65 20 5b 6d 61 78 41 67 67 46 75 6e  n the [maxAggFun
2dd10 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d 69 6e  c|min()] or [min
2dd20 41 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 61  AggFunc|max()] a
2dd30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2dd40 6e 73 20 0a 61 72 65 20 75 73 65 64 20 69 6e 20  ns .are used in 
2dd50 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2dd60 72 79 2c 20 61 6c 6c 20 62 61 72 65 20 63 6f 6c  ry, all bare col
2dd70 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
2dd80 6c 74 20 73 65 74 20 0a 74 61 6b 65 20 76 61 6c  lt set .take val
2dd90 75 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e 70  ues from the inp
2dda0 75 74 0a 72 6f 77 20 77 68 69 63 68 20 61 6c 73  ut.row which als
2ddb0 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  o contains the m
2ddc0 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75  inimum or maximu
2ddd0 6d 2e 20 20 53 6f 20 69 6e 20 74 68 65 20 71 75  m.  So in the qu
2dde0 65 72 79 0a 61 62 6f 76 65 2c 20 74 68 65 20 76  ery.above, the v
2ddf0 61 6c 75 65 20 6f 66 20 74 68 65 20 22 62 22 20  alue of the "b" 
2de00 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6f 75  column in the ou
2de10 74 70 75 74 20 77 69 6c 6c 20 62 65 20 74 68 65  tput will be the
2de20 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 22 62   value of.the "b
2de30 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  " column in the 
2de40 69 6e 70 75 74 20 72 6f 77 20 74 68 61 74 20 68  input row that h
2de50 61 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 22  as the largest "
2de60 63 22 20 76 61 6c 75 65 2e 0a 54 68 65 72 65 20  c" value..There 
2de70 69 73 20 73 74 69 6c 6c 20 61 6e 20 61 6d 62 69  is still an ambi
2de80 67 75 69 74 79 20 69 66 20 74 77 6f 20 6f 72 20  guity if two or 
2de90 6d 6f 72 65 20 6f 66 20 74 68 65 20 69 6e 70 75  more of the inpu
2dea0 74 20 72 6f 77 73 20 68 61 76 65 20 74 68 65 0a  t rows have the.
2deb0 73 61 6d 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20  same minimum or 
2dec0 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 72  maximum value or
2ded0 20 69 66 20 74 68 65 20 71 75 65 72 79 20 63 6f   if the query co
2dee0 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
2def0 20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e 64 2f 6f   one.min() and/o
2df00 72 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  r max() aggregat
2df10 65 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 6e 6c 79  e function. Only
2df20 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 6d   the built-in [m
2df30 69 6e 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d  inAggFunc|min()]
2df40 20 0a 61 6e 64 20 5b 6d 61 78 41 67 67 46 75 6e   .and [maxAggFun
2df50 63 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f  c|max()] functio
2df60 6e 73 20 77 6f 72 6b 20 74 68 69 73 20 77 61 79  ns work this way
2df70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e  ..</p>..<p><b>4.
2df80 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c   Removal of dupl
2df90 69 63 61 74 65 20 72 6f 77 73 20 28 44 49 53 54  icate rows (DIST
2dfa0 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67 29  INCT processing)
2dfb0 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2dfc0 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74 3c  agment distinct<
2dfd0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
2dfe0 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43 54  ywords {DISTINCT
2dff0 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65  }</tcl>..<p>^One
2e000 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20 44   of the ALL or D
2e010 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 73  ISTINCT keywords
2e020 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20   may follow the 
2e030 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 69  SELECT keyword i
2e040 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45  n a .simple SELE
2e050 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49  CT statement. ^I
2e060 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  f the simple SEL
2e070 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20  ECT is a SELECT 
2e080 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e  ALL, then the.en
2e090 74 69 72 65 20 73 65 74 20 6f 66 20 72 65 73 75  tire set of resu
2e0a0 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65 74 75  lt rows are retu
2e0b0 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
2e0c0 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20  CT. ^If neither 
2e0d0 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54 20  ALL or.DISTINCT 
2e0e0 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68 65  are present, the
2e0f0 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
2e100 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65  s as if ALL were
2e110 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66   specified. .^If
2e120 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
2e130 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 44  CT is a SELECT D
2e140 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75  ISTINCT, then du
2e150 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65  plicate rows are
2e160 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68   removed.from th
2e170 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
2e180 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20 69  rows before it i
2e190 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72  s returned. ^For
2e1a0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
2e1b0 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69  .detecting dupli
2e1c0 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e  cate rows, two N
2e1d0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
2e1e0 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e1f0 65 71 75 61 6c 2e 20 5e 54 68 65 0a 5b 68 6f 77  equal. ^The.[how
2e200 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 64 65   collation is de
2e210 74 65 72 6d 69 6e 65 64 7c 75 73 75 61 6c 20 72  termined|usual r
2e220 75 6c 65 73 5d 20 61 70 70 6c 79 20 66 6f 72 20  ules] apply for 
2e230 73 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c  selecting a coll
2e240 61 74 69 6f 6e 0a 73 65 71 75 65 6e 63 65 20 74  ation.sequence t
2e250 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
2e260 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 0a 68 64  alues...<tcl>.hd
2e270 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75  _fragment compou
2e280 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  nd {compound sel
2e290 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71  ect} {compound q
2e2a0 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  uery} {compound 
2e2b0 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e  SELECT} {compoun
2e2c0 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c  d SELECTs}.</tcl
2e2d0 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53  >.<h3>Compound S
2e2e0 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73  elect Statements
2e2f0 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72  </h3>..<p>Two or
2e300 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45   more [simple SE
2e310 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
2e320 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65   may be connecte
2e330 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f  d together to fo
2e340 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  rm.a compound SE
2e350 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55  LECT using the U
2e360 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c  NION, UNION ALL,
2e370 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58   INTERSECT or EX
2e380 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61  CEPT operator,.a
2e390 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66  s shown by the f
2e3a0 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d  ollowing diagram
2e3b0 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  :..<tcl>.Recursi
2e3c0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
2e3d0 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d  compound-select-
2e3e0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2e3f0 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  ^In a compound S
2e400 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63  ELECT, all the c
2e410 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43  onstituent SELEC
2e420 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74  Ts must return t
2e430 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20  he same .number 
2e440 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
2e450 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f  s. ^As the compo
2e460 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f  nents of a compo
2e470 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a  und SELECT must.
2e480 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  be simple SELECT
2e490 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65   statements, the
2e4a0 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69  y may not contai
2e4b0 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20  n [ORDER BY] or 
2e4c0 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e  [LIMIT] clauses.
2e4d0 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  .^[ORDER BY] and
2e4e0 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2e4f0 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20   may only occur 
2e500 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
2e510 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
2e520 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68  d.SELECT, and th
2e530 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66  en only if the f
2e540 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20  inal element of 
2e550 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20  the compound is 
2e560 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63  not a [VALUES] c
2e570 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f  lause...<p>^A co
2e580 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
2e590 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
2e5a0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
2e5b0 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
2e5c0 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
2e5d0 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
2e5e0 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
2e5f0 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
2e600 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
2e610 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
2e620 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
2e630 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
2e640 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
2e650 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
2e660 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
2e670 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2e680 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
2e690 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
2e6a0 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
2e6b0 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
2e6c0 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
2e6d0 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
2e6e0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
2e6f0 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
2e700 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
2e710 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
2e720 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
2e730 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
2e740 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
2e750 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
2e760 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
2e770 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2e780 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
2e790 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
2e7a0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
2e7b0 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
2e7c0 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
2e7d0 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
2e7e0 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
2e7f0 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
2e800 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2e810 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
2e820 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
2e830 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
2e840 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
2e850 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
2e860 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2e870 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
2e880 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
2e890 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
2e8a0 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
2e8b0 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
2e8c0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2e8d0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
2e8e0 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
2e8f0 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
2e900 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
2e910 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
2e920 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
2e930 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
2e940 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
2e950 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
2e960 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
2e970 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
2e980 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
2e990 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
2e9a0 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
2e9b0 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
2e9c0 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
2e9d0 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
2e9e0 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
2e9f0 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
2ea00 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
2ea10 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
2ea20 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
2ea30 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
2ea40 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
2ea50 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
2ea60 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
2ea70 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
2ea80 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
2ea90 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
2eaa0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
2eab0 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
2eac0 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
2ead0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2eae0 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
2eaf0 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
2eb00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2eb10 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
2eb20 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
2eb30 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
2eb40 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
2eb50 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
2eb60 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b  rby {order by} {
2eb70 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a  ORDER BY}</tcl>.
2eb80 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59  <h3>The ORDER BY
2eb90 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2eba0 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61  >If a SELECT sta
2ebb0 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75  tement that retu
2ebc0 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  rns more than on
2ebd0 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  e row does not h
2ebe0 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20  ave an.ORDER BY 
2ebf0 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65  clause, the orde
2ec00 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72  r in which the r
2ec10 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
2ec20 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f   is undefined..O
2ec30 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73  r, if a SELECT s
2ec40 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61  tatement does ha
2ec50 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  ve an ORDER BY c
2ec60 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
2ec70 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69  list of.expressi
2ec80 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ons attached to 
2ec90 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74  the ORDER BY det
2eca0 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72  ermine the order
2ecb0 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61   in which rows.a
2ecc0 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  re returned to t
2ecd0 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49  he user...<p>.^I
2ece0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2ecf0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2ed00 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f   only the last o
2ed10 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2ed20 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79  mple SELECT].may
2ed30 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2ed40 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20  Y clause. ^That 
2ed50 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2ed60 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73  will apply acros
2ed70 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f  s all elements o
2ed80 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20  f.the compound. 
2ed90 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ^If the right-mo
2eda0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2edb0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2edc0 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20  ] is a [VALUES] 
2edd0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20  clause,.then no 
2ede0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2edf0 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68  is allowed on th
2ee00 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  at statement....
2ee10 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72  <p>^Rows are fir
2ee20 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20  st sorted based 
2ee30 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2ee40 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
2ee50 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
2ee60 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44  ssion in the ORD
2ee70 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e  ER BY list, then
2ee80 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e   ties are broken
2ee90 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .by evaluating t
2eea0 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d  he second left-m
2eeb0 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ost expression a
2eec0 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72  nd so on. The or
2eed0 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f  der in which.two
2eee0 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
2eef0 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
2ef00 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
2ef10 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65  e to equal value
2ef20 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69  s are.returned i
2ef30 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61  s undefined. ^Ea
2ef40 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2ef50 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
2ef60 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
2ef70 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
2ef80 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d  keywords ASC (sm
2ef90 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65  aller values are
2efa0 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2efb0 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72   or DESC (larger
2efc0 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75  .values are retu
2efd0 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66  rned first). ^If
2efe0 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20   neither ASC or 
2eff0 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69  DESC are specifi
2f000 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72  ed, rows.are sor
2f010 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
2f020 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
2f030 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79   first) order by
2f040 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61   default...<p>Ea
2f050 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2f060 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
2f070 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
2f080 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
2f090 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2f0a0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2f0b0 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
2f0c0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78  er K then the.ex
2f0d0 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
2f0e0 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20  idered an alias 
2f0f0 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c  for the K-th col
2f100 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
2f110 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61  t set.(columns a
2f120 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  re numbered from
2f130 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73   left to right s
2f140 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e  tarting with 1).
2f150 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  ..<li><p>^If the
2f160 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2f170 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74  sion is an ident
2f180 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65  ifier that corre
2f190 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c  sponds to.the al
2f1a0 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68  ias of one of th
2f1b0 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e output columns
2f1c0 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
2f1d0 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
2f1e0 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72  red.an alias for
2f1f0 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c   that column...<
2f200 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2f210 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2f220 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2f230 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73  any other expres
2f240 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61  sion, it .is eva
2f250 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
2f260 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73  eturned value us
2f270 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20  ed to order the 
2f280 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66  output rows. ^If
2f290 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  .the SELECT stat
2f2a0 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c  ement is a simpl
2f2b0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61  e SELECT, then a
2f2c0 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63  n ORDER BY may c
2f2d0 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74  ontain any.arbit
2f2e0 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73  rary expressions
2f2f0 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
2f300 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63  he SELECT is a c
2f310 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
2f320 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78  then.ORDER BY ex
2f330 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
2f340 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74  re not aliases t
2f350 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  o output columns
2f360 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
2f370 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20  .the same as an 
2f380 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20  expression used 
2f390 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c  as an output col
2f3a0 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  umn..</ol>..<p>^
2f3b0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2f3c0 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73   of sorting rows
2f3d0 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  , values are com
2f3e0 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d  pared in the sam
2f3f0 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f  e way.as for [co
2f400 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73  mparison express
2f410 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61  ions]. The colla
2f420 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2f430 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77  ed to compare.tw
2f440 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
2f450 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66   determined as f
2f460 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20  ollows:..<ol>.  
2f470 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2f480 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2f490 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61  on is assigned a
2f4a0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2f4b0 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20  nce using.  the 
2f4c0 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45  postfix [COLLATE
2f4d0 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
2f4e0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
2f4f0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2f500 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c  e is.  used..  <
2f510 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2f520 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2f530 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2f540 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65  an alias to an e
2f550 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74  xpression.  that
2f560 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e   has been assign
2f570 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
2f580 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68  equence using th
2f590 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f  e postfix .  [CO
2f5a0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2f5b0 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
2f5c0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73  ion sequence ass
2f5d0 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69  igned to the ali
2f5e0 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f  ased.  expressio
2f5f0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69  n is used..  <li
2f600 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2f610 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2f620 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2f630 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69  column or an ali
2f640 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65  as of.  an expre
2f650 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20  ssion that is a 
2f660 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65  column, then the
2f670 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
2f680 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a  on sequence for.
2f690 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20    the column is 
2f6a0 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e  used. .  <li><p>
2f6b0 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
2f6c0 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69  [BINARY] collati
2f6d0 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  on sequence is u
2f6e0 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49  sed..</ol>..<p>I
2f6f0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2f700 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2f710 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2f720 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
2f730 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
2f740 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
2f750 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2f760 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a  f the compound..
2f770 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
2f780 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
2f790 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
2f7a0 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
2f7b0 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
2f7c0 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
2f7d0 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
2f7e0 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2f7f0 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
2f800 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
2f810 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
2f820 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
2f830 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
2f840 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
2f850 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
2f860 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
2f870 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
2f880 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
2f890 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
2f8a0 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
2f8b0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
2f8c0 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
2f8d0 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
2f8e0 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
2f8f0 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
2f900 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
2f910 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
2f920 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2f930 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
2f940 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
2f950 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
2f960 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
2f970 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
2f980 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
2f990 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
2f9a0 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
2f9b0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
2f9c0 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
2f9d0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
2f9e0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
2f9f0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2fa00 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20  ent limitoffset 
2fa10 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d  {LIMIT} {OFFSET}
2fa20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
2fa30 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e  IMIT clause</h3>
2fa40 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  ..<p>^The LIMIT 
2fa50 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74  clause is used t
2fa60 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72  o place an upper
2fa70 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
2fa80 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74  mber of rows.ret
2fa90 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74  urned by the ent
2faa0 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ire SELECT state
2fab0 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  ment...<p>^In a 
2fac0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2fad0 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74  ], only the.last
2fae0 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2faf0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d  simple SELECT] m
2fb00 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d  ay contain a LIM
2fb10 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e  IT clause.  .^In
2fb20 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2fb30 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54  ECT], .the LIMIT
2fb40 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
2fb50 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  to the entire co
2fb60 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74  mpound, not just
2fb70 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43   the final SELEC
2fb80 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74  T..^If the right
2fb90 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45  -most [simple SE
2fba0 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55  LECT] is a [VALU
2fbb0 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20  ES clause] then 
2fbc0 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  no LIMIT clause.
2fbd0 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e  is allowed...<p>
2fbe0 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
2fbf0 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
2fc00 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
2fc10 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
2fc20 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
2fc30 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
2fc40 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
2fc50 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
2fc60 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
2fc70 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
2fc80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2fc90 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
2fca0 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
2fcb0 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
2fcc0 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
2fcd0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
2fce0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
2fcf0 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
2fd00 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
2fd10 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
2fd20 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
2fd30 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
2fd40 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
2fd50 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
2fd60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
2fd70 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
2fd80 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
2fd90 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
2fda0 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
2fdb0 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
2fdc0 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
2fdd0 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
2fde0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
2fdf0 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
2fe00 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
2fe10 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
2fe20 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
2fe30 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
2fe40 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
2fe50 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
2fe60 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
2fe70 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
2fe80 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
2fe90 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
2fea0 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
2feb0 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
2fec0 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
2fed0 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
2fee0 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
2fef0 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
2ff00 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
2ff10 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
2ff20 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
2ff30 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
2ff40 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
2ff50 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
2ff60 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
2ff70 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
2ff80 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
2ff90 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
2ffa0 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
2ffb0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
2ffc0 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
2ffd0 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
2ffe0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
2fff0 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
30000 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
30010 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
30020 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
30030 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
30040 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
30050 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
30060 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
30070 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
30080 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
30090 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
300a0 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
300b0 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
300c0 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
300d0 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
300e0 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
300f0 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
30100 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
30110 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
30120 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
30130 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
30140 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
30150 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
30160 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
30170 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
30180 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
30190 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
301a0 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
301b0 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
301c0 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
301d0 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
301e0 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
301f0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
30200 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
30210 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
30220 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
30230 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
30240 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
30250 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
30260 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
30270 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
30280 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
30290 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
302a0 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72  MIT. .This rever
302b0 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65  sal of the offse
302c0 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69  t and limit is i
302d0 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20  ntentional.- it 
302e0 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
302f0 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68  ibility with oth
30300 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
30310 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72  systems..However
30320 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  , to avoid confu
30330 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  sion, programmer
30340 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65  s are strongly e
30350 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65  ncouraged to use
30360 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65  .the form of the
30370 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68   LIMIT clause th
30380 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46 46  at uses the "OFF
30390 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64  SET" keyword and
303a0 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c   avoid.using a L
303b0 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74 68  IMIT clause with
303c0 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74   a comma-separat
303d0 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c  ed offset...<tcl
303e0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c  >hd_fragment val
303f0 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75  ues {VALUES clau
30400 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e  se} VALUES</tcl>
30410 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20  .<h3>The VALUES 
30420 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
30430 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56 41  ^(The phrase "VA
30440 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73  LUES(<i>expr-lis
30450 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68  t</i>)" means th
30460 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20  e same thing.as 
30470 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  "SELECT <i>expr-
30480 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28  list</i>".)^  ^(
30490 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55  The phrase."VALU
304a0 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  ES(<i>expr-list-
304b0 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65  1</i>),...,(<i>e
304c0 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22  xpr-list-N</i>)"
304d0 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a   means the same.
304e0 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54  thing as "SELECT
304f0 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c   <i>expr-list-1<
30500 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e  /i> UNION ALL ..
30510 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45  . UNION ALL.SELE
30520 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  CT <i>expr-list-
30530 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20  N</i>".)^  Both 
30540 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73 61  forms are the sa
30550 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a  me, except that.
30560 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45  the number of SE
30570 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
30580 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73  in a compound is
30590 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c   limited by.[SQL
305a0 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55  ITE_LIMIT_COMPOU
305b0 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65  ND_SELECT] where
305c0 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
305d0 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45   rows in a.VALUE
305e0 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20  S clause has no 
305f0 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e  arbitrary limit.
30600 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73  ..<p>There are s
30610 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ome restrictions
30620 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61   on the use of a
30630 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74   VALUES clause t
30640 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77  hat are.not show
30650 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20  n on the syntax 
30660 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a  diagrams:..<ul>.
30670 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45  <li><p>.^A VALUE
30680 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  S clause cannot 
30690 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b  be followed by [
306a0 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e  ORDER BY]...<li>
306b0 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c  <p>.^A VALUES cl
306c0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66  ause cannot be f
306d0 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49  ollowed by [LIMI
306e0 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e  T]..</ul>...<h3>
306f0 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c  The WITH Clause<
30700 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54  /h3>..<p>^SELECT
30710 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20   statements may 
30720 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72  be optionally pr
30730 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
30740 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d  le.[WITH clause]
30750 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e   that defines on
30760 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f  e or more [commo
30770 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
30780 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74  ons].for use wit
30790 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73  hin the SELECT s
307a0 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e  tatement...<tcl>
307b0 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62 66  hd_fragment tabf
307c0 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75  unc1 {table-valu
307d0 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ed functions in 
307e0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d  the FROM clause}
307f0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65  </tcl>.<h3>Table
30800 2d 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e  -valued Function
30810 73 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c  s In The FROM Cl
30820 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  ause</h3>..<p>A 
30830 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
30840 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68  that contains [h
30850 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63  idden columns] c
30860 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65 0a  an be used like.
30870 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  a [table-valued 
30880 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65  function] in the
30890 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54   FROM clause.  T
308a0 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
308b0 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64  the.table-valued
308c0 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65   function become
308d0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
308e0 74 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d  the HIDDEN colum
308f0 6e 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75 61  ns of.the virtua
30900 6c 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74 69  l table.  Additi
30910 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
30920 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
30930 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75   the.[table-valu
30940 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72  ed functions|vir
30950 74 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d  tual table docum
30960 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c  entation]...<tcl
30970 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
30980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
309a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
309b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
309c0 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
309d0 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
309e0 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73  UPDATEs}..Recurs
309f0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
30a00 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74   update-stmt.</t
30a10 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41  cl>..<p>^An UPDA
30a20 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
30a30 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61  used to modify a
30a40 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76   subset of the v
30a50 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20  alues stored in 
30a60 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  .zero or more ro
30a70 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ws of the databa
30a80 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  se table identif
30a90 69 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75 61  ied by the .[qua
30aa0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
30ab0 65 5d 20 73 70 65 63 69 66 69 65 64 20 61 73 20  e] specified as 
30ac0 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41  part of the UPDA
30ad0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  TE statement...<
30ae0 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
30af0 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
30b00 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45  not have a WHERE
30b10 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77   clause, all row
30b20 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61  s in the.table a
30b30 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74  re modified by t
30b40 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65  he UPDATE. ^Othe
30b50 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54  rwise, the UPDAT
30b60 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74  E affects only t
30b70 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68  hose.rows for wh
30b80 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
30b90 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78  ause.[boolean ex
30ba0 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e  pression|boolean
30bb0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
30bc0 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74  rue]. ^It is not
30bd0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
30be0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f  .WHERE clause do
30bf0 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20  es not evaluate 
30c00 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20  to true for any 
30c10 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
30c20 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61   - this just.mea
30c30 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41  ns that the UPDA
30c40 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66  TE statement aff
30c50 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a  ects zero rows..
30c60 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61  .<p>The modifica
30c70 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61  tions made to ea
30c80 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20  ch row affected 
30c90 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  by an UPDATE sta
30ca0 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72  tement are.deter
30cb0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73  mined by the lis
30cc0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
30cd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53   following the S
30ce0 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68  ET keyword. Each
30cf0 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63  .assignment spec
30d00 69 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d 3e  ifies a <yyterm>
30d10 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
30d20 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66 74  erm> to the left
30d30 20 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73 20   of the .equals 
30d40 73 69 67 6e 20 61 6e 64 20 61 20 73 63 61 6c 61  sign and a scala
30d50 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
30d60 74 68 65 20 72 69 67 68 74 2e 20 0a 5e 46 6f 72  the right. .^For
30d70 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72   each affected r
30d80 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  ow, the named co
30d90 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f  lumns.are set to
30da0 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e   the values foun
30db0 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
30dc0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
30dd0 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73  g scalar .expres
30de0 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e  sions. ^If a sin
30df0 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20  gle column-name 
30e00 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61  appears more tha
30e10 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69  n once in the li
30e20 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74  st of.assignment
30e30 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c   expressions, al
30e40 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d  l but the rightm
30e50 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69  ost occurrence i
30e60 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75  s ignored. ^Colu
30e70 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns.that do not 
30e80 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69  appear in the li
30e90 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
30ea0 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64  s are left unmod
30eb0 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c  ified. ^The scal
30ec0 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  ar.expressions m
30ed0 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75  ay refer to colu
30ee0 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62  mns of the row b
30ef0 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49  eing updated. ^I
30f00 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a  n this case all.
30f10 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
30f20 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
30f30 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
30f40 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
30f50 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20  ...<p>Beginning 
30f60 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  in SQLite [versi
30f70 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61 74  on 3.15.0] ([dat
30f80 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c 20 61 6e  eof:3.15.0]), an
30f90 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 0a 74   assignment in.t
30fa0 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 63 61  he SET clause ca
30fb0 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75 6d 6e 2d  n be a .[column-
30fc0 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72 65 6e 74  name-list|parent
30fd0 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
30fe0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d 20 6f 6e  column names] on
30ff0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 61 0a   the left and a.
31000 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74  [row value] of t
31010 68 65 20 73 61 6d 65 20 73 69 7a 65 20 6f 6e 20  he same size on 
31020 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a 3c 70 3e  the right....<p>
31030 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f  ^The optional "O
31040 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22  R <i>action</i>"
31050 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65   conflict clause
31060 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
31070 65 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64  e.UPDATE keyword
31080 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
31090 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73   to nominate a s
310a0 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69  pecific.constrai
310b0 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
310c0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
310d0 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
310e0 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63  his one UPDATE c
310f0 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f  ommand..Refer to
31100 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74   the section ent
31110 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  itled [ON CONFLI
31120 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
31130 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
31140 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e  .<h3>Restriction
31150 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74  s on UPDATE Stat
31160 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52  ements Within CR
31170 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33  EATE TRIGGER</h3
31180 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
31190 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73  ing additional s
311a0 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
311b0 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41  ns apply to UPDA
311c0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
311d0 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at.occur within 
311e0 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  the body of a [C
311f0 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
31200 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c  tatement.  ..<ul
31210 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
31220 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
31230 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63  me</yyterm> spec
31240 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
31250 20 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20   an UPDATE .    
31260 20 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68    statement with
31270 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67  in.      a trigg
31280 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
31290 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49  unqualified. ^(I
312a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
312b0 68 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65  he.      <i>sche
312c0 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
312d0 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
312e0 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20  e table name of 
312f0 74 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20  the UPDATE is.  
31300 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20      not allowed 
31310 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
31320 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74  )^ ^Unless the t
31330 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
31340 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20  e trigger.      
31350 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
31360 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
31370 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62  ase, the table b
31380 65 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20  eing updated by 
31390 74 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65  the.      trigge
313a0 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72  r program must r
313b0 65 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d  eside in the sam
313c0 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
313d0 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
313e0 20 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74        to which t
313f0 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
31400 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
31410 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
31420 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75  then the.      u
31430 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
31440 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
31450 6e 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65  ng updated is re
31460 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
31470 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20  me way.      as 
31480 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
31490 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
314a0 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
314b0 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
314c0 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65  abase,.      the
314d0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
314e0 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
314f0 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
31500 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
31510 77 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63  were.      attac
31520 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  hed)...  <li><p>
31530 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
31540 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
31550 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
31560 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54  allowed on UPDAT
31570 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e  E.      statemen
31580 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
31590 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
315a0 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
315b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
315c0 73 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65  s for UPDATE are
315d0 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74   unsupported wit
315e0 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65  hin.      trigge
315f0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
31600 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f  f the compilatio
31610 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74  n options used t
31620 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a  o build SQLite..
31630 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  </ul>..<h3>Optio
31640 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
31650 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f  DER BY Clauses</
31660 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
31670 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74  ite is built wit
31680 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
31690 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
316a0 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
316b0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
316c0 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
316d0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
316e0 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65  ement is extende
316f0 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20  d.with optional 
31700 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
31710 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20  IT clauses)^ as 
31720 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
31730 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
31740 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
31750 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
31760 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
31770 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d  tement has a LIM
31780 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d  IT clause, the m
31790 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
317a0 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20   rows that.will 
317b0 62 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f  be updated is fo
317c0 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
317d0 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69  g the accompanyi
317e0 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ng expression an
317f0 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20  d casting.it to 
31800 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
31810 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61  . ^A negative va
31820 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
31830 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
31840 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49  ...<p>^If the LI
31850 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
31860 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d  valuates to non-
31870 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c  negative value <
31880 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a  i>N</i> and the.
31890 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
318a0 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59   has an ORDER BY
318b0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
318c0 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c  l rows that woul
318d0 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a  d be updated in.
318e0 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
318f0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
31900 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
31910 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45  ding to the ORDE
31920 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72  R BY and the.fir
31930 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61  st <i>N</i> upda
31940 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50  ted. ^(If the UP
31950 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
31960 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
31970 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69  T clause,.then i
31980 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
31990 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
319a0 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
319b0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46  value. If the OF
319c0 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  FSET.expression 
319d0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
319e0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
319f0 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e  e <i>M</i>, then
31a00 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   the first <i>M<
31a10 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69  /i>.rows are ski
31a20 70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c  pped and the fol
31a30 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20  lowing <i>N</i> 
31a40 72 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73  rows updated ins
31a50 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  tead.)^..<p>^If 
31a60 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
31a70 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
31a80 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
31a90 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
31aa0 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64  would be updated
31ab0 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
31ac0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
31ad0 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
31ae0 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
31af0 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
31b00 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
31b10 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
31b20 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
31b30 65 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74  e .which are act
31b40 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a  ually updated...
31b50 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
31b60 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55  Y clause on an U
31b70 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
31b80 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
31b90 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a  determine which.
31ba0 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e  rows fall within
31bb0 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20   the LIMIT. The 
31bc0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
31bd0 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ows are modified
31be0 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
31bf0 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
31c00 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
31c10 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
31c20 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
31c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c70 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  ###.Section VACU
31c80 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d  UM vacuum VACUUM
31c90 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
31ca0 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
31cb0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
31cc0 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
31cd0 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
31ce0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
31cf0 2c 20 72 65 70 61 63 6b 69 6e 67 20 69 74 20 69  , repacking it i
31d00 6e 74 6f 20 61 20 6d 69 6e 69 6d 61 6c 0a 20 20  nto a minimal.  
31d10 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73 6b 20 73  amount of disk s
31d20 70 61 63 65 2e 20 54 68 65 72 65 20 61 72 65 20  pace. There are 
31d30 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f  several .  reaso
31d40 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  ns an applicatio
31d50 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a  n might do this:
31d60 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
31d70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65  > ^Unless SQLite
31d80 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22   is running in "
31d90 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c  auto_vacuum=FULL
31da0 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c  " mode, when a l
31db0 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74  arge.     amount
31dc0 20 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65   of data is dele
31dd0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
31de0 61 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65  abase file it le
31df0 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74  aves behind empt
31e00 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72  y.     space, or
31e10 20 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65   "free" database
31e20 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61   pages. This mea
31e30 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
31e40 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20  file might.     
31e50 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73  be larger than s
31e60 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72  trictly necessar
31e70 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  y. ^Running VACU
31e80 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  UM to rebuild th
31e90 65 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65  e .     database
31ea0 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73   reclaims this s
31eb0 70 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73  pace and reduces
31ec0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
31ed0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
31ee0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65  .  <li> <p> ^Fre
31ef0 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75  quent inserts, u
31f00 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65  pdates, and dele
31f10 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68  tes can cause th
31f20 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
31f30 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66       to become f
31f40 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72  ragmented - wher
31f50 65 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e  e data for a sin
31f60 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  gle table or ind
31f70 65 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20  ex is scattered 
31f80 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65  .     around the
31f90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
31fa0 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
31fb0 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63  ensures that eac
31fc0 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20  h table and.    
31fd0 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c   index is largel
31fe0 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75  y stored contigu
31ff0 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65  ously within the
32000 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
32010 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61  ^In some.     ca
32020 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20  ses, VACUUM may 
32030 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20  also reduce the 
32040 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61  number of partia
32050 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73  lly filled pages
32060 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74   in.     the dat
32070 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20  abase, reducing 
32080 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
32090 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75  database file fu
320a0 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  rther...  <li> <
320b0 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68  p> ^Normally, th
320c0 65 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65  e database [page
320d0 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68  _size] and wheth
320e0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
320f0 74 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70  tabase.     supp
32100 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75  orts [auto_vacuu
32110 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69  m] must be confi
32120 67 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65  gured before the
32130 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
32140 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20  s.     actually 
32150 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65  created. ^Howeve
32160 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b  r, when not in [
32170 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
32180 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20   mode, the .    
32190 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
321a0 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
321b0 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20  ] properties of 
321c0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
321d0 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20  base may be.    
321e0 20 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e   changed by usin
321f0 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  g the [page_size
32200 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a   pragma|page_siz
32210 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20  e]  and/or .    
32220 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72   [auto_vacuum|pr
32230 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d  agma auto_vacuum
32240 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68  ] pragmas and th
32250 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56  en immediately V
32260 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68  ACUUMing.     th
32270 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65  e database. ^Whe
32280 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  n in [write-ahea
32290 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c  d log] mode, onl
322a0 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  y the [auto_vacu
322b0 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74  um].     support
322c0 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65   property can be
322d0 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56   changed using V
322e0 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ACUUM..</ul>..<p
322f0 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c 20 56 41  >^By default, VA
32300 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  CUUM only works 
32310 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d 61 69 6e  only on the main
32320 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b 41 54 54   database..^[ATT
32330 41 43 48 7c 41 74 74 61 63 68 65 64 20 64 61 74  ACH|Attached dat
32340 61 62 61 73 65 73 5d 20 63 61 6e 20 62 65 20 76  abases] can be v
32350 61 63 75 75 6d 65 64 20 62 79 20 61 70 70 65 6e  acuumed by appen
32360 64 69 6e 67 20 74 68 65 20 61 70 70 72 6f 70 72  ding the appropr
32370 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e 73 63 68  iate.<yyterm>sch
32380 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
32390 3e 20 74 6f 20 74 68 65 20 56 41 43 55 55 4d 20  > to the VACUUM 
323a0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 3c  statement...<p><
323b0 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  b>Compatibility 
323c0 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20 54 68 65  Warning:</b> The
323d0 20 61 62 69 6c 69 74 79 20 74 6f 20 76 61 63 75   ability to vacu
323e0 75 6d 20 61 74 74 61 63 68 65 64 20 64 61 74 61  um attached data
323f0 62 61 73 65 73 20 77 61 73 0a 61 64 64 65 64 20  bases was.added 
32400 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35  in [version 3.15
32410 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31  .0] ([dateof:3.1
32420 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72 20 74 6f  5.0]).  Prior to
32430 20 74 68 61 74 2c 20 61 20 0a 3c 79 79 74 65 72   that, a .<yyter
32440 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79  m>schema-name</y
32450 79 74 65 72 6d 3e 20 61 64 64 65 64 20 74 6f 20  yterm> added to 
32460 74 68 65 0a 56 41 43 55 55 4d 20 73 74 61 74 65  the.VACUUM state
32470 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65 20 73 69  ment would be si
32480 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61  lently ignored a
32490 6e 64 20 74 68 65 20 22 6d 61 69 6e 22 20 73 63  nd the "main" sc
324a0 68 65 6d 61 20 77 6f 75 6c 64 20 62 65 0a 76 61  hema would be.va
324b0 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  cuumed.</p>..<p>
324c0 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
324d0 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70  and works by cop
324e0 79 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ying the content
324f0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
32500 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61  e into.a tempora
32510 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
32520 20 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72   and then overwr
32530 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
32540 61 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e  al with the .con
32550 74 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d  tents of the tem
32560 70 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68  porary file. ^Wh
32570 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  en overwriting t
32580 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72  he original, a r
32590 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20  ollback.journal 
325a0 6f 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  or [write-ahead 
325b0 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73  log] WAL file is
325c0 20 75 73 65 64 20 6a 75 73 74 20 61 73 20 69 74   used just as it
325d0 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e   would be for an
325e0 79 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y.other database
325f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54   transaction. ^T
32600 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77  his means that w
32610 68 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20  hen VACUUMing a 
32620 64 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75  database, .as mu
32630 63 68 20 61 73 20 74 77 69 63 65 20 74 68 65 20  ch as twice the 
32640 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67  size of the orig
32650 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  inal database fi
32660 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 20 69  le is required i
32670 6e 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63  n free.disk spac
32680 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  e...<p>^The VACU
32690 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63  UM command may c
326a0 68 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44  hange the [ROWID
326b0 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e   | ROWIDs] of en
326c0 74 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62  tries in any.tab
326d0 6c 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  les that do not 
326e0 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74  have an explicit
326f0 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
32700 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  Y KEY]..</p>..<p
32710 3e 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20  >^A VACUUM will 
32720 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73  fail if there is
32730 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   an open transac
32740 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72  tion, or if ther
32750 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72  e are one or.mor
32760 65 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61  e active SQL sta
32770 74 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20  tements when it 
32780 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 6e  is run...<p>^(An
32790 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
327a0 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
327b0 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c   command to.recl
327c0 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20  aim space after 
327d0 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65  data has been de
327e0 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61  leted is auto-va
327f0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
32800 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75  ed using.the [au
32810 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
32820 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f  a.)^ ^When [auto
32830 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62  _vacuum] is enab
32840 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
32850 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61  se.free pages ma
32860 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61  y be reclaimed a
32870 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61  fter deleting da
32880 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ta, causing the 
32890 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a  file to shrink,.
328a0 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69  without rebuildi
328b0 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ng the entire da
328c0 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43  tabase using VAC
328d0 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  UUM.  ^However, 
328e0 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
328f0 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
32900 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
32910 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
32920 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76  n.  ^And [auto_v
32930 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
32940 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
32950 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
32960 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
32970 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a  s VACUUM does...
32980 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
32990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
329a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
329b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
329c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
329d0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
329e0 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
329f0 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
32a00 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
32a10 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
32a20 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
32a30 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73  BY phrase forces
32a40 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65   the [SQLite que
32a50 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75  ry planner] to u
32a60 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  se a.particular 
32a70 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61  named index on a
32a80 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45   [DELETE], [SELE
32a90 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
32aa0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
32ab0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
32ac0 65 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65  e is an SQLite e
32ad0 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20  xtension and.is 
32ae0 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20  not portable to 
32af0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
32b00 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a  se engines.</p>.
32b10 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
32b20 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
32b30 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
32b40 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
32b50 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  he "INDEXED BY <
32b60 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d  yyterm>index-nam
32b70 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61  e</yyterm>" phra
32b80 73 65 20 73 70 65 63 69 66 69 65 73 20 0a 74 68  se specifies .th
32b90 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
32ba0 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
32bb0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
32bc0 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
32bd0 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
32be0 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69  e..^If <yyterm>i
32bf0 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  ndex-name</yyter
32c00 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  m> does not exis
32c10 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75  t or cannot be u
32c20 73 65 64 20 0a 66 6f 72 20 74 68 65 20 71 75 65  sed .for the que
32c30 72 79 2c 20 74 68 65 6e 20 74 68 65 20 70 72 65  ry, then the pre
32c40 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  paration of the 
32c50 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61  SQL statement fa
32c60 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20  ils..^(The "NOT 
32c70 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65 20  INDEXED" clause 
32c80 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e  specifies that n
32c90 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65  o index shall be
32ca0 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73   used when.acces
32cb0 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64 69  sing the precedi
32cc0 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64  ng table, includ
32cd0 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69  ing implied indi
32ce0 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e  ces create by.UN
32cf0 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
32d00 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
32d10 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
32d20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c  [rowid].can stil
32d30 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
32d40 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
32d50 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
32d60 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
32d70 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
32d80 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
32d90 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
32da0 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
32db0 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
32dc0 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
32dd0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
32de0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
32df0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
32e00 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
32e10 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
32e20 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
32e30 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
32e40 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
32e50 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
32e60 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
32e70 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
32e80 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
32e90 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
32ea0 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
32eb0 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
32ec0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
32ed0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
32ee0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
32ef0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
32f00 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
32f10 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
32f20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
32f30 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
32f40 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
32f50 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
32f60 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
32f70 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
32f80 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
32f90 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
32fa0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
32fb0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
32fc0 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
32fd0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
32fe0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
32ff0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
33000 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
33010 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
33020 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
33030 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
33040 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
33050 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
33060 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
33070 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
33080 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
33090 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
330a0 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
330b0 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
330c0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
330d0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
330e0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
330f0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
33100 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
33110 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
33120 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c  on testing..Appl
33130 69 63 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70  ication .develop
33140 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68  ers are admonish
33150 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75  ed to omit all u
33160 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
33170 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74   during.applicat
33180 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c  ion design, impl
33190 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74  ementation, test
331a0 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e  ing, and tuning.
331b0 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20    If.INDEXED BY 
331c0 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74  is to be used at
331d0 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20   all, it should 
331e0 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  be inserted at t
331f0 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74  he very.end of t
33200 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70  he development p
33210 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63  rocess when "loc
33220 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73  king down" a des
33230 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65  ign.</p>..<h3>Se
33240 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f  e Also:</h3>..<o
33250 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71  l>.<li><p>The [q
33260 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 65  uery planner che
33270 63 6b 6c 69 73 74 5d 20 64 65 73 63 72 69 62 65  cklist] describe
33280 73 20 73 74 65 70 73 20 74 68 61 74 20 61 70 70  s steps that app
33290 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70  lication.develop
332a0 65 72 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f  ers should follo
332b0 77 69 6e 67 20 74 6f 20 68 65 6c 70 20 72 65 73  wing to help res
332c0 6f 6c 76 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  olve query plann
332d0 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74  er problems..Not
332e0 69 63 65 20 74 68 65 20 74 68 61 74 20 74 68 65  ice the that the
332f0 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
33300 42 59 20 69 73 20 61 20 6c 61 73 74 20 72 65 73  BY is a last res
33310 6f 72 74 2c 20 74 6f 20 62 65 20 75 73 65 64 20  ort, to be used 
33320 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74  only.when all ot
33330 68 65 72 20 6d 65 61 73 75 72 65 73 20 66 61 69  her measures fai
33340 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b  l.</p>..<li><p>[
33350 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65  upluscontrol|The
33360 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
33370 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65 64  tor].can be used
33380 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20 74   to disqualify t
33390 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52  erms in the WHER
333a0 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75 73  E clause from us
333b0 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43 61  e by indices..Ca
333c0 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e 61  reful use of una
333d0 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d  ry + can sometim
333e0 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74 20  es help prevent 
333f0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
33400 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20  r from.choosing 
33410 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74  a poor index wit
33420 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e 67  hout restricting
33430 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65   it to using one
33440 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 2e   specific index.
33450 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d 65  .Careful placeme
33460 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70  nt of unary + op
33470 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65 74  erators is a bet
33480 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 63  ter method for c
33490 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63  ontrolling .whic
334a0 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75 73  h indices are us
334b0 65 64 20 62 79 20 61 20 71 75 65 72 79 2e 3c 2f  ed by a query.</
334c0 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b  p>..<li><p>The [
334d0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
334e0 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  tus()] C/C++ int
334f0 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20  erface together 
33500 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
33510 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c  _STMTSTATUS_FULL
33520 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b  SCAN_STEP] and [
33530 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
33540 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61  S_SORT] verbs.ca
33550 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74  n be used to det
33560 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ect at run-time 
33570 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74  when an SQL stat
33580 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b  ement is not.mak
33590 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73  ing effective us
335a0 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d  e of indices.  M
335b0 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  any applications
335c0 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75   may prefer to.u
335d0 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  se the [sqlite3_
335e0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69  stmt_status()] i
335f0 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65  nterface to dete
33600 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a  ct index misuse.
33610 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
33620 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
33630 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65  e described here
33640 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63  .</p>.</ol>..<tc
33650 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
33660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
336a0 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79  .# A list of key
336b0 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72 69  words.  A asteri
336c0 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  sk occurs after 
336d0 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69  the keyword if i
336e0 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61  t is on.# the fa
336f0 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73  llback list..#.s
33700 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  et keyword_list 
33710 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52  [lsort {.   ABOR
33720 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41  T.   ACTION.   A
33730 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41  DD.   AFTER.   A
33740 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41  LL.   ALTER.   A
33750 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20  NALYZE.   AND.  
33760 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54   AS.   ASC.   AT
33770 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52  TACH.   AUTOINCR
33780 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a  EMENT.   BEFORE.
33790 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57     BEGIN.   BETW
337a0 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53  EEN.   BY.   CAS
337b0 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20  CADE.   CASE.   
337c0 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20  CAST.   CHECK.  
337d0 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55   COLLATE.   COLU
337e0 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20  MN.   COMMIT.   
337f0 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53  CONFLICT.   CONS
33800 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45  TRAINT.   CREATE
33810 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52  .   CROSS.   CUR
33820 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52  RENT_DATE.   CUR
33830 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52  RENT_TIME.   CUR
33840 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20  RENT_TIMESTAMP. 
33850 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45    DATABASE.   DE
33860 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45  FAULT.   DEFERRE
33870 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a  D.   DEFERRABLE.
33880 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53     DELETE.   DES
33890 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20 44  C.   DETACH.   D
338a0 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a  ISTINCT.   DROP.
338b0 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20     END.   EACH. 
338c0 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
338d0 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
338e0 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53 54  CLUSIVE.   EXIST
338f0 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20  S.   EXPLAIN.   
33900 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46  FAIL.   FOR.   F
33910 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20  OREIGN.   FROM. 
33920 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20    FULL.   GLOB. 
33930 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e    GROUP.   HAVIN
33940 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52  G.   IF.   IGNOR
33950 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20  E.   IMMEDIATE. 
33960 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20    IN.   INDEX.  
33970 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54   INDEXED.   INIT
33980 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20  IALLY.   INNER. 
33990 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54    INSERT.   INST
339a0 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54  EAD.   INTERSECT
339b0 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20  .   INTO.   IS. 
339c0 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e    ISNULL.   JOIN
339d0 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a  .   KEY.   LEFT.
339e0 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54     LIKE.   LIMIT
339f0 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54  .   MATCH.   NAT
33a00 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f  URAL.   NO.   NO
33a10 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20  T.   NOTNULL.   
33a20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46  NULL.   OF.   OF
33a30 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52  FSET.   ON.   OR
33a40 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54  .   ORDER.   OUT
33a50 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52  ER.   PLAN.   PR
33a60 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a  AGMA.   PRIMARY.
33a70 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49 53     QUERY.   RAIS
33a80 45 0a 20 20 20 52 45 43 55 52 53 49 56 45 0a 20  E.   RECURSIVE. 
33a90 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20    REFERENCES.   
33aa0 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45  REGEXP.   REINDE
33ab0 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20  X.   RELEASE.   
33ac0 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43  RENAME.   REPLAC
33ad0 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20 20  E.   RESTRICT.  
33ae0 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41   RIGHT.   ROLLBA
33af0 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41 56  CK.   ROW.   SAV
33b00 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43 54  EPOINT.   SELECT
33b10 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45  .   SET.   TABLE
33b20 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d 50  .   TEMP.   TEMP
33b30 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20 20  ORARY.   THEN.  
33b40 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49   TO.   TRANSACTI
33b50 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20 20  ON.   TRIGGER.  
33b60 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45   UNION.   UNIQUE
33b70 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55 53  .   UPDATE.   US
33b80 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20 20  ING.   VACUUM.  
33b90 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57 0a   VALUES.   VIEW.
33ba0 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57 49     VIRTUAL.   WI
33bb0 54 48 0a 20 20 20 57 49 54 48 4f 55 54 0a 20 20  TH.   WITHOUT.  
33bc0 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d   WHEN.   WHERE.}
33bd0 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56  ]..hd_puts {<DIV
33be0 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74   class="pdf_sect
33bf0 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b  ion">}.Section {
33c00 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d  SQLite Keywords}
33c10 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c   keywords {{*SQL
33c20 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b   keyword} {SQL k
33c30 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74  eywords}}.hd_put
33c40 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c  s {</DIV>}.</tcl
33c50 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74  >..<p>The SQL st
33c60 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65 73  andard specifies
33c70 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f   a huge number o
33c80 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68  f keywords which
33c90 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64   may not.be used
33ca0 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66   as the names of
33cb0 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73   tables, indices
33cc0 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62  , columns, datab
33cd0 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e  ases, user-defin
33ce0 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f  ed.functions, co
33cf0 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61  llations, virtua
33d00 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c  l table modules,
33d10 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61   or any other na
33d20 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20  med object..The 
33d30 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
33d40 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74   is so long that
33d50 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20   few people can 
33d60 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c  remember them al
33d70 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20  l..For most SQL 
33d80 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73  code, your safes
33d90 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65  t bet is to neve
33da0 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73  r use any Englis
33db0 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20  h language.word 
33dc0 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  as the name of a
33dd0 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62   user-defined ob
33de0 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ject.</p>..<p>If
33df0 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65   you want to use
33e00 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20   a keyword as a 
33e10 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74  name, you need t
33e20 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65  o quote it.  The
33e30 72 65 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73  re.are four ways
33e40 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77   of quoting keyw
33e50 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c  ords in SQLite:<
33e60 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71  /p>..<p>.<blockq
33e70 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74  uote>.<table>.<t
33e80 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
33e90 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27  op"><b>'keyword'
33ea0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
33eb0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c  th="20"></td>..<
33ec0 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e  td>^A keyword in
33ed0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
33ee0 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  s a string liter
33ef0 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  al.</td></tr>..<
33f00 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
33f10 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64  top"><b>"keyword
33f20 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  "</b></td><td></
33f30 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
33f40 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75  ord in double-qu
33f50 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74  otes is an ident
33f60 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ifier.</td></tr>
33f70 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
33f80 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b  n="top"><b>&#91;
33f90 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e  keyword&#93;</b>
33fa0 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
33fb0 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65  <td>^A keyword e
33fc0 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72  nclosed in squar
33fd0 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20  e brackets is . 
33fe0 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69         an identi
33ff0 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e  fier.  This is n
34000 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
34010 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d    This quoting m
34020 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20  echanism.       
34030 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41   is used by MS A
34040 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65  ccess and SQL Se
34050 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c  rver and is incl
34060 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66  uded in SQLite f
34070 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  or.        compa
34080 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f  tibility.</td></
34090 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
340a0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
340b0 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c  96;keyword&#96;<
340c0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
340d0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
340e0 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72  d enclosed in gr
340f0 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53 43  ave accents (ASC
34100 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a  II code 96) is .
34110 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
34120 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
34130 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
34140 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
34150 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
34160 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53    is used by MyS
34170 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  QL and is includ
34180 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
34190 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
341a0 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
341b0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
341c0 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c  ckquote>.</p>..<
341d0 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65  p>For resilience
341e0 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64   when confronted
341f0 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c   with historical
34200 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c   SQL statements,
34210 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d   SQLite.will som
34220 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20  etimes bend the 
34230 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62  quoting rules ab
34240 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  ove:</p>..<ul>.<
34250 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
34260 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75  ord in single.qu
34270 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65  otes (ex: <b>'ke
34280 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c  y'</b> or <b>'gl
34290 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob'</b>) is used
342a0 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
342b0 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65  ere.an identifie
342c0 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74  r is allowed but
342d0 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20   where a string 
342e0 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61  literal is not a
342f0 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65  llowed, then.the
34300 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
34310 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64  tood to be an id
34320 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61 64  entifier instead
34330 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74   of a string lit
34340 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  eral..</p></li>.
34350 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65  .<li><p>^If a ke
34360 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a  yword in double.
34370 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22  quotes (ex: <b>"
34380 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22  key"</b> or <b>"
34390 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73  glob"</b>) is us
343a0 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20  ed in a context 
343b0 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20  where.it cannot 
343c0 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61  be resolved to a
343d0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62 75 74  n identifier but
343e0 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20   where a string 
343f0 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77  literal.is allow
34400 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b  ed, then the tok
34410 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
34420 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20   to be a string 
34430 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a  literal instead.
34440 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  of an identifier
34450 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  .</p></li>.</ul>
34460 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73  ..<p>Programmers
34470 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e   are cautioned n
34480 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74 77  ot to use the tw
34490 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73  o exceptions des
344a0 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72  cribed in.the pr
344b0 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20  evious bullets. 
344c0 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68   We emphasize th
344d0 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e  at they exist on
344e0 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61  ly so that old.a
344f0 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51  nd ill-formed SQ
34500 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c  L statements wil
34510 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e  l run correctly.
34520 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
34530 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68  s of.SQLite migh
34540 74 20 72 61 69 73 65 20 65 72 72 6f 72 73 20 69  t raise errors i
34550 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65 70 74  nstead of accept
34560 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65  ing the malforme
34570 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76  d.statements cov
34580 65 72 65 64 20 62 79 20 74 68 65 20 65 78 63 65  ered by the exce
34590 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70  ptions above.</p
345a0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64  >..<p>.SQLite ad
345b0 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20  ds new keywords 
345c0 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d  from time to tim
345d0 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20  e when it takes 
345e0 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e  on new features.
345f0 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79  .So to prevent y
34600 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65  our code from be
34610 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75  ing broken by fu
34620 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
34630 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f  s, you should.no
34640 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79  rmally quote any
34650 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
34660 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c   is an English l
34670 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76  anguage word, ev
34680 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74  en if.you do not
34690 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a   have to..</p>..
346a0 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c  <p>.The list bel
346b0 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73  ow shows all pos
346c0 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75  sible keywords u
346d0 73 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64  sed by any build
346e0 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72   of.SQLite regar
346f0 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c  dless of [compil
34700 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e  e-time options].
34710 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62    .Most reasonab
34720 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  le configuration
34730 73 20 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c  s use most or al
34740 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f  l of these keywo
34750 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65  rds,.but some ke
34760 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d  ywords may be om
34770 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c  itted when SQL l
34780 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73  anguage features
34790 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e   are.disabled..^
347a0 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74  (Regardless of t
347b0 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
347c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61  configuration, a
347d0 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  ny identifier th
347e0 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65  at is not on.the
347f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e   following <tcl>
34800 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68  hd_puts [llength
34810 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c   $keyword_list]<
34820 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69  /tcl> element.li
34830 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77  st is not a keyw
34840 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70  ord to the SQL p
34850 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a  arser in SQLite:
34860 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 74 63 6c  .</p>..<ol>.<tcl
34870 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66 6f 72 65  >.set lx {}.fore
34880 61 63 68 20 77 6f 72 64 20 5b 6c 73 6f 72 74 20  ach word [lsort 
34890 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 20 7b  $keyword_list] {
348a0 0a 20 20 68 64 5f 70 75 74 73 6e 6c 20 22 3c 6c  .  hd_putsnl "<l
348b0 69 3e 24 77 6f 72 64 3c 2f 6c 69 3e 22 0a 7d 0a  i>$word</li>".}.
348c0 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 6f 6c 3e  hd_putsnl "</ol>
348d0 29 5e 22 0a 3c 2f 74 63 6c 3e 0a                 )^".</tcl>.