Documentation Source Text

Hex Artifact Content
Login

Artifact 6b438c8f37b231434a32d292263498469566dbbbe0c8bcb5ddb59efd76408041:


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 42 4c 4f  L".  <tr><td>BLO
9c40: 42 20 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45 22 29  B (a.k.a "NONE")
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 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ^ </p></li>..<li
df40: 3e 3c 70 3e 0a 20 5e 46 6f 72 20 6e 6f 6e 2d 54  ><p>. ^For non-T
df50: 45 4d 50 20 74 72 69 67 67 65 72 73 2c 0a 20 20  EMP triggers,.  
df60: 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
df70: 6d 6f 64 69 66 69 65 64 20 6f 72 20 71 75 65 72  modified or quer
df80: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
df90: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
dfa0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
dfb0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
dfc0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
dfd0: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 5e  is attached..  ^
dfe0: 28 54 45 4d 50 20 74 72 69 67 67 65 72 73 20 61  (TEMP triggers a
dff0: 72 65 20 6e 6f 74 20 73 75 62 6a 65 63 74 20 74  re not subject t
e000: 6f 20 74 68 65 20 73 61 6d 65 2d 64 61 74 61 62  o the same-datab
e010: 61 73 65 20 72 75 6c 65 2e 20 20 41 20 54 45 4d  ase rule.  A TEM
e020: 50 0a 20 20 74 72 69 67 67 65 72 20 69 73 20 61  P.  trigger is a
e030: 6c 6c 6f 77 65 64 20 74 6f 20 71 75 65 72 79 20  llowed to query 
e040: 6f 72 20 6d 6f 64 69 66 79 20 61 6e 79 20 74 61  or modify any ta
e050: 62 6c 65 20 69 6e 20 61 6e 79 20 5b 41 54 54 41  ble in any [ATTA
e060: 43 48 5d 2d 65 64 20 64 61 74 61 62 61 73 65 2e  CH]-ed database.
e070: 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  )^.  </p></li>..
e080: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22  <li><p>.  ^The "
e090: 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74  INSERT INTO <i>t
e0a0: 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54  able</i> DEFAULT
e0b0: 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66   VALUES" form of
e0c0: 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74   the [INSERT] st
e0d0: 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74  atement.  is not
e0e0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f   supported..  </
e0f0: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
e100: 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20  .  ^The INDEXED 
e110: 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
e120: 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
e130: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ot supported for
e140: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20   [UPDATE] and.  
e150: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
e160: 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  nts..  </p></li>
e170: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68  ..<li><p>.  ^(Th
e180: 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  e ORDER BY and L
e190: 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20  IMIT clauses on 
e1a0: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
e1b0: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
e1c0: 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f   are not.  suppo
e1d0: 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20  rted.  ORDER BY 
e1e0: 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f  and LIMIT are no
e1f0: 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f  t normally suppo
e200: 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45  rted for [UPDATE
e210: 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20  ] or.  [DELETE] 
e220: 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62  in any context b
e230: 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65  ut can be enable
e240: 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  d for top-level 
e250: 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69  statements.  usi
e260: 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  ng the [SQLITE_E
e270: 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
e280: 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69  ETE_LIMIT] compi
e290: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20  le-time option. 
e2a0: 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74   However,.  that
e2b0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
e2c0: 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65  tion only applie
e2d0: 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b  s to top-level [
e2e0: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
e2f0: 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ETE].  statement
e300: 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20  s, not [UPDATE] 
e310: 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61  and [DELETE] sta
e320: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
e330: 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70  riggers.)^.  </p
e340: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
e350: 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65    ^[common-table
e360: 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d  -expression|Comm
e370: 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
e380: 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20 73 75 70  ion] are not sup
e390: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 73 74 61  ported for.  sta
e3a0: 74 65 6d 65 6e 74 73 20 69 6e 73 69 64 65 20 6f  tements inside o
e3b0: 66 20 74 72 69 67 67 65 72 73 2e 0a 20 20 3c 2f  f triggers..  </
e3c0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
e3d0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e3e0: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
e3f0: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
e400: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
e410: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
e420: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
e430: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69  rs</h3>..<p>^Tri
e440: 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65  ggers may be cre
e450: 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c  ated on [views],
e460: 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69   as well as ordi
e470: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a  nary tables, by.
e480: 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45  specifying INSTE
e490: 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45  AD OF in the CRE
e4a0: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
e4b0: 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20  ement. .^If one 
e4c0: 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52  or more ON INSER
e4d0: 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20  T, ON DELETE.or 
e4e0: 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65  ON UPDATE trigge
e4f0: 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f  rs are defined o
e500: 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69  n a view, then i
e510: 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f  t is not an.erro
e520: 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20  r to execute an 
e530: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
e540: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
e550: 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20  nt on the view, 
e560: 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20  .respectively.  
e570: 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74  ^Instead,.execut
e580: 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ing an INSERT, D
e590: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
e5a0: 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73  on the view caus
e5b0: 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  es the associate
e5c0: 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69  d.triggers to fi
e5d0: 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61  re. ^The real ta
e5e0: 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20  bles underlying 
e5f0: 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74  the view are not
e600: 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70   modified.(excep
e610: 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69  t possibly expli
e620: 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67  citly, by a trig
e630: 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70  ger program).</p
e640: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
e650: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
e660: 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71  anges()] and [sq
e670: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
e680: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
e690: 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49  s.do not count I
e6a0: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
e6b0: 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74  r firings, but t
e6c0: 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65  he.[count_change
e6d0: 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63  s pragma] does c
e6e0: 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20  ount INSTEAD OF 
e6f0: 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c  trigger firing.<
e700: 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45 78  /p>..<h3>Some Ex
e710: 61 6d 70 6c 65 20 54 72 69 67 67 65 72 73 3c 2f  ample Triggers</
e720: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69  h3>..<p>^(Assumi
e730: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
e740: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
e750: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
e760: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
e770: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
e780: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
e790: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
e7a0: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
e7b0: 77 69 6e 67 0a 55 50 44 41 54 45 20 74 72 69 67  wing.UPDATE trig
e7c0: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
e7d0: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
e7e0: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
e7f0: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
e800: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
e810: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
e820: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
e830: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
e840: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
e850: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
e860: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
e870: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
e880: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
e890: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
e8a0: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
e8b0: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
e8c0: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
e8d0: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
e8e0: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
e8f0: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
e900: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
e910: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
e920: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
e930: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
e940: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
e950: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
e960: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
e970: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
e980: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
e990: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
e9a0: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
e9b0: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
e9c0: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
e9d0: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
e9e0: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
e9f0: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
ea00: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
ea10: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
ea20: 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61 6d 70 6c  <p>For an exampl
ea30: 65 20 6f 66 20 61 6e 20 49 4e 53 54 45 41 44 20  e of an INSTEAD 
ea40: 4f 46 20 74 72 69 67 67 65 72 2c 20 63 6f 6e 73  OF trigger, cons
ea50: 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ider the followi
ea60: 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c  ng schema:..<tcl
ea70: 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  >Example {.CREAT
ea80: 45 20 54 41 42 4c 45 20 63 75 73 74 6f 6d 65 72  E TABLE customer
ea90: 28 0a 20 20 63 75 73 74 5f 69 64 20 49 4e 54 45  (.  cust_id INTE
eaa0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
eab0: 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20 54 45 58  .  cust_name TEX
eac0: 54 2c 0a 20 20 63 75 73 74 5f 61 64 64 72 20 54  T,.  cust_addr T
ead0: 45 58 54 0a 29 3b 0a 43 52 45 41 54 45 20 56 49  EXT.);.CREATE VI
eae0: 45 57 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  EW customer_addr
eaf0: 65 73 73 20 41 53 0a 20 20 20 53 45 4c 45 43 54  ess AS.   SELECT
eb00: 20 63 75 73 74 5f 69 64 2c 20 63 75 73 74 5f 61   cust_id, cust_a
eb10: 64 64 72 20 46 52 4f 4d 20 63 75 73 74 6f 6d 65  ddr FROM custome
eb20: 72 3b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45  r;.CREATE TRIGGE
eb30: 52 20 63 75 73 74 5f 61 64 64 72 5f 63 68 6e 67  R cust_addr_chng
eb40: 0a 49 4e 53 54 45 41 44 20 4f 46 20 55 50 44 41  .INSTEAD OF UPDA
eb50: 54 45 20 4f 46 20 63 75 73 74 5f 61 64 64 72 20  TE OF cust_addr 
eb60: 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  ON customer_addr
eb70: 65 73 73 0a 42 45 47 49 4e 0a 20 20 55 50 44 41  ess.BEGIN.  UPDA
eb80: 54 45 20 63 75 73 74 6f 6d 65 72 20 53 45 54 20  TE customer SET 
eb90: 63 75 73 74 5f 61 64 64 72 3d 4e 45 57 2e 63 75  cust_addr=NEW.cu
eba0: 73 74 5f 61 64 64 72 0a 20 20 20 57 48 45 52 45  st_addr.   WHERE
ebb0: 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e 63 75 73   cust_id=NEW.cus
ebc0: 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63  t_id;.END;.}</tc
ebd0: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 65 20  l>..<p>With the 
ebe0: 73 63 68 65 6d 61 20 61 62 6f 76 65 2c 20 61 20  schema above, a 
ebf0: 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 65  statement of the
ec00: 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c   form:</p>..<tcl
ec10: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
ec20: 45 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65  E customer_addre
ec30: 73 73 20 53 45 54 20 63 75 73 74 5f 61 64 64 72  ss SET cust_addr
ec40: 3d 24 6e 65 77 5f 61 64 64 72 65 73 73 20 57 48  =$new_address WH
ec50: 45 52 45 20 63 75 73 74 5f 69 64 3d 24 63 75 73  ERE cust_id=$cus
ec60: 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c  t_id;.}</tcl>..<
ec70: 70 3e 43 61 75 73 65 73 20 74 68 65 20 63 75 73  p>Causes the cus
ec80: 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64 64 72 20  tomer.cust_addr 
ec90: 66 69 65 6c 64 20 74 6f 20 62 65 20 75 70 64 61  field to be upda
eca0: 74 65 64 20 66 6f 72 20 61 20 73 70 65 63 69 66  ted for a specif
ecb0: 69 63 0a 63 75 73 74 6f 6d 65 72 20 65 6e 74 72  ic.customer entr
ecc0: 79 20 74 68 61 74 20 68 61 73 20 63 75 73 74 6f  y that has custo
ecd0: 6d 65 72 2e 63 75 73 74 5f 69 64 20 65 71 75 61  mer.cust_id equa
ece0: 6c 20 74 6f 20 74 68 65 20 24 63 75 73 74 5f 69  l to the $cust_i
ecf0: 64 20 70 61 72 61 6d 65 74 65 72 2e 0a 4e 6f 74  d parameter..Not
ed00: 65 20 68 6f 77 20 74 68 65 20 76 61 6c 75 65 73  e how the values
ed10: 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
ed20: 20 76 69 65 77 20 61 72 65 20 6d 61 64 65 20 61   view are made a
ed30: 76 61 69 6c 61 62 6c 65 20 61 73 20 66 69 65 6c  vailable as fiel
ed40: 64 0a 69 6e 20 74 68 65 20 73 70 65 63 69 61 6c  d.in the special
ed50: 20 22 4e 45 57 22 20 74 61 62 6c 65 20 77 69 74   "NEW" table wit
ed60: 68 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 20  hin the trigger 
ed70: 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  body.</p>..<tcl>
ed80: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
ed90: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
eda0: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
edb0: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
edc0: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
edd0: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
ede0: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
edf0: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
ee00: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
ee10: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
ee20: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
ee30: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
ee40: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
ee50: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
ee60: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
ee70: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
ee80: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
ee90: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
eea0: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
eeb0: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
eec0: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
eed0: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
eee0: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
eef0: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
ef00: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
ef10: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
ef20: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
ef30: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
ef40: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
ef50: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
ef60: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
ef70: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
ef80: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
ef90: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
efa0: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
efb0: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
efc0: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
efd0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
efe0: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
eff0: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
f000: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
f010: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
f020: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
f030: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
f040: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
f050: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
f060: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
f070: 74 20 72 61 69 73 65 20 7b 52 41 49 53 45 20 66  t raise {RAISE f
f080: 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  unction}</tcl>.<
f090: 68 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66  h3>The RAISE() f
f0a0: 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  unction</h3>..<p
f0b0: 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c  >^(A special SQL
f0c0: 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28   function RAISE(
f0d0: 29 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69  ) may be used wi
f0e0: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70  thin a trigger-p
f0f0: 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74  rogram,)^.with t
f100: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
f110: 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42  tax</p> ..<tcl>B
f120: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69  ubbleDiagram rai
f130: 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c  se-function</tcl
f140: 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e 65  >..<p>^(When one
f150: 20 6f 66 20 52 41 49 53 45 28 52 4f 4c 4c 42 41   of RAISE(ROLLBA
f160: 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53 45 28 41  CK,...), RAISE(A
f170: 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20 52 41 49  BORT,...) or RAI
f180: 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20  SE(FAIL,...).is 
f190: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
f1a0: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78  igger-program.ex
f1b0: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
f1c0: 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  cified [ON CONFL
f1d0: 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20  ICT] processing 
f1e0: 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 74 68 65  is performed.the
f1f0: 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74   current query t
f200: 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a 41 6e 20  erminates.)^.An 
f210: 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53  error code of [S
f220: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
f230: 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  ] is returned to
f240: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
f250: 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65  ,.along with the
f260: 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72   specified error
f270: 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c   message.</p>..<
f280: 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47  p>^When RAISE(IG
f290: 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c  NORE) is called,
f2a0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f   the remainder o
f2b0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  f the current tr
f2c0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74  igger program,.t
f2d0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
f2e0: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
f2f0: 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20  gger program to 
f300: 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20  execute and any 
f310: 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67  subsequent.trigg
f320: 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74  er programs that
f330: 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   would have been
f340: 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62   executed are ab
f350: 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74  andoned. ^No dat
f360: 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72  abase.changes ar
f370: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
f380: 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ^If the statemen
f390: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
f3a0: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
f3b0: 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20  m.to execute is 
f3c0: 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61  itself part of a
f3d0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
f3e0: 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67  , then that trig
f3f0: 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75  ger program.resu
f400: 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74  mes execution at
f410: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
f420: 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e  f the next step.
f430: 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
f440: 72 61 67 6d 65 6e 74 20 74 65 6d 70 74 72 69 67  ragment temptrig
f450: 20 7b 54 45 4d 50 20 74 72 69 67 67 65 72 73 20   {TEMP triggers 
f460: 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c  on non-TEMP tabl
f470: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45  es}</tcl>.<h3>TE
f480: 4d 50 20 54 72 69 67 67 65 72 73 20 6f 6e 20 4e  MP Triggers on N
f490: 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65 73 3c 2f  on-TEMP Tables</
f4a0: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 72 69 67  h3>..<p>^(A trig
f4b0: 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20 65 78 69  ger normally exi
f4c0: 73 74 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20  sts in the same 
f4d0: 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20  database as the 
f4e0: 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61 66 74 65  table named.afte
f4f0: 72 20 74 68 65 20 22 4f 4e 22 20 6b 65 79 77 6f  r the "ON" keywo
f500: 72 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  rd in the CREATE
f510: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f520: 6e 74 2e 20 20 45 78 63 65 70 74 2c 20 69 74 20  nt.  Except, it 
f530: 69 73 0a 70 6f 73 73 69 62 6c 65 20 74 6f 20 63  is.possible to c
f540: 72 65 61 74 65 20 61 20 54 45 4d 50 20 54 52 49  reate a TEMP TRI
f550: 47 47 45 52 20 6f 6e 20 61 20 74 61 62 6c 65 20  GGER on a table 
f560: 69 6e 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  in another datab
f570: 61 73 65 2e 29 5e 20 20 0a 53 75 63 68 20 61 20  ase.)^  .Such a 
f580: 74 72 69 67 67 65 72 20 77 69 6c 6c 20 6f 6e 6c  trigger will onl
f590: 79 20 66 69 72 65 20 77 68 65 6e 20 63 68 61 6e  y fire when chan
f5a0: 67 65 73 0a 61 72 65 20 6d 61 64 65 20 74 6f 20  ges.are made to 
f5b0: 74 68 65 20 74 61 72 67 65 74 20 74 61 62 6c 65  the target table
f5c0: 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61 74   by the applicat
f5d0: 69 6f 6e 20 74 68 61 74 20 64 65 66 69 6e 65 64  ion that defined
f5e0: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 4f 74   the trigger..Ot
f5f0: 68 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  her applications
f600: 20 74 68 61 74 20 6d 6f 64 69 66 79 20 74 68 65   that modify the
f610: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
f620: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 65  ot be able to se
f630: 65 20 74 68 65 0a 54 45 4d 50 20 74 72 69 67 67  e the.TEMP trigg
f640: 65 72 20 61 6e 64 20 68 65 6e 63 65 20 63 61 6e  er and hence can
f650: 6e 6f 74 20 72 75 6e 20 74 68 65 20 74 72 69 67  not run the trig
f660: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  ger.</p>..<p>Whe
f670: 6e 20 64 65 66 69 6e 69 6e 67 20 61 20 54 45 4d  n defining a TEM
f680: 50 20 74 72 69 67 67 65 72 20 6f 6e 20 61 20 6e  P trigger on a n
f690: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2c 20 69  on-TEMP table, i
f6a0: 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
f6b0: 6f 0a 73 70 65 63 69 66 79 20 74 68 65 20 64 61  o.specify the da
f6c0: 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
f6d0: 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c  he non-TEMP tabl
f6e0: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
f6f0: 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .in the followin
f700: 67 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 74 20  g statement, it 
f710: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
f720: 73 61 79 20 22 6d 61 69 6e 2e 74 61 62 31 22 20  say "main.tab1" 
f730: 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75 73 74 20  instead.of just 
f740: 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c  "tab1":</p>..<bl
f750: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
f760: 52 45 41 54 45 20 54 45 4d 50 20 54 52 49 47 47  REATE TEMP TRIGG
f770: 45 52 20 65 78 31 20 41 46 54 45 52 20 49 4e 53  ER ex1 AFTER INS
f780: 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c  ERT ON <b>main.<
f790: 2f 62 3e 74 61 62 31 20 42 45 47 49 4e 20 2e 2e  /b>tab1 BEGIN ..
f7a0: 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ..</pre></blockq
f7b0: 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72  uote>..<p>Failur
f7c0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
f7d0: 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 6f 6e 20   schema name on 
f7e0: 74 68 65 20 74 61 72 67 65 74 20 74 61 62 6c 65  the target table
f7f0: 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e   could result.in
f800: 20 74 68 65 20 54 45 4d 50 20 74 72 69 67 67 65   the TEMP trigge
f810: 72 20 62 65 69 6e 67 20 72 65 61 74 74 61 63 68  r being reattach
f820: 65 64 20 74 6f 20 61 20 74 61 62 6c 65 20 77 69  ed to a table wi
f830: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
f840: 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64 61 74 61   in.another data
f850: 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 61 6e  base whenever an
f860: 79 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20  y schema change 
f870: 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  occurs.</p>..<tc
f880: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
f890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f8d0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
f8e0: 54 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65  TE VIEW} {create
f8f0: 76 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56  view} {{CREATE V
f900: 49 45 57 7d 20 76 69 65 77 20 56 49 45 57 20 2a  IEW} view VIEW *
f910: 76 69 65 77 73 7d 0a 0a 52 65 63 75 72 73 69 76  views}..Recursiv
f920: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
f930: 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a  reate-view-stmt.
f940: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f950: 43 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d  CREATE VIEW comm
f960: 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61  and assigns a na
f970: 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b  me to a pre-pack
f980: 61 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73  aged .[SELECT] s
f990: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65  tatement. .^Once
f9a0: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
f9b0: 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20  ated, it can be 
f9c0: 75 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d  used in the FROM
f9d0: 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68   clause.of anoth
f9e0: 65 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70  er [SELECT] in p
f9f0: 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
fa00: 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  name..</p>..<p>^
fa10: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
fa20: 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79   "TEMPORARY" key
fa30: 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62  word occurs in b
fa40: 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a  etween "CREATE".
fa50: 61 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e 20  and "VIEW" then 
fa60: 74 68 65 20 76 69 65 77 20 74 68 61 74 20 69 73  the view that is
fa70: 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79   created is only
fa80: 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a   visible to the.
fa90: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
faa0: 74 69 6f 6e 5d 20 74 68 61 74 20 63 72 65 61 74  tion] that creat
fab0: 65 64 20 69 74 20 61 6e 64 20 69 73 20 61 75 74  ed it and is aut
fac0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
fad0: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
fae0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
faf0: 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a  is closed.</p>..
fb00: 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79 74 65 72  <p> ^If a <yyter
fb10: 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79  m>schema-name</y
fb20: 79 74 65 72 6d 3e 20 69 73 20 73 70 65 63 69 66  yterm> is specif
fb30: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
fb40: 65 77 20 0a 69 73 20 63 72 65 61 74 65 64 20 69  ew .is created i
fb50: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
fb60: 64 61 74 61 62 61 73 65 2e 0a 5e 49 74 20 69 73  database..^It is
fb70: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
fb80: 63 69 66 79 20 62 6f 74 68 20 61 20 3c 79 79 74  cify both a <yyt
fb90: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
fba0: 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20 74 68 65  /yyterm>.and the
fbb0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e   TEMP keyword on
fbc0: 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73 20   a VIEW, unless 
fbd0: 74 68 65 20 3c 79 79 74 65 72 6d 3e 73 63 68 65  the <yyterm>sche
fbe0: 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ma-name</yyterm>
fbf0: 20 0a 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66   .is "temp"..^If
fc00: 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20   no schema name 
fc10: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e  is specified, an
fc20: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
fc30: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
fc40: 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63  t,.the VIEW is c
fc50: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
fc60: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
fc70: 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74  ..<p>^You cannot
fc80: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
fc90: 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  RT], or [UPDATE]
fca0: 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73   a view.  ^Views
fcb0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
fcc0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77  in SQLite.  ^How
fcd0: 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61  ever, in many ca
fce0: 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20  ses you can use 
fcf0: 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74  an.[INSTEAD OF t
fd00: 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76  rigger] on the v
fd10: 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73  iew to accomplis
fd20: 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e  h .the same thin
fd30: 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72  g.  ^Views are r
fd40: 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65  emoved .with the
fd50: 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d   [DROP VIEW] com
fd60: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
fd70: 66 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75  f a <yyterm>colu
fd80: 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
fd90: 20 6c 69 73 74 20 66 6f 6c 6c 6f 77 73 20 0a 74   list follows .t
fda0: 68 65 20 3c 79 79 74 65 72 6d 3e 76 69 65 77 2d  he <yyterm>view-
fdb0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2c 20 74  name</yyterm>, t
fdc0: 68 65 6e 20 74 68 61 74 20 6c 69 73 74 20 64 65  hen that list de
fdd0: 74 65 72 6d 69 6e 65 73 0a 74 68 65 20 6e 61 6d  termines.the nam
fde0: 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  es of the column
fdf0: 73 20 66 6f 72 20 74 68 65 20 76 69 65 77 2e 20  s for the view. 
fe00: 20 5e 49 66 20 74 68 65 20 3c 79 79 74 65 72 6d   ^If the <yyterm
fe10: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
fe20: 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 6f 6d  term>.list is om
fe30: 69 74 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  itted, then the 
fe40: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c  names of the col
fe50: 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 65 77  umns in the view
fe60: 20 61 72 65 20 64 65 72 69 76 65 64 0a 66 72 6f   are derived.fro
fe70: 6d 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  m the names of t
fe80: 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  he result-set co
fe90: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 5b 73 65  lumns in the [se
fea0: 6c 65 63 74 2d 73 74 6d 74 5d 2e 0a 4e 6f 74 65  lect-stmt]..Note
feb0: 20 74 68 61 74 20 74 68 65 20 3c 79 79 74 65 72   that the <yyter
fec0: 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
fed0: 79 74 65 72 6d 3e 20 6c 69 73 74 20 73 79 6e 74  yterm> list synt
fee0: 61 78 20 69 73 20 6f 6e 6c 79 0a 73 75 70 70 6f  ax is only.suppo
fef0: 72 74 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  rted in SQLite v
ff00: 65 72 73 69 6f 6e 73 20 33 2e 39 2e 30 20 28 5b  ersions 3.9.0 ([
ff10: 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 20 61  dateof:3.9.0]) a
ff20: 6e 64 20 6c 61 74 65 72 2e 0a 0a 3c 74 63 6c 3e  nd later...<tcl>
ff30: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
ff40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ff80: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
ff90: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b  VIRTUAL TABLE} {
ffa0: 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52  createvtab} {{CR
ffb0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
ffc0: 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  LE}}..RecursiveB
ffd0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
ffe0: 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c  ate-virtual-tabl
fff0: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
10000 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62  p>A [virtual tab
10010 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66  le] is an interf
10020 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e  ace to an extern
10030 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f  al storage or co
10040 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65  mputation.engine
10050 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
10060 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20   be a table but 
10070 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
10080 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74  y store informat
10090 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ion.in the datab
100a0 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
100b0 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f  p>In general, yo
100c0 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e  u can do anythin
100d0 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61  g with a [virtua
100e0 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61  l table] that ca
100f0 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61  n be done.with a
10100 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
10110 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79  , except that ^y
10120 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
10130 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67   indices or trig
10140 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61  gers on a.virtua
10150 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20  l table.  ^Some 
10160 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
10170 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
10180 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
10190 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
101a0 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
101b0 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
101c0 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
101d0 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
101e0 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d   <yyterm>module-
101f0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73  name</yyterm> is
10200 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
10210 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c  object that impl
10220 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75  ements.the virtu
10230 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20  al table.  ^The 
10240 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e  <yyterm>module-n
10250 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d 75 73  ame</yyterm> mus
10260 74 20 62 65 20 72 65 67 69 73 74 65 72 65 64 20  t be registered 
10270 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20  with.the SQLite 
10280 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10290 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74  ion using.[sqlit
102a0 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
102b0 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f  ()] or [sqlite3_
102c0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
102d0 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73  ()].prior to iss
102e0 75 69 6e 67 20 74 68 65 20 43 52 45 41 54 45 20  uing the CREATE 
102f0 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
10300 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f  atement..^The mo
10310 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20  dule takes zero 
10320 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65  or more comma-se
10330 70 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74  parated argument
10340 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74  s..^The argument
10350 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62  s can be just ab
10360 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61 73 20  out any text as 
10370 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20 62  long as it has b
10380 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65  alanced.parenthe
10390 73 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65  ses.  The argume
103a0 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73 75 66  nt syntax is suf
103b0 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61  ficiently genera
103c0 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d  l that the.argum
103d0 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65  ents can be made
103e0 20 74 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63   to appear as [c
103f0 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
10400 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f  s] in a traditio
10410 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  nal.[CREATE TABL
10420 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  E] statement.  .
10430 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74  ^SQLite passes t
10440 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65  he module argume
10450 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20  nts directly.to 
10460 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e  the [xCreate] an
10470 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74  d [xConnect] met
10480 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75  hods of the modu
10490 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
104a0 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  n.without any in
104b0 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49  terpretation.  I
104c0 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
104d0 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d  ibility.of the m
104e0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
104f0 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e  tion to parse an
10500 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20  d interpret its 
10510 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f  own arguments.</
10520 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61  p>..<p>^A virtua
10530 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72  l table is destr
10540 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f  oyed using the o
10550 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41  rdinary.[DROP TA
10560 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
10570 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f   There is no.DRO
10580 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  P VIRTUAL TABLE 
10590 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
105a0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
105b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
105f0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c  ####.Section DEL
10600 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45  ETE delete {DELE
10610 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65  TE *DELETEs}..Re
10620 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
10630 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
10640 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
10650 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72  DELETE command r
10660 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66  emoves records f
10670 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64  rom the table id
10680 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 0a  entified by the.
10690 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d 74 61     [qualified-ta
106a0 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70 3e 5e  ble-name]...<p>^
106b0 49 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  If the WHERE cla
106c0 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65  use is not prese
106d0 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  nt, all records 
106e0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  in the table are
106f0 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66   deleted..   ^If
10700 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
10710 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
10720 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77  n only those row
10730 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a  s for which the.
10740 20 20 20 57 48 45 52 45 20 63 6c 61 75 73 65 20     WHERE clause 
10750 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
10760 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61 72 65  ion] is true are
10770 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 52 6f   deleted..   ^Ro
10780 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
10790 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 66   expression is f
107a0 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61 72 65  alse or NULL are
107b0 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68 33 3e   retained...<h3>
107c0 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
107d0 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74  DELETE Statement
107e0 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
107f0 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
10800 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72  >The following r
10810 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
10820 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74 61 74  y to DELETE stat
10830 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
10840 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 20  r within the.   
10850 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
10860 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
10870 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  ment:..<ul>.  <l
10880 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74 65 72  i><p>^The <yyter
10890 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79  m>table-name</yy
108a0 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65 64 20  term> specified 
108b0 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a 20 20  as part of a .  
108c0 20 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65    DELETE stateme
108d0 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 61 20  nt within.    a 
108e0 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
108f0 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
10900 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  .  ^(In other wo
10910 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c 69 3e  rds, the.    <i>
10920 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c  schema-name</i><
10930 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f  b>.</b> prefix o
10940 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
10950 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
10960 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72 69 67  .    within trig
10970 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68 65 20  gers.)^ ^If the 
10980 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
10990 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
109a0 74 61 63 68 65 64 20 69 73 0a 20 20 20 20 6e 6f  tached is.    no
109b0 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61  t in the temp da
109c0 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44 45 4c  tabase, then DEL
109d0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ETE statements w
109e0 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67 65  ithin the trigge
109f0 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73 74 20  r.    body must 
10a00 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62 6c 65  operate on table
10a10 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
10a20 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
10a30 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
10a40 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68 65      to which the
10a50 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
10a60 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54  ched is in the T
10a70 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68  EMP database, th
10a80 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71 75 61  en the.    unqua
10a90 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74  lified name of t
10aa0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
10ab0 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f 6c 76  eleted is resolv
10ac0 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
10ad0 61 79 20 61 73 0a 20 20 20 20 69 74 20 69 73 20  ay as.    it is 
10ae0 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  for a top-level 
10af0 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65  statement (by se
10b00 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74 68  arching first th
10b10 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
10b20 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 6d 61   then.    the ma
10b30 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
10b40 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
10b50 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
10b60 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
10b70 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20 20 20   attached)..    
10b80 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49  .  <li><p>^The I
10b90 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
10ba0 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
10bb0 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
10bc0 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20 20 20  d on DELETE.    
10bd0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
10be0 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
10bf0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
10c00 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
10c10 59 20 63 6c 61 75 73 65 73 20 28 64 65 73 63 72  Y clauses (descr
10c20 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72 65 20  ibed below) are 
10c30 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  unsupported for.
10c40 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
10c50 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
10c60 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e  ggers.</p>.</ul>
10c70 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c  ..<h3>Optional L
10c80 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
10c90 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a  Y clauses</h3>..
10ca0 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69  <p>^(If SQLite i
10cb0 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
10cc0 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
10cd0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
10ce0 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
10cf0 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65  time option, the
10d00 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
10d10 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
10d20 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64  ment is.extended
10d30 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e   by the addition
10d40 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44   of optional ORD
10d50 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
10d60 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a  clauses:)^</p>..
10d70 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
10d80 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c  am delete-stmt-l
10d90 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
10da0 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20 73 74  >^If a DELETE st
10db0 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49  atement has a LI
10dc0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
10dd0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
10de0 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c  f rows that.will
10df0 20 62 65 20 64 65 6c 65 74 65 64 20 69 73 20 66   be deleted is f
10e00 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
10e10 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79  ng the accompany
10e20 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ing expression a
10e30 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f  nd casting.it to
10e40 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
10e50 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73 75 6c  e. ^If the resul
10e60 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75 61 74  t of the evaluat
10e70 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  ing the LIMIT cl
10e80 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65 20 6c  ause.cannot be l
10e90 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
10ea0 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
10eb0 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 61  r value, it is a
10ec0 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e 65 67  n error. ^A .neg
10ed0 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61 6c 75  ative LIMIT valu
10ee0 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  e is interpreted
10ef0 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 20   as "no limit". 
10f00 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
10f10 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73 6f 20  statement .also 
10f20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
10f30 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73  ause, then it is
10f40 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75   similarly evalu
10f50 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
10f60 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61 6c 75   an.integer valu
10f70 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69 73 20  e. Again, it is 
10f80 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
10f90 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
10fa0 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
10fb0 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
10fc0 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72 65 20  er.)^ ^If there 
10fd0 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63 6c 61  is no OFFSET cla
10fe0 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61 6c 63  use, or the calc
10ff0 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72 20 76  ulated.integer v
11000 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69 76 65  alue is negative
11010 2c 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20  , the effective 
11020 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69 73 20  OFFSET value is 
11030 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74  zero...<p>^(If t
11040 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
11050 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
11060 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
11070 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
11080 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74 65 64  ould .be deleted
11090 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
110a0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
110b0 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61  use are sorted a
110c0 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
110d0 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65 20 66  .ORDER BY. The f
110e0 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f  irst <i>M</i> ro
110f0 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d 3c 2f  ws, where <i>M</
11100 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  i> is the value 
11110 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75 61 74  found by.evaluat
11120 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
11130 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
11140 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c 20 61  , are skipped, a
11150 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  nd the following
11160 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72   .<i>N</i>, wher
11170 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 74 68  e <i>N</i> is th
11180 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
11190 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2c  IMIT expression,
111a0 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29 5e 0a   are deleted.)^.
111b0 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65  ^If there are le
111c0 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e  ss than <i>N</i>
111d0 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e 67 20   rows remaining 
111e0 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74 68 65  after taking the
111f0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 0a 69   OFFSET clause.i
11200 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f 72 20  nto account, or 
11210 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  if the LIMIT cla
11220 75 73 65 20 65 76 61 6c 75 61 74 65 64 20 74 6f  use evaluated to
11230 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75   a negative valu
11240 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65 6d 61  e, then all.rema
11250 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65 20 64  ining rows are d
11260 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  eleted...<p>^If 
11270 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
11280 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
11290 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
112a0 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
112b0 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64  would be deleted
112c0 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
112d0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
112e0 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
112f0 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
11300 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
11310 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
11320 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
11330 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
11340 65 20 0a 74 68 65 20 73 75 62 73 65 74 20 74 68  e .the subset th
11350 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20  at are actually 
11360 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54  deleted...<p>^(T
11370 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11380 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45 20 73  se on a DELETE s
11390 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
113a0 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69   only to determi
113b0 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61  ne which.rows fa
113c0 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49  ll within the LI
113d0 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69  MIT. The order i
113e0 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
113f0 20 64 65 6c 65 74 65 64 20 69 73 20 61 72 62 69   deleted is arbi
11400 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
11410 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
11420 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11430 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  se.)^..<tcl>hd_f
11440 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65  ragment truncate
11450 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70  opt {truncate op
11460 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c  timization}</tcl
11470 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61  >.<h3>The Trunca
11480 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c  te Optimization<
11490 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  /h3>..<p>^When t
114a0 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74  he WHERE is omit
114b0 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54  ted from a DELET
114c0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  E statement and 
114d0 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20  the table.being 
114e0 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74  deleted has no t
114f0 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20  riggers,.SQLite 
11500 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  uses an optimiza
11510 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68  tion to erase th
11520 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63  e entire table c
11530 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68  ontent.without h
11540 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65  aving to visit e
11550 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
11560 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c  able individuall
11570 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74  y..This "truncat
11580 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  e" optimization 
11590 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65  makes the delete
115a0 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72   run much faster
115b0 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74  ..Prior to SQLit
115c0 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  e [version 3.6.5
115d0 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 35  ] ([dateof:3.6.5
115e0 5d 29 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65  ]), the truncate
115f0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c   optimization.al
11600 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68  so meant that th
11610 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
11620 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74  es()] and.[sqlit
11630 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
11640 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61  ()] interfaces.a
11650 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68  nd the [count_ch
11660 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69  anges pragma].wi
11670 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ll not actually 
11680 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
11690 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77  r of deleted row
116a0 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65  s.  .That proble
116b0 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64  m has been fixed
116c0 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20   as of [version 
116d0 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a  3.6.5] ([dateof:
116e0 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70 3e 5e 54 68  3.6.5])...<p>^Th
116f0 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
11700 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 70  ization can be p
11710 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
11720 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75 65 72  led for all quer
11730 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69  ies.by recompili
11740 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68 20 74  ng.SQLite with t
11750 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  he [SQLITE_OMIT_
11760 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a  TRUNCATE_OPTIMIZ
11770 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74  ATION] compile-t
11780 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a  ime switch.</p>.
11790 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61 74 65  .<p>The truncate
117a0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61   optimization ca
117b0 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61 62 6c  n also be disabl
117c0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  ed at runtime us
117d0 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
117e0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
117f0 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20 20 5e  )] interface.  ^
11800 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72  If an authorizer
11810 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e   callback.return
11820 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  s [SQLITE_IGNORE
11830 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45  ] for an [SQLITE
11840 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20  _DELETE] action 
11850 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65 20 44  code, then.the D
11860 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f 6e 20  ELETE operation 
11870 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62 75 74  will proceed but
11880 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
11890 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a  timization will.
118a0 62 65 20 62 79 70 61 73 73 65 64 20 61 6e 64 20  be bypassed and 
118b0 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64 65 6c  rows will be del
118c0 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e  eted one by one.
118d0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
118e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
118f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11920 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11930 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41  ion {DETACH DATA
11940 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a 44 45  BASE} detach *DE
11950 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76 65 42  TACH..RecursiveB
11960 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
11970 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ach-stmt.</tcl>.
11980 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
11990 65 6e 74 20 64 65 74 61 63 68 65 73 20 61 6e 20  ent detaches an 
119a0 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62  additional datab
119b0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
119c0 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74 61 63  reviously .attac
119d0 68 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 41  hed using the [A
119e0 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74  TTACH] statement
119f0 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69 6e  .  .^When not in
11a00 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d   [shared cache m
11a10 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f 73  ode], .it is pos
11a20 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
11a30 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
11a40 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
11a50 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
11a60 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
11a70 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
11a80 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
11a90 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
11aa0 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
11ab0 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 5e  rs intact.</p>.^
11ac0 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  In [shared cache
11ad0 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74 69   mode], attempti
11ae0 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74 68 65  ng to attach the
11af0 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66   same database f
11b00 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f 6e  ile more.than on
11b10 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ce results in an
11b20 20 65 72 72 6f 72 2e 0a 0a 0a 3c 74 63 6c 3e 0a   error....<tcl>.
11b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
11b80 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44  ection {DROP IND
11b90 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b  EX} dropindex {{
11ba0 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  DROP INDEX}}..Re
11bb0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
11bc0 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d  gram drop-index-
11bd0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
11be0 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20  ^The DROP INDEX 
11bf0 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
11c00 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64  s an index added
11c10 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54  .with the [CREAT
11c20 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
11c30 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69  nt.  The index i
11c40 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
11c50 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69  oved from.the di
11c60 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61  sk.  The only wa
11c70 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65  y to recover the
11c80 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65   index is to ree
11c90 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72  nter the.appropr
11ca0 69 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44  iate [CREATE IND
11cb0 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EX] command.</p>
11cc0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
11cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d10 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
11d20 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70  DROP TABLE} drop
11d30 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42  table {{DROP TAB
11d40 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  LE}}..RecursiveB
11d50 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
11d60 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74  p-table-stmt.</t
11d70 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
11d80 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  P TABLE statemen
11d90 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c  t removes a tabl
11da0 65 20 61 64 64 65 64 20 77 69 74 68 20 74 68 65  e added with the
11db0 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
11dc0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
11dd0 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
11de0 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65  s the.table name
11df0 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64 20  .  ^The dropped 
11e00 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65 74  table is complet
11e10 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
11e20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 73   the database .s
11e30 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64 69  chema and the di
11e40 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74 61  sk file.  The ta
11e50 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 72  ble can not be r
11e60 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c 6c  ecovered.  .^All
11e70 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72 69   indices and tri
11e80 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64  ggers.associated
11e90 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
11ea0 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65 64  are also deleted
11eb0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
11ec0 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53 54  ptional IF EXIST
11ed0 53 20 63 6c 61 75 73 65 20 73 75 70 70 72 65 73  S clause suppres
11ee0 73 65 73 20 74 68 65 20 65 72 72 6f 72 20 74 68  ses the error th
11ef0 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
11f00 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65 20  y.result if the 
11f10 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65  table does not e
11f20 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  xist.</p>..<p>^I
11f30 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
11f40 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
11f50 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50 20  enabled, a DROP 
11f60 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70 65  TABLE command pe
11f70 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69 63  rforms an.implic
11f80 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45 4c  it [DELETE | DEL
11f90 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d 61 6e  ETE FROM] comman
11fa0 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e  d before removin
11fb0 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d  g the.table from
11fc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
11fd0 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67  hema. ^Any trigg
11fe0 65 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ers attached to 
11ff0 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72  the table are.dr
12000 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64  opped from the d
12010 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62  atabase schema b
12020 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63  efore the implic
12030 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 0a 69  it DELETE FROM.i
12040 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  s executed, so t
12050 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65  his cannot cause
12060 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f   any triggers to
12070 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61   fire. By contra
12080 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74  st, ^an.implicit
12090 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f 65   DELETE FROM doe
120a0 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66  s cause any conf
120b0 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20  igured.[foreign 
120c0 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20  key actions] to 
120d0 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66  take place. .^If
120e0 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45   the implicit DE
120f0 4c 45 54 45 20 46 52 4f 4d 20 65 78 65 63 75 74  LETE FROM execut
12100 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20 61 20  ed.as part of a 
12110 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61  DROP TABLE comma
12120 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e 79 20  nd violates any 
12130 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
12140 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
12150 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73 20 72  s,.an error is r
12160 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20  eturned and the 
12170 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f  table is not dro
12180 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65 20 69  pped. ^If .the i
12190 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
121a0 52 4f 4d 20 63 61 75 73 65 73 20 61 6e 79 20 0a  ROM causes any .
121b0 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
121c0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
121d0 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
121e0 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
121f0 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
12200 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
12210 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
12220 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
12230 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
12240 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
12250 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
12260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
122a0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
122b0 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
122c0 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
122d0 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73  RIGGER}}..Recurs
122e0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
122f0 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74   drop-trigger-st
12300 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
12310 68 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20  he DROP TRIGGER 
12320 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
12330 73 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61  s a trigger crea
12340 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45  ted by the .[CRE
12350 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
12360 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65  tement. ^Once re
12370 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67  moved, the trigg
12380 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73  er definition is
12390 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65   no.longer prese
123a0 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  nt in the sqlite
123b0 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69  _master (or sqli
123c0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
123d0 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74  table and is.not
123e0 20 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75   fired by any su
123f0 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c  bsequent INSERT,
12400 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
12410 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  E statements...<
12420 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69  p>^Note that tri
12430 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
12440 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20  tically dropped 
12450 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61  when the associa
12460 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f  ted table is.dro
12470 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  pped...<tcl>.###
12480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
124c0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
124d0 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20  ion {DROP VIEW} 
124e0 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20  dropview {{DROP 
124f0 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76  VIEW}}..Recursiv
12500 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
12510 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f  rop-view-stmt.</
12520 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
12530 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
12540 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
12550 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
12560 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20  [CREATE VIEW] . 
12570 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65   statement. ^The
12580 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
12590 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
125a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
125b0 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20  hema, but .  no 
125c0 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74  actual data in t
125d0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61  he underlying ba
125e0 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64  se tables is mod
125f0 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ified...<p>^(The
12600 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73   view to drop is
12610 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
12620 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64  he view-name and
12630 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73 63 68   optional .  sch
12640 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69 66 69  ema-name specifi
12650 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
12660 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
12670 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20 20 72  ement. This .  r
12680 65 66 65 72 65 6e 63 65 20 69 73 20 72 65 73 6f  eference is reso
12690 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 73  lved using the s
126a0 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64 75 72  tandard procedur
126b0 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72 65  e for [object re
126c0 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70  solution].)^..<p
126d0 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70 65 63  >.  ^If the spec
126e0 69 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f  ified view canno
126f0 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 74  t be found and t
12700 68 65 20 49 46 20 45 58 49 53 54 53 20 63 6c 61  he IF EXISTS cla
12710 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20 70 72  use is not .  pr
12720 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20  esent, it is an 
12730 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65 20 73  error. ^If the s
12740 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61  pecified view ca
12750 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e  nnot be found an
12760 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53 54 53  d an IF.  EXISTS
12770 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
12780 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50 20 56  nt in the DROP V
12790 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  IEW statement, t
127a0 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hen the statemen
127b0 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  t.  is a no-op..
127c0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
127d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
127e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
127f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12810 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
12820 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63 74 20  Database Object 
12830 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e 7d  Name Resolution}
12840 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a 65   {naming} {{obje
12850 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d 0a  ct resolution}}.
12860 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49 6e  </tcl>..<p>.  In
12870 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74 61 62   SQLite, a datab
12880 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20 74 61  ase object (a ta
12890 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67  ble, index, trig
128a0 67 65 72 20 6f 72 20 76 69 65 77 29 20 69 73 20  ger or view) is 
128b0 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62 79 20  identified.  by 
128c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
128d0 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6e  object and the n
128e0 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
128f0 61 73 65 20 74 68 61 74 20 69 74 20 72 65 73 69  ase that it resi
12900 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74 61 62  des in. .  Datab
12910 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61 79 20  ase objects may 
12920 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 6d 61  reside in the ma
12930 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
12940 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20   temp database, 
12950 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54 41  or in.  an [ATTA
12960 43 48 7c 61 74 74 61 63 68 65 64 20 64 61 74 61  CH|attached data
12970 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54 68  base]...<p>.  Th
12980 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20  e syntax of the 
12990 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b 44  [DROP TABLE], [D
129a0 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52 4f  ROP INDEX], [DRO
129b0 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20 54  P VIEW], [DROP T
129c0 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49 4e  RIGGER],.  [REIN
129d0 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41 42  DEX], [ALTER TAB
129e0 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74 68  LE] and many oth
129f0 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c 20  er commands all 
12a00 70 65 72 6d 69 74 20 74 68 65 20 75 73 65 72 20  permit the user 
12a10 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61 20 64  to.  specify a d
12a20 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 65  atabase object e
12a30 69 74 68 65 72 20 62 79 20 69 74 73 20 6e 61 6d  ither by its nam
12a40 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20 61  e alone, or by a
12a50 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 0a   combination of.
12a60 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64 20 74    its name and t
12a70 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73 20 64  he name of its d
12a80 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20 6e 6f  atabase. ^(If no
12a90 20 64 61 74 61 62 61 73 65 20 69 73 20 73 70 65   database is spe
12aa0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
12ab0 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 72   of the object r
12ac0 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 53  eference, then S
12ad0 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 20 74  QLite searches t
12ae0 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61 6e  he main, temp an
12af0 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 0a 20  d all attached. 
12b00 20 64 61 74 61 62 61 73 65 73 20 66 6f 72 20 61   databases for a
12b10 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61 20  n object with a 
12b20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20 54  matching name. T
12b30 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
12b40 20 69 73 20 73 65 61 72 63 68 65 64 0a 20 20 66   is searched.  f
12b50 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20 62  irst, followed b
12b60 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  y the main datab
12b70 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61 6c  ase, followed al
12b80 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
12b90 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20 6f 72  ases in the.  or
12ba0 64 65 72 20 74 68 61 74 20 74 68 65 79 20 77 65  der that they we
12bb0 72 65 20 61 74 74 61 63 68 65 64 2e 20 54 68 65  re attached. The
12bc0 20 72 65 66 65 72 65 6e 63 65 20 72 65 73 6f 6c   reference resol
12bd0 76 65 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  ves to the first
12be0 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e 29   match.  found.)
12bf0 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a  ^ For example:..
12c00 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f 2a  <pre>^(.      /*
12c10 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e 61 6d   Add a table nam
12c20 65 64 20 27 74 31 27 20 74 6f 20 74 68 65 20 74  ed 't1' to the t
12c30 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61 6e  emp, main and an
12c40 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12c50 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54 54 41  se */.      ATTA
12c60 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41 53 20  CH 'file.db' AS 
12c70 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54  aux;.      CREAT
12c80 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29  E TABLE t1(x, y)
12c90 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
12ca0 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78 2c 20  EMP TABLE t1(x, 
12cb0 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
12cc0 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 78 2c   TABLE aux.t1(x,
12cd0 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f 50   y);..      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 74 65 6d 70 20 64 61 74 61 62 61 73   in temp databas
12d10 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20  e */.      DROP 
12d20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20  TABLE t1;       
12d30 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20    /* Drop table 
12d40 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  in main database
12d50 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54   */.      DROP T
12d60 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20  ABLE t1;        
12d70 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69   /* Drop table i
12d80 6e 20 61 75 78 20 64 61 74 61 62 61 73 65 20 2a  n aux database *
12d90 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a  /.)^</pre>..<p>.
12da0 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e    ^If a schema n
12db0 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
12dc0 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 6f   as part of an o
12dd0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
12de0 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20 65 69   it must be.  ei
12df0 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72 20  ther "main", or 
12e00 22 74 65 6d 70 22 20 6f 72 20 74 68 65 20 73 63  "temp" or the sc
12e10 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61 6e 20  hema-name of an 
12e20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
12e30 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68 65 72  e..  ^Like other
12e40 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73   SQL identifiers
12e50 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65 73 20 61  , schema names a
12e60 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  re case-insensit
12e70 69 76 65 2e 0a 20 20 5e 49 66 20 61 20 73 63 68  ive..  ^If a sch
12e80 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
12e90 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79  ified, then only
12ea0 20 74 68 61 74 20 6f 6e 65 20 73 63 68 65 6d 61   that one schema
12eb0 20 69 73 20 73 65 61 72 63 68 65 64 20 66 6f 72   is searched for
12ec0 0a 20 20 74 68 65 20 6e 61 6d 65 64 20 6f 62 6a  .  the named obj
12ed0 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73 74  ect...<p>.  Most
12ee0 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
12ef0 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f  es may only reso
12f00 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69 66 69  lve to a specifi
12f10 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74  c type of object
12f20 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65 20   (for.  example 
12f30 61 20 72 65 66 65 72 65 6e 63 65 20 74 68 61 74  a reference that
12f40 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 44 52   is part of a DR
12f50 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  OP TABLE stateme
12f60 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f  nt may only reso
12f70 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62 6c 65  lve.  to a table
12f80 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e 20   object, not an 
12f90 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f  index, trigger o
12fa0 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76 65 72  r view). However
12fb0 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78 74   in some context
12fc0 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49 4e  s .  (e.g. [REIN
12fd0 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74 20  DEX]) an object 
12fe0 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20 62 65  reference may be
12ff0 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72 65   resolve to more
13000 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a 20   than one type. 
13010 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68 65   of object. ^Whe
13020 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61 74 61  n searching data
13030 62 61 73 65 20 73 63 68 65 6d 61 73 20 66 6f 72  base schemas for
13040 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2c   a named object,
13050 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20 74 79   objects of.  ty
13060 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  pes that cannot 
13070 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 63  be used in the c
13080 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 72 65  ontext of the re
13090 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c 77 61  ference are alwa
130a0 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a 0a  ys .  ignored...
130b0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
130c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
130f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13100 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50  ####.Section EXP
13110 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50  LAIN explain EXP
13120 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67  LAIN..BubbleDiag
13130 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74  ram sql-stmt.</t
13140 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20  cl>..<p>^An SQL 
13150 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
13160 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
13170 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
13180 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
13190 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
131a0 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68  RY PLAN".  ^Eith
131b0 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  er modification 
131c0 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73  causes the.SQL s
131d0 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61  tatement to beha
131e0 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e  ve as a query an
131f0 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f  d to return info
13200 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f  rmation about.ho
13210 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  w the SQL statem
13220 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  ent would have o
13230 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45  perated if the E
13240 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f  XPLAIN keyword o
13250 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65  r.phrase had bee
13260 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a  n omitted.</p>..
13270 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72  <p>The output fr
13280 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45  om EXPLAIN and E
13290 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
132a0 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  N is intended fo
132b0 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e  r.interactive an
132c0 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62  alysis and troub
132d0 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e  leshooting only.
132e0 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66    The details of
132f0 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72   the .output for
13300 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63 74 20  mat are subject 
13310 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  to change from o
13320 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51  ne release of SQ
13330 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74  Lite to the next
13340 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73  ..Applications s
13350 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58  hould not use EX
13360 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e  PLAIN or EXPLAIN
13370 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63   QUERY PLAN sinc
13380 65 0a 74 68 65 69 72 20 65 78 61 63 74 20 62 65  e.their exact be
13390 68 61 76 69 6f 72 20 69 73 20 76 61 72 69 61 62  havior is variab
133a0 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72 74  le and only part
133b0 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65 64  ially documented
133c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
133d0 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
133e0 6f 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69  ord appears by i
133f0 74 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20  tself it causes 
13400 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f  the statement.to
13410 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65   behave as a que
13420 72 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ry that returns 
13430 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
13440 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  .[virtual machin
13450 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20  e instructions] 
13460 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75 73  it would have us
13470 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68  ed to execute th
13480 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74 68  e command had.th
13490 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72  e EXPLAIN keywor
134a0 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65  d not been prese
134b0 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45 58  nt. ^When the EX
134c0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
134d0 20 70 68 72 61 73 65 0a 61 70 70 65 61 72 73 2c   phrase.appears,
134e0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72   the statement r
134f0 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76 65  eturns high-leve
13500 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65  l information re
13510 67 61 72 64 69 6e 67 20 74 68 65 20 71 75 65 72  garding the quer
13520 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75 6c  y.plan that woul
13530 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65 64  d have been used
13540 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e 20 51  ...The EXPLAIN Q
13550 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e  UERY PLAN comman
13560 64 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69  d is described i
13570 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65 72  n .[explain quer
13580 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74 61  y plan|more deta
13590 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c 3e  il here]...<tcl>
135a0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
135b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
135f0 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69  Section expressi
13600 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72 65 73  on expr {*expres
13610 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e  sion {expression
13620 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75 72   syntax}}..Recur
13630 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
13640 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c  m expr.</tcl>..<
13650 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
13660 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
13670 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
13680 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
13690 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
136a0 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
136b0 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
136c0 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
136d0 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
136e0 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
136f0 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
13700 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
13710 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
13720 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
13730 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
13740 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
13750 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
13760 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
13770 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
13780 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
13790 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
137a0 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
137b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
137c0 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
137d0 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
137e0 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
137f0 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
13800 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
13810 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
13820 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
13830 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
13840 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
13850 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
13860 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
13870 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
13880 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
13890 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
138a0 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e  IS   IS NOT   IN
138b0 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20     LIKE   GLOB  
138c0 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a   MATCH   REGEXP.
138d0 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
138e0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
138f0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70  ote>)^..<p>^(Sup
13900 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65  ported unary pre
13910 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72  fix operators ar
13920 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62  e these:</p>..<b
13930 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
13940 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
13950 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20  2cf0"><big>-    
13960 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62  +    ~    NOT</b
13970 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  ig></font>.</pre
13980 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
13990 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
139a0 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f  nt collateop {CO
139b0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c  LLATE operator}<
139c0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f  /tcl>.<p>^The CO
139d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69  LLATE operator i
139e0 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69  s a unary postfi
139f0 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20  x.operator that 
13a00 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61  assigns a [colla
13a10 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74  ting sequence] t
13a20 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  o an expression.
13a30 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  .^The COLLATE op
13a40 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67  erator has a hig
13a50 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28  her precedence (
13a60 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74  binds more tight
13a70 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62 69 6e  ly) than any.bin
13a80 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61 6e 64  ary operator and
13a90 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65 66 69   any unary prefi
13aa0 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63 65 70  x operator excep
13ab0 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45 20  t "~"..(COLLATE 
13ac0 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73 73 6f  and "~" are asso
13ad0 63 69 61 74 69 76 65 20 73 6f 20 74 68 65 69 72  ciative so their
13ae0 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72 20 64   binding order d
13af0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e 29  oes not matter.)
13b00 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  .^The collating 
13b10 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
13b20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  the COLLATE oper
13b30 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74  ator overrides t
13b40 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he.collating seq
13b50 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64  uence determined
13b60 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20   by the COLLATE 
13b70 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c  clause in a tabl
13b80 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  e.[column defini
13b90 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b  tion]..See the [
13ba0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
13bb0 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73  ce| detailed dis
13bc0 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61  cussion on colla
13bd0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a  ting sequences].
13be0 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  in the [datatype
13bf0 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20 53   | Datatype In S
13c00 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74  QLite3] document
13c10 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
13c20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70  information..</p
13c30 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  >..<tcl>hd_puts 
13c40 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20  ".<p>^The unary 
13c50 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
13c60 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70  or +] is a no-op
13c70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70  .  ^It can be ap
13c80 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73  plied.to strings
13c90 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73  , numbers, blobs
13ca0 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20   or NULL and it 
13cb0 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 61  always returns a
13cc0 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65   result.with the
13cd0 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74   same value as t
13ce0 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22  he operand.</p>"
13cf0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  </tcl>..<p>Note 
13d00 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74  that there are t
13d10 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66  wo variations of
13d20 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20   the equals and 
13d30 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61  not equals.opera
13d40 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63  tors.  ^Equals c
13d50 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74  an be either..<t
13d60 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70  cl>.hd_puts "[Op
13d70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70  erator =] or [Op
13d80 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65  erator ==]..^The
13d90 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72   non-equals oper
13da0 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68  ator can be eith
13db0 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  er.[Operator !=]
13dc0 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26   or [Operator {&
13dd0 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20  lt;&gt;}]..^The 
13de0 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70  [Operator ||] op
13df0 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63  erator is \"conc
13e00 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a  atenate\" - it j
13e10 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68  oins together.th
13e20 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66  e two strings of
13e30 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e   its operands..^
13e40 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  The operator [Op
13e50 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74  erator %] output
13e60 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  s the integer va
13e70 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20  lue of its left 
13e80 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20  .operand modulo 
13e90 69 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e  its right operan
13ea0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
13eb0 64 73 2c 20 74 68 65 0a 6f 70 65 72 61 74 6f 72  ds, the.operator
13ec0 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 77 6f   [Operator %] wo
13ed0 72 6b 73 20 69 6e 20 53 51 4c 69 74 65 20 74 68  rks in SQLite th
13ee0 65 20 73 61 6d 65 20 61 73 20 69 74 20 64 6f 65  e same as it doe
13ef0 73 0a 69 6e 20 41 4e 53 49 2d 43 2e 3c 2f 70 3e  s.in ANSI-C.</p>
13f00 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
13f10 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
13f20 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65  perator is eithe
13f30 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  r a numeric valu
13f40 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65  e or .NULL, exce
13f50 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt for the [Oper
13f60 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
13f70 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
13f80 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76  which always .ev
13f90 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
13fa0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74  r NULL or a text
13fb0 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64   value.</p>"..hd
13fc0 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e  _fragment {isisn
13fd0 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72  ot} {IS operator
13fe0 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  } {IS NOT operat
13ff0 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70  or}..hd_puts "<p
14000 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  >^The [Operator 
14010 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
14020 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72  r {IS NOT}] oper
14030 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20  ators work.like 
14040 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64  [Operator =] and
14050 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65   [Operator !=] e
14060 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f  xcept when one o
14070 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70  r both of the.op
14080 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e  erands are NULL.
14090 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
140a0 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  if both operands
140b0 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   are NULL, then 
140c0 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20  the.IS operator 
140d0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28  evaluates to 1 (
140e0 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53  true) and the IS
140f0 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76   NOT operator ev
14100 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61  aluates.to 0 (fa
14110 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70  lse). ^If one op
14120 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e  erand is NULL an
14130 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e  d the other is n
14140 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20  ot, then the.IS 
14150 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14160 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20  es to 0 (false) 
14170 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
14180 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72  perator is 1 (tr
14190 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20  ue)..^It is not 
141a0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20  possible for an 
141b0 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70  IS or IS NOT exp
141c0 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75  ression to evalu
141d0 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70  ate to NULL..^Op
141e0 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f  erators [Operato
141f0 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
14200 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61  tor {IS NOT}] ha
14210 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65  ve the same .pre
14220 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72  cedence as [Oper
14230 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e  ator =]."..<tcl>
14240 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76  hd_fragment litv
14250 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61  alue {literal va
14260 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c  lue}</tcl>.<h3>L
14270 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28 43  iteral Values (C
14280 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c  onstants)</h3>.<
14290 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  p>.A literal val
142a0 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ue represents a 
142b0 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72  constant..^Liter
142c0 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65  al values may be
142d0 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74   integers, float
142e0 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
142f0 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42  s, strings,.BLOB
14300 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e  s, or NULLs..<p>
14310 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  .The syntax for 
14320 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61  integer and floa
14330 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
14340 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  als (collectivel
14350 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72  y."numeric liter
14360 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62  als") is shown b
14370 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  y the following 
14380 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74  diagram:</p>..<t
14390 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
143a0 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c   numeric-literal
143b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66  </tcl>..<p>.^(If
143c0 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72   a numeric liter
143d0 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c  al has a decimal
143e0 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70   point or an exp
143f0 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75  onentiation.clau
14400 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61 67  se or if its mag
14410 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73 20 74  nitude is less t
14420 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  han -92233720368
14430 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65 61  54775808 or.grea
14440 74 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32  ter than 9223372
14450 30 33 36 38 35 34 37 37 35 38 30 37 2c 20 74 68  036854775807, th
14460 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74  en it is a float
14470 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
14480 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73 20  l..Otherwise is 
14490 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67 65  it is an  intege
144a0 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68  r literal.)^.^Th
144b0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
144c0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
144d0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
144e0 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
144f0 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
14500 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
14510 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
14520 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
14530 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
14540 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
14550 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
14560 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
14570 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
14580 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
14590 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
145a0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
145b0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
145c0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
145d0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
145e0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
145f0 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65 78  ment hexint {hex
14600 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
14610 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78 61   literals} {hexa
14620 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
14630 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61  }</tcl>.<p>^Hexa
14640 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
14650 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20  literals follow 
14660 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e  the C-language n
14670 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20  otation of."0x" 
14680 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64  or "0X" followed
14690 20 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c 20   by hexadecimal 
146a0 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61  digits..^For exa
146b0 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65 61  mple, 0x1234 mea
146c0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 34  ns the same as 4
146d0 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30 30  660.and 0x800000
146e0 30 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e 73  0000000000 means
146f0 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39 32   the same as -92
14700 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
14710 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d 61  8.. ^(Hexadecima
14720 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61  l integer litera
14730 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72 65 74  ls are interpret
14740 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77 6f  ed as 64-bit.two
14750 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  's-complement in
14760 74 65 67 65 72 73 20 61 6e 64 20 61 72 65 20 74  tegers and are t
14770 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73  hus limited.to s
14780 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63 61  ixteen significa
14790 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70 72 65  nt digits of pre
147a0 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72  cision.)^.Suppor
147b0 74 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d 61  t for hexadecima
147c0 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73 20 61  l integers was a
147d0 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 0a 76  dded to SQLite.v
147e0 65 72 73 69 6f 6e 20 33 2e 38 2e 36 20 28 5b 64  ersion 3.8.6 ([d
147f0 61 74 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e 0a 5e  ateof:3.8.6])..^
14800 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  For backwards co
14810 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65  mpatibility, the
14820 20 22 30 78 22 20 68 65 78 61 64 65 63 69 6d 61   "0x" hexadecima
14830 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69  l integer.notati
14840 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72  on is only under
14850 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c  stood by the SQL
14860 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73 65 72   language parser
14870 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70  , not by the.typ
14880 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f  e conversions ro
14890 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67  utines..^(String
148a0 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a   variables that.
148b0 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72  contain text for
148c0 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61  matted like hexa
148d0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
148e0 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72   are not.interpr
148f0 65 74 65 64 20 61 73 20 68 65 78 61 64 65 63 69  eted as hexadeci
14900 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65  mal integers whe
14910 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73  n coercing the s
14920 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f  tring value.into
14930 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20   an integer due 
14940 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  to a [CAST expre
14950 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20  ssion] or for a 
14960 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
14970 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  ].transformation
14980 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72   or prior to per
14990 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69  forming a numeri
149a0 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66  c operation or f
149b0 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e  or.any other run
149c0 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e  -time conversion
149d0 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65  s.)^  ^(When coe
149e0 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76  rcing a.string v
149f0 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d  alue in the form
14a00 61 74 20 6f 66 20 61 20 68 65 78 61 64 65 63 69  at of a hexadeci
14a10 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  mal integer into
14a20 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75   an integer.valu
14a30 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  e, the conversio
14a40 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20  n process stops 
14a50 77 68 65 6e 20 74 68 65 20 27 78 27 20 63 68 61  when the 'x' cha
14a60 72 61 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73  racter is seen.s
14a70 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  o the resulting 
14a80 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73  integer value is
14a90 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a   always zero.)^.
14aa0 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e  ^(SQLite only un
14ab0 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 68 65  derstands the he
14ac0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
14ad0 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20  r notation when 
14ae0 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68  it.appears in th
14af0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
14b00 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69  text, not when i
14b10 74 20 61 70 70 65 61 72 73 20 61 73 0a 70 61 72  t appears as.par
14b20 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  t of the content
14b30 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
14b40 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69  .)^..<p> ^A stri
14b50 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66  ng constant is f
14b60 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69  ormed by enclosi
14b70 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e  ng the.string in
14b80 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28   single quotes (
14b90 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71  ').  ^A single q
14ba0 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
14bb0 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
14bc0 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
14bd0 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
14be0 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
14bf0 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
14c00 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
14c10 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
14c20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
14c30 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
14c40 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
14c50 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a   standard SQL...
14c60 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61  <p> ^BLOB litera
14c70 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
14c80 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
14c90 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
14ca0 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
14cb0 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
14cc0 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
14cd0 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27  .  ^(Example: X'
14ce0 35 33 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a  53514C697465')^.
14cf0 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20  .<p>.^A literal 
14d00 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62  value can also b
14d10 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c  e the token "NUL
14d20 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  L"..</p>..<tcl>h
14d30 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61  d_fragment varpa
14d40 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61  ram parameter pa
14d50 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20  rameters {bound 
14d60 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e  parameter} {boun
14d70 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74  d parameters}</t
14d80 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65  cl>.<h3>Paramete
14d90 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76  rs</h3>.<p>.A "v
14da0 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72  ariable" or "par
14db0 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70  ameter" token.sp
14dc0 65 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68  ecifies a placeh
14dd0 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70  older in the exp
14de0 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76  ression for a .v
14df0 61 6c 75 65 20 74 68 61 74 20 69 73 20 66 69 6c  alue that is fil
14e00 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d  led in at runtim
14e10 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  e using the.[sql
14e20 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
14e30 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
14e40 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43  )] family of C/C
14e50 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50  ++ interfaces..P
14e60 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61  arameters can ta
14e70 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73  ke several forms
14e80 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
14e90 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
14ea0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
14eb0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
14ec0 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c  ><b>?</b><i>NNN<
14ed0 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
14ee0 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
14ef0 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  >^(A question ma
14f00 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  rk followed by a
14f10 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f   number <i>NNN</
14f20 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  i> holds a spot 
14f30 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70  for the.NNN-th p
14f40 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d  arameter.  NNN m
14f50 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 31  ust be between 1
14f60 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58   and [SQLITE_MAX
14f70 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
14f80 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ].)^.</td>.</tr>
14f90 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14fa0 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14fb0 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74  top"><b>?</b></t
14fc0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
14fd0 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75  ></td>.<td>^A qu
14fe0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74  estion mark that
14ff0 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64   is not followed
15000 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65   by a number cre
15010 61 74 65 73 20 61 20 70 61 72 61 6d 65 74 65 72  ates a parameter
15020 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f  .with a number o
15030 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ne greater than 
15040 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61  the largest para
15050 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72  meter number alr
15060 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e  eady assigned..^
15070 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
15080 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  e parameter numb
15090 65 72 20 69 73 20 67 72 65 61 74 65 72 20 74 68  er is greater th
150a0 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  an.[SQLITE_MAX_V
150b0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
150c0 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
150d0 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20  .This parameter 
150e0 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64  format is provid
150f0 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
15100 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20  lity with other 
15110 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73  database.engines
15120 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 69  .  But because i
15130 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73  t is easy to mis
15140 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73 74 69  count the questi
15150 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73  on marks, the.us
15160 65 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  e of this parame
15170 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69  ter format is di
15180 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67  scouraged.  Prog
15190 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
151a0 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e  uraged.to use on
151b0 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69  e of the symboli
151c0 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20  c formats below 
151d0 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d  or the ?NNN form
151e0 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64  at above instead
151f0 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ..</td>.</tr>.<t
15200 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
15210 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
15220 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>:</b><i>AAA
15230 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
15240 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
15250 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c  td>^A colon foll
15260 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
15270 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73  ifier name holds
15280 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b   a spot for a .[
15290 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
152a0 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65  ameter_name|name
152b0 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74  d parameter] wit
152c0 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41  h the name :AAAA
152d0 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61  .  .^(Named para
152e0 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20  meters are also 
152f0 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75  numbered. The nu
15300 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69 73  mber assigned is
15310 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
15320 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n.the largest pa
15330 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
15340 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
15350 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  )^ ^If this mean
15360 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a  s the parameter.
15370 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65  would be assigne
15380 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74  d a number great
15390 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  er than [SQLITE_
153a0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
153b0 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65  BER], it is.an e
153c0 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63  rror. To avoid c
153d0 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20  onfusion, it is 
153e0 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69  best to avoid mi
153f0 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e  xing named and n
15400 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65  umbered.paramete
15410 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  rs.</td>.</tr>.<
15420 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
15430 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
15440 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41  p"><b>@</b><i>AA
15450 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
15460 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
15470 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67  <td>^An "at" sig
15480 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  n works exactly 
15490 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78  like a colon, ex
154a0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e 61  cept that the na
154b0 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65  me of.the parame
154c0 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20 40  ter created is @
154d0 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  AAAA.</td>.</tr>
154e0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
154f0 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
15500 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e  top"><b>$</b><i>
15510 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
15520 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
15530 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d  >.<td>^A dollar-
15540 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  sign followed by
15550 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
15560 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61  ame also holds a
15570 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65   spot for a name
15580 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74 68  d.parameter with
15590 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e   the name $AAAA.
155a0 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69    ^(The identifi
155b0 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20  er name in this 
155c0 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  case can include
155d0 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63  .one or more occ
155e0 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22  urrences of "::"
155f0 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e   and a suffix en
15600 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29  closed in "(...)
15610 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79  " containing.any
15620 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20   text at all.)^ 
15630 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73 20   This syntax is 
15640 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61  the form of a va
15650 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74  riable name in t
15660 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74  he.[http://www.t
15670 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c 20 54  cl-lang.org/ | T
15680 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
15690 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
156a0 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
156b0 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
156c0 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
156d0 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
156e0 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
156f0 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
15700 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
15710 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
15720 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
15730 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
15740 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
15750 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
15760 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
15770 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
15780 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
15790 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
157a0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c   NULL.  The [sql
157b0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
157c0 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74  ter_index()] int
157d0 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
157e0 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20  ed.to translate 
157f0 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d  a symbolic param
15800 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69  eter name into i
15810 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75  ts equivalent nu
15820 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e  meric index.</p>
15830 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
15840 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
15850 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
15860 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
15870 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
15880 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
15890 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
158a0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
158b0 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61  connection].D ca
158c0 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78  n reduce its max
158d0 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e  imum parameter n
158e0 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20  umber below the 
158f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78  compile-time max
15900 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b  imum.using the [
15910 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44  sqlite3_limit](D
15920 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  , [SQLITE_LIMIT_
15930 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
15940 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e  ,...) interface.
15950 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )^.</p>..<tcl>hd
15960 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
15970 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
15980 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c 20 47  .<h3>The LIKE, G
15990 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61 6e 64  LOB, REGEXP, and
159a0 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 73   MATCH operators
159b0 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49  </h3>.<p>^The LI
159c0 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
159d0 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
159e0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
159f0 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20  ^The operand.to 
15a00 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
15a10 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
15a20 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
15a30 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74  ern and the left
15a40 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f   hand.operand co
15a50 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e  ntains the strin
15a60 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
15a70 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a  st the pattern..
15a80 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e  .<tcl>hd_puts "^
15a90 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
15aa0 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20   (\"%\") in the 
15ab0 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
15ac0 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
15ad0 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
15ae0 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
15af0 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e  the string.  ^An
15b00 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f   underscore.(\"_
15b10 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
15b20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
15b30 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
15b40 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
15b50 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72  ng.  ^(Any other
15b60 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
15b70 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73  es itself or its
15b80 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73   lower/upper cas
15b90 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e  e.equivalent (i.
15ba0 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  e. case-insensit
15bb0 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e  ive matching).)^
15bc0 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74 20 4e  ..<u>Important N
15bd0 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69 74 65  ote:</u> ^SQLite
15be0 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
15bf0 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
15c00 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
15c10 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
15c20 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
15c30 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
15c40 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
15c50 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
15c60 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
15c70 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
15c80 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
15c90 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
15ca0 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
15cb0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
15cc0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
15cd0 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
15ce0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
15cf0 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
15d00 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c 3e 0a  s FALSE."</tcl>.
15d10 54 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  The ICU extensio
15d20 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e 63 6c  n to SQLite incl
15d30 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63 65 64  udes an enhanced
15d40 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
15d50 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 74 68  LIKE operator th
15d60 61 74 20 64 6f 65 73 20 63 61 73 65 20 66 6f 6c  at does case fol
15d70 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c 6c 20  ding across all 
15d80 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
15d90 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  rs.</p>..<p>^If 
15da0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
15db0 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
15dc0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
15dd0 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f  expression.follo
15de0 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45 20  wing the ESCAPE 
15df0 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61  keyword must eva
15e00 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e  luate to a strin
15e10 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a  g consisting of.
15e20 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  a single charact
15e30 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63  er. ^This charac
15e40 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
15e50 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
15e60 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
15e70 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
15e80 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
15e90 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73  racters. ^The es
15ea0 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
15eb0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
15ec0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c  cent symbol (%),
15ed0 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c   underscore (_),
15ee0 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73   or a second.ins
15ef0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63  tance of the esc
15f00 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69 74  ape character it
15f10 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c  self matches a.l
15f20 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73  iteral percent s
15f30 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
15f40 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65  e, or a single e
15f50 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 2c  scape character,
15f60 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a  .respectively...
15f70 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49  <p>^The infix LI
15f80 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE operator is i
15f90 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
15fa0 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63  lling the.applic
15fb0 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
15fc0 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b  L functions [lik
15fd0 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
15fe0 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c  /i>)] or.[like(<
15ff0 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
16000 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e  ,<i>Z</i>)]</a>.
16010 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
16020 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  KE operator can 
16030 62 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e  be made case sen
16040 73 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65  sitive using the
16050 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65  .[case_sensitive
16060 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _like pragma].</
16070 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
16080 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f  ment glob GLOB</
16090 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f  tcl>.<p>^The GLO
160a0 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69  B operator is si
160b0 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75  milar to LIKE bu
160c0 74 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a  t uses the Unix.
160d0 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79  file globbing sy
160e0 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c  ntax for its wil
160f0 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20  dcards.  ^Also, 
16100 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e  GLOB is case.sen
16110 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c  sitive, unlike L
16120 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42  IKE.  ^Both GLOB
16130 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65   and LIKE may be
16140 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68 65   preceded by.the
16150 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20   NOT keyword to 
16160 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73 65  invert the sense
16170 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e   of the test.  ^
16180 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a  The infix GLOB .
16190 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
161a0 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
161b0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  ng the function.
161c0 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [glob(<i>Y</i>,<
161d0 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61  i>X</i>)] and ca
161e0 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79  n be modified by
161f0 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74   overriding.that
16200 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   function.</p>..
16210 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
16220 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f   regexp REGEXP</
16230 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47  tcl>.<p>^The REG
16240 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EXP operator is 
16250 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
16260 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28   for the regexp(
16270 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
16280 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75    ^No regexp() u
16290 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
162a0 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
162b0 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
162c0 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
162d0 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
162e0 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
162f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
16300 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63 61 74  ^If an [applicat
16310 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
16320 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20  function] named 
16330 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64 65  "regexp".is adde
16340 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74  d at run-time, t
16350 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69  hen the "<i>X</i
16360 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69  > REGEXP <i>Y</i
16370 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  >" operator will
16380 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .be implemented 
16390 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22 72 65  as a call to "re
163a0 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  gexp(<i>Y</i>,<i
163b0 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c  >X</i>)".</p>..<
163c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
163d0 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
163e0 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
163f0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
16400 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
16410 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
16420 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
16430 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
16440 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
16450 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
16460 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
16470 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
16480 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
16490 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
164a0 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
164b0 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
164c0 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
164d0 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
164e0 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
164f0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
16500 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
16510 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
16520 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
16530 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
16540 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
16550 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
16560 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
16570 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
16580 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
16590 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
165a0 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
165b0 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
165c0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
165d0 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
165e0 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
165f0 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
16600 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
16610 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
16620 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
16630 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
16640 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
16650 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
16660 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
16670 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
16680 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
16690 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
166a0 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
166b0 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
166c0 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
166d0 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
166e0 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
166f0 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
16700 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
16710 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
16720 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
16730 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
16740 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
16750 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
16760 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
16770 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
16780 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
16790 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a  ng languages.  .
167a0 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
167b0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
167c0 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
167d0 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77  en the CASE keyw
167e0 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73  ord and the.firs
167f0 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69  t WHEN keyword i
16800 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61  s called the "ba
16810 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  se" expression. 
16820 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62  ^There are two b
16830 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68  asic forms.of th
16840 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
16850 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20  n: those with a 
16860 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
16870 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75  and those withou
16880 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  t...<p>^In a CAS
16890 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65  E without a base
168a0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63   expression, eac
168b0 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  h WHEN expressio
168c0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61  n is evaluated.a
168d0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72  nd the result tr
168e0 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65  eated as a boole
168f0 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74  an, starting wit
16900 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61  h the leftmost a
16910 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f  nd continuing.to
16920 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65   the right. ^The
16930 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
16940 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
16950 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  s the evaluation
16960 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70   of the THEN.exp
16970 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
16980 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
16990 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65  first WHEN expre
169a0 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75  ssion that evalu
169b0 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f  ates to.true. ^O
169c0 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
169d0 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e WHEN expressio
169e0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ns evaluate to t
169f0 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20  rue, the result 
16a00 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
16a10 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
16a20 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
16a30 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
16a40 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
16a50 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
16a60 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
16a70 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f  true, then the o
16a80 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
16a90 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55   NULL...<p>^A NU
16aa0 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e  LL result is con
16ab0 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77  sidered untrue w
16ac0 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
16ad0 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e  HEN terms...<p>^
16ae0 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61  In a CASE with a
16af0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
16b00 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  , the base expre
16b10 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
16b20 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64  ed just.once and
16b30 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63   the result is c
16b40 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20  ompared against 
16b50 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  the evaluation o
16b60 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70  f each WHEN .exp
16b70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66  ression from lef
16b80 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65  t to right. ^The
16b90 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
16ba0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
16bb0 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f  s the .evaluatio
16bc0 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78  n of the THEN ex
16bd0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
16be0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
16bf0 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72   first WHEN.expr
16c00 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68  ession for which
16c10 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
16c20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  is true. ^Or, if
16c30 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
16c40 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N.expressions ev
16c50 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75  aluate to a valu
16c60 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  e equal to the b
16c70 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
16c80 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76  the result.of ev
16c90 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
16ca0 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
16cb0 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
16cc0 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
16cd0 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
16ce0 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
16cf0 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61  ssions produce a
16d00 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f   result equal to
16d10 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
16d20 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c  sion,.the overal
16d30 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
16d40 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70  ...<p>^When comp
16d50 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70  aring a base exp
16d60 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20  ression against 
16d70 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  a WHEN expressio
16d80 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c  n, the same.coll
16d90 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
16da0 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55  affinity, and NU
16db0 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65  LL-handling rule
16dc0 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68  s apply as if th
16dd0 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e.base expressio
16de0 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65  n and WHEN expre
16df0 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63  ssion are respec
16e00 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d  tively the left-
16e10 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
16e20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c  operands of an <
16e30 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69  big><b>=</b></bi
16e40 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e  g> operator.</p>
16e50 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65   ^If the base .e
16e60 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
16e70 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
16e80 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73  t of the CASE is
16e90 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75   always the resu
16ea0 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  lt .of evaluatin
16eb0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
16ec0 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73  ssion if it exis
16ed0 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69  ts, or NULL if i
16ee0 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e  t does not...<p>
16ef0 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74  ^Both forms of t
16f00 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
16f10 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20  on use lazy, or 
16f20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a  short-circuit, .
16f30 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e  evaluation...<p>
16f40 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  ^(The only diffe
16f50 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
16f60 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
16f70 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
16f80 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69   is that .the <i
16f90 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
16fa0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65  n is evaluated e
16fb0 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
16fc0 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65  he first example
16fd0 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65   but .might be e
16fe0 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c  valuated multipl
16ff0 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73  e times in the s
17000 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65  econd:..<ul><pre
17010 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
17020 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
17030 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
17040 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
17050 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
17060 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
17070 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
17080 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a  D.</pre></ul>)^.
17090 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
170a0 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65  nt in_op {IN ope
170b0 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f  rator} {NOT IN o
170c0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
170d0 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  h3>The IN and NO
170e0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f  T IN operators</
170f0 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61  h3>.<p>^The IN a
17100 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
17110 6f 72 73 20 74 61 6b 65 20 61 6e 20 65 78 70 72  ors take an expr
17120 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 6c 65  ession on the.le
17130 66 74 20 61 6e 64 20 61 20 6c 69 73 74 20 6f 66  ft and a list of
17140 20 76 61 6c 75 65 73 20 6f 72 20 61 20 73 75 62   values or a sub
17150 71 75 65 72 79 20 6f 6e 20 74 68 65 20 72 69 67  query on the rig
17160 68 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ht..^When the ri
17170 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
17180 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
17190 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
171a0 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
171b0 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 74 68  ery must have th
171c0 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e same number of
171d0 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 72   columns as ther
171e0 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
171f0 0a 74 68 65 20 5b 72 6f 77 20 76 61 6c 75 65 5d  .the [row value]
17200 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65   of the left ope
17210 72 61 6e 64 2e 20 20 5e 54 68 65 20 73 75 62 71  rand.  ^The subq
17220 75 65 72 79 20 6f 6e 20 74 68 65 0a 72 69 67 68  uery on the.righ
17230 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  t of an IN or NO
17240 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 75  T IN operator mu
17250 73 74 20 62 65 20 61 20 73 63 61 6c 61 72 20 73  st be a scalar s
17260 75 62 71 75 65 72 79 20 69 66 20 74 68 65 20 6c  ubquery if the l
17270 65 66 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  eft.expression i
17280 73 20 6e 6f 74 20 61 20 5b 72 6f 77 20 76 61 6c  s not a [row val
17290 75 65 5d 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  ue] expression..
172a0 5e 49 66 20 74 68 65 20 72 69 67 68 74 20 6f 70  ^If the right op
172b0 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f  erand of an IN o
172c0 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
172d0 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 76  r is a list of v
172e0 61 6c 75 65 73 2c 0a 65 61 63 68 20 6f 66 20 74  alues,.each of t
172f0 68 6f 73 65 20 76 61 6c 75 65 73 20 6d 75 73 74  hose values must
17300 20 62 65 20 73 63 61 6c 61 72 73 20 61 6e 64 20   be scalars and 
17310 74 68 65 20 6c 65 66 74 20 65 78 70 72 65 73 73  the left express
17320 69 6f 6e 20 6d 75 73 74 20 61 6c 73 6f 0a 62 65  ion must also.be
17330 20 61 20 73 63 61 6c 61 72 2e 0a 5e 54 68 65 20   a scalar..^The 
17340 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
17350 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
17360 49 4e 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  IN operator can 
17370 62 65 20 61 0a 74 61 62 6c 65 20 3c 69 3e 6e 61  be a.table <i>na
17380 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74 61 62 6c 65  me</i> or [table
17390 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
173a0 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 69 6e  ] <i>name</i> in
173b0 20 77 68 69 63 68 20 0a 63 61 73 65 20 74 68 65   which .case the
173c0 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
173d0 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
173e0 6f 20 62 65 20 73 75 62 71 75 65 72 79 20 6f 66  o be subquery of
173f0 0a 74 68 65 20 66 6f 72 6d 20 22 28 53 45 4c 45  .the form "(SELE
17400 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e 61 6d  CT * FROM <i>nam
17410 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e 20 74  e</i>)"..^When t
17420 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
17430 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74   is an empty set
17440 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
17450 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  IN is false and 
17460 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f  the.result of NO
17470 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65  T IN is true, re
17480 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
17490 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64  left operand and
174a0 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66   even if the.lef
174b0 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  t operand is NUL
174c0 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65 73 75  L..<p>^(The resu
174d0 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  lt of an IN or N
174e0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
174f0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
17500 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61  the following.ma
17510 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  trix:..<center>.
17520 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
17530 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f  .<tr>.<th>Left o
17540 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55  perand <br>is NU
17550 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
17560 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e  rand <br>contain
17570 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74  s NULL.<th>Right
17580 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
17590 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68  an empty set.<th
175a0 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f  >Left operand fo
175b0 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72  und <br>within r
175c0 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68  ight operand.<th
175d0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49  >Result of <br>I
175e0 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52  N operator.<th>R
175f0 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54  esult of <br>NOT
17600 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72   IN operator.<tr
17610 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
17620 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
17630 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
17640 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17650 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
17660 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
17670 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
17680 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  se.<td align="ce
17690 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a  nter">true.<tr>.
176a0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
176b0 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
176c0 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
176d0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
176e0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
176f0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17700 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
17710 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
17720 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17730 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
17740 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
17750 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
17760 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
17770 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
17780 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
17790 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
177a0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
177b0 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c  ter">true.<td al
177c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
177d0 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  se.<tr>.<td alig
177e0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
177f0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17800 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
17810 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
17820 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
17830 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17840 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69  er">NULL.<td ali
17850 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
17860 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
17870 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
17880 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
17890 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
178a0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
178b0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
178c0 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f  "center">does no
178d0 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69  t matter.<td ali
178e0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
178f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17900 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65  er">NULL.</table
17910 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  >.</center>)^..<
17920 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c  p>^Note that SQL
17930 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70  ite allows the p
17940 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
17950 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75  t of scalar valu
17960 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d  es on.the right-
17970 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20  hand side of an 
17980 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
17990 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65  rator to be an e
179a0 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f  mpty list but.mo
179b0 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  st other SQL dat
179c0 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20 65  abase database e
179d0 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53  ngines and the S
179e0 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72 65  QL92 standard re
179f0 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74  quire.the list t
17a00 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61  o contain at lea
17a10 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c  st one element.<
17a20 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43  /p>..<h3>Table C
17a30 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e  olumn Names</h3>
17a40 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e  ..<p>^A column n
17a50 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f  ame can be any o
17a60 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69  f the names defi
17a70 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41  ned in the [CREA
17a80 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
17a90 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68  ent or one of th
17aa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63  e following spec
17ab0 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a  ial identifiers:
17ac0 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c   "<b>ROWID</b>",
17ad0 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f  ."<b>OID</b>", o
17ae0 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62  r "<b>_ROWID_</b
17af0 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73  >"..^The three s
17b00 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
17b10 72 73 20 64 65 73 63 72 69 62 65 20 74 68 65 0a  rs describe the.
17b20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b  unique integer k
17b30 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29  ey (the [rowid])
17b40 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
17b50 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65   every .row of e
17b60 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73  very table and s
17b70 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61  o are not availa
17b80 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20  ble on [WITHOUT 
17b90 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e  ROWID] tables..^
17ba0 54 68 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  The special iden
17bb0 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66  tifiers only ref
17bc0 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65  er to the row ke
17bd0 79 20 69 66 20 74 68 65 20 5b 43 52 45 41 54 45  y if the [CREATE
17be0 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
17bf0 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  t does not defin
17c00 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20  e a real column 
17c10 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
17c20 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63  me..^The rowid c
17c30 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77 68  an be used anywh
17c40 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f  ere a regular.co
17c50 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64  lumn can be used
17c60 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
17c70 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45  ragment in_op {E
17c80 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20  XISTS operator} 
17c90 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72  {NOT EXISTS oper
17ca0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
17cb0 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  The EXISTS opera
17cc0 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  tor</h3>..<p>^Th
17cd0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
17ce0 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74  r always evaluat
17cf0 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  es to one of the
17d00 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
17d10 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78  0 .and 1. ^If ex
17d20 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
17d30 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  CT statement spe
17d40 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69  cified as the ri
17d50 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e  ght-hand .operan
17d60 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  d of the EXISTS 
17d70 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72  operator would r
17d80 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  eturn one or mor
17d90 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  e rows, then the
17da0 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72  .EXISTS operator
17db0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e   evaluates to 1.
17dc0 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74   ^If executing t
17dd0 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20  he SELECT would 
17de0 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61  return.no rows a
17df0 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20  t all, then the 
17e00 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
17e10 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20  evaluates to 0. 
17e20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
17e30 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65   of columns in e
17e40 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64  ach row returned
17e50 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
17e60 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79  tatement.(if any
17e70 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66  ) and the specif
17e80 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e  ic values return
17e90 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63  ed have no effec
17ea0 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
17eb0 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f  .of the EXISTS o
17ec0 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72  perator. ^In par
17ed0 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f  ticular, rows co
17ee0 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61  ntaining NULL va
17ef0 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e  lues are.not han
17f00 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65  dled any differe
17f10 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77  ntly from rows w
17f20 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75  ithout NULL valu
17f30 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  es...<tcl>hd_fra
17f40 67 6d 65 6e 74 20 73 75 62 71 20 7b 53 75 62 71  gment subq {Subq
17f50 75 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ueries}</tcl>.<h
17f60 33 3e 53 75 62 71 75 65 72 79 20 45 78 70 72 65  3>Subquery Expre
17f70 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
17f80 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ^A [SELECT] stat
17f90 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69  ement enclosed i
17fa0 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20 69 73  n parentheses is
17fb0 20 61 20 73 75 62 71 75 65 72 79 2e 0a 5e 41 6c   a subquery..^Al
17fc0 6c 20 74 79 70 65 73 20 6f 66 20 53 45 4c 45 43  l types of SELEC
17fd0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63  T statement, inc
17fe0 6c 75 64 69 6e 67 0a 61 67 67 72 65 67 61 74 65  luding.aggregate
17ff0 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53 45   and compound SE
18000 4c 45 43 54 20 71 75 65 72 69 65 73 20 28 71 75  LECT queries (qu
18010 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f  eries with keywo
18020 72 64 73 20 6c 69 6b 65 0a 55 4e 49 4f 4e 20 6f  rds like.UNION o
18030 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c  r EXCEPT) are al
18040 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 20  lowed as scalar 
18050 73 75 62 71 75 65 72 69 65 73 2e 0a 5e 54 68 65  subqueries..^The
18060 20 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71   value of a subq
18070 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20  uery expression 
18080 69 73 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  is the first row
18090 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 66   of the result.f
180a0 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65 64  rom the enclosed
180b0 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
180c0 65 6e 74 2e 0a 5e 49 6e 20 6f 74 68 65 72 20 77  ent..^In other w
180d0 6f 72 64 73 2c 20 61 6e 20 69 6d 70 6c 69 65 64  ords, an implied
180e0 20 22 4c 49 4d 49 54 20 31 22 20 69 73 20 61 64   "LIMIT 1" is ad
180f0 64 65 64 20 74 6f 20 74 68 65 20 73 75 62 71 75  ded to the subqu
18100 65 72 79 2c 20 6f 76 65 72 72 69 64 69 6e 67 0a  ery, overriding.
18110 61 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 63 6f  an explicitly co
18120 64 65 64 20 4c 49 4d 49 54 2e 0a 5e 54 68 65 20  ded LIMIT..^The 
18130 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71 75  value of a subqu
18140 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ery expression i
18150 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 65 6e  s NULL if the en
18160 63 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54 5d 20  closed.[SELECT] 
18170 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e  statement return
18180 73 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 41  s no rows...<p>A
18190 20 73 75 62 71 75 65 72 79 20 74 68 61 74 20 72   subquery that r
181a0 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20  eturns a single 
181b0 63 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63 61 6c  column is a scal
181c0 61 72 20 73 75 62 71 75 65 72 79 20 61 6e 64 20  ar subquery and 
181d0 63 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f 73 74  can.be used most
181e0 20 61 6e 79 77 68 65 72 65 2e 0a 5e 41 20 73 75   anywhere..^A su
181f0 62 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75  bquery that retu
18200 72 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  rns two or more 
18210 63 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b 72 6f  columns is a [ro
18220 77 20 76 61 6c 75 65 5d 0a 73 75 62 71 75 65 72  w value].subquer
18230 79 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 20 62  y and can only b
18240 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6f 70  e used as the op
18250 65 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d 70 61  erand of a compa
18260 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
18270 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
18280 74 20 63 6f 73 75 62 20 7b 63 6f 72 72 65 6c 61  t cosub {correla
18290 74 65 64 20 73 75 62 71 75 65 72 69 65 73 7d 3c  ted subqueries}<
182a0 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72 65 6c  /tcl>.<h3>Correl
182b0 61 74 65 64 20 53 75 62 71 75 65 72 69 65 73 3c  ated Subqueries<
182c0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  /h3>..<p>^A [SEL
182d0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  ECT] statement u
182e0 73 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20  sed as either a 
182f0 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20  scalar subquery 
18300 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74  or as the .right
18310 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66  -hand operand of
18320 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f   an IN, NOT IN o
18330 72 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73  r EXISTS express
18340 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  ion may contain 
18350 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63  .references to c
18360 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75  olumns in the ou
18370 74 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20  ter query. Such 
18380 61 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e  a subquery is kn
18390 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61  own as.a correla
183a0 74 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41  ted subquery. ^A
183b0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
183c0 75 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61  uery is reevalua
183d0 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74  ted each time.it
183e0 73 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75  s result is requ
183f0 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72  ired. ^An uncorr
18400 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
18410 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c  is evaluated onl
18420 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72  y once.and the r
18430 65 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20  esult reused as 
18440 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c  necessary...<tcl
18450 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
18460 74 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72  texpr {CAST expr
18470 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b  ession} {CAST} {
18480 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72  cast} {CAST oper
18490 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
184a0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73  CAST expressions
184b0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54  </h3>..<p>A CAST
184c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
184d0 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28 3c 69  he form "CAST(<i
184e0 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69 3e  >expr</i> AS <i>
184f0 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22 0a  type-name</i>)".
18500 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65  is used to conve
18510 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  rt the value of 
18520 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20 0a  <i>expr</i> to .
18530 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f  a different [sto
18540 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63  rage class] spec
18550 69 66 69 65 64 20 62 79 20 3c 79 79 74 65 72 6d  ified by <yyterm
18560 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  >type-name</yyte
18570 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e  rm>..^A CAST con
18580 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c  version is simil
18590 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72  ar to the conver
185a0 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a  sion that takes.
185b0 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f  place when a [co
185c0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69  lumn affinity] i
185d0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76  s applied to a v
185e0 61 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74  alue except that
185f0 20 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f   with.the CAST o
18600 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76  perator the conv
18610 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61  ersion always ta
18620 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69  kes place even i
18630 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
18640 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76  .lossy and irrev
18650 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73  ersible, whereas
18660 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
18670 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68   only changes th
18680 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61  e data type.of a
18690 20 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68   value if the ch
186a0 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73  ange is lossless
186b0 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e   and reversible.
186c0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
186d0 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69  ue of <i>expr</i
186e0 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  > is NULL, then 
186f0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
18700 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f  e CAST.expressio
18710 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20  n is also NULL. 
18720 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
18730 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66  storage class of
18740 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64   the result.is d
18750 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70  etermined by app
18760 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73  lying the [rules
18770 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67   for determining
18780 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
18790 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74 65 72 6d  ] to.the <yyterm
187a0 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  >type-name</yyte
187b0 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  rm>...<table bor
187c0 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74  der=1>.<tr>.  <t
187d0 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20 3c  h> Affinity of <
187e0 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
187f0 3c 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e  </yyterm>.  <th>
18800 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63   Conversion Proc
18810 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74  essing.<tr>.  <t
18820 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20  d> NONE .  <td> 
18830 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65  ^Casting a value
18840 20 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79   to a <yyterm>ty
18850 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  pe-name</yyterm>
18860 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74   with no affinit
18870 79 20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20  y .  causes the 
18880 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f  value to.  be co
18890 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42  nverted into a B
188a0 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74  LOB.  ^Casting t
188b0 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74  o a BLOB consist
188c0 73 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69  s of first casti
188d0 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74  ng.  the value t
188e0 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65  o TEXT in the [e
188f0 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20  ncoding] of the 
18900 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
18910 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65  ion, then.  inte
18920 72 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73  rpreting the res
18930 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75  ulting byte sequ
18940 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69  ence as a BLOB i
18950 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58  nstead of as TEX
18960 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  T...<tr>.  <td> 
18970 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20  TEXT.  <td> ^To 
18980 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75  cast a BLOB valu
18990 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73  e to TEXT, the s
189a0 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
189b0 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68   that make up th
189c0 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65  e.  BLOB is inte
189d0 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20  rpreted as text 
189e0 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68  encoded using th
189f0 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
18a00 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43  ing..  <p>.   ^C
18a10 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45  asting an INTEGE
18a20 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20  R or REAL value 
18a30 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72  into TEXT render
18a40 73 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69  s the value as i
18a50 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69  f via .    [sqli
18a60 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20  te3_snprintf()] 
18a70 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
18a80 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75  resulting TEXT u
18a90 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e  ses the [encodin
18aa0 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61  g] of.    the da
18ab0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
18ac0 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  n...<tr>.  <td> 
18ad0 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65  REAL.  <td> ^Whe
18ae0 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42  n casting a BLOB
18af0 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c   value to a REAL
18b00 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66  , the value is f
18b10 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74  irst converted t
18b20 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a  o.        TEXT..
18b30 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20         <p>^When 
18b40 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76  casting a TEXT v
18b50 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68  alue to REAL, th
18b60 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62  e longest possib
18b70 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20  le prefix of.   
18b80 20 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74       the value t
18b90 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
18ba0 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
18bb0 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
18bc0 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
18bd0 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
18be0 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
18bf0 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
18c00 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
18c10 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
18c20 45 58 54 20 76 61 6c 75 65 20 61 72 65 20 69 67  EXT value are ig
18c30 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65  nored when conve
18c40 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rging from TEXT 
18c50 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68  to REAL. ^(If th
18c60 65 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e  ere is.        n
18c70 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61  o prefix that ca
18c80 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  n be interpreted
18c90 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65   as a real numbe
18ca0 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  r, the result of
18cb0 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e   the.        con
18cc0 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29  version is 0.0.)
18cd0 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49  ^..<tr>.  <td> I
18ce0 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57  NTEGER.  <td> ^W
18cf0 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
18d00 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45  OB value to INTE
18d10 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69  GER, the value i
18d20 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  s first converte
18d30 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58  d to.        TEX
18d40 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68  T..       <p>^Wh
18d50 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58  en casting a TEX
18d60 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  T value to INTEG
18d70 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  ER, the longest 
18d80 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
18d90 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
18da0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
18db0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
18dc0 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
18dd0 72 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  r is extracted f
18de0 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20  rom.        the 
18df0 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74  TEXT value and t
18e00 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e  he remainder ign
18e10 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69  ored. ^Any leadi
18e20 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65  ng spaces in the
18e30 0a 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61  .        TEXT va
18e40 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74  lue when convert
18e50 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f  ing from TEXT to
18e60 20 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e   INTEGER are ign
18e70 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a  ored. ^If there.
18e80 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72          is no pr
18e90 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
18ea0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
18eb0 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
18ec0 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20  r, the result.  
18ed0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
18ee0 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e  version is 0.  ^
18ef0 49 66 20 74 68 65 20 70 72 65 66 69 78 20 69 6e  If the prefix in
18f00 74 65 67 65 72 20 69 73 20 67 72 65 61 74 65 72  teger is greater
18f10 20 74 68 61 6e 0a 20 20 20 20 20 20 20 20 2b 39   than.        +9
18f20 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
18f30 30 37 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  07 then the resu
18f40 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74 20 69  lt of the cast i
18f50 73 20 65 78 61 63 74 6c 79 0a 20 20 20 20 20 20  s exactly.      
18f60 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34    +9223372036854
18f70 37 37 35 38 30 37 2e 20 20 5e 53 69 6d 69 6c 61  775807.  ^Simila
18f80 72 6c 79 2c 20 69 66 20 74 68 65 20 70 72 65 66  rly, if the pref
18f90 69 78 20 69 6e 74 65 67 65 72 20 69 73 0a 20 20  ix integer is.  
18fa0 20 20 20 20 20 20 6c 65 73 73 20 74 68 61 6e 20        less than 
18fb0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
18fc0 35 38 30 38 20 74 68 65 6e 20 74 68 65 20 72 65  5808 then the re
18fd0 73 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74  sult of the cast
18fe0 20 69 73 0a 20 20 20 20 20 20 20 20 65 78 61 63   is.        exac
18ff0 74 6c 79 20 2d 39 32 32 33 33 37 32 30 33 36 38  tly -92233720368
19000 35 34 37 37 35 38 30 38 2e 0a 0a 20 20 20 20 20  54775808...     
19010 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
19020 69 6e 67 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  ing to INTEGER, 
19030 69 66 20 74 68 65 20 74 65 78 74 20 6c 6f 6f 6b  if the text look
19040 73 20 6c 69 6b 65 20 61 20 66 6c 6f 61 74 69 6e  s like a floatin
19050 67 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20  g point.        
19060 76 61 6c 75 65 20 77 69 74 68 20 61 6e 20 65 78  value with an ex
19070 70 6f 6e 65 6e 74 2c 20 74 68 65 20 65 78 70 6f  ponent, the expo
19080 6e 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67 6e  nent will be ign
19090 6f 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20  ored because it 
190a0 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 61  is.        no pa
190b0 72 74 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  rt of the intege
190c0 72 20 70 72 65 66 69 78 2e 20 20 5e 46 6f 72 20  r prefix.  ^For 
190d0 65 78 61 6d 70 6c 65 2c 0a 20 20 20 20 20 20 20  example,.       
190e0 20 22 28 43 41 53 54 20 27 31 32 33 65 2b 35 27   "(CAST '123e+5'
190f0 20 41 53 20 49 4e 54 45 47 45 52 29 22 20 72 65   AS INTEGER)" re
19100 73 75 6c 74 73 20 69 6e 20 31 32 33 2c 20 6e 6f  sults in 123, no
19110 74 20 69 6e 20 31 32 33 30 30 30 30 30 2e 0a 0a  t in 12300000...
19120 20 20 20 20 20 20 20 20 3c 70 3e 20 5e 28 54 68          <p> ^(Th
19130 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20  e CAST operator 
19140 75 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69  understands deci
19150 6d 61 6c 0a 20 20 20 20 20 20 20 20 69 6e 74 65  mal.        inte
19160 67 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61 73 68  gers only &mdash
19170 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20  ; conversion of 
19180 5b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  [hexadecimal int
19190 65 67 65 72 73 5d 20 73 74 6f 70 73 20 0a 20 20  egers] stops .  
191a0 20 20 20 20 20 20 61 74 20 74 68 65 20 22 78 22        at the "x"
191b0 20 69 6e 20 74 68 65 20 22 30 78 22 20 70 72 65   in the "0x" pre
191c0 66 69 78 20 6f 66 20 74 68 65 20 68 65 78 61 64  fix of the hexad
191d0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73  ecimal integer s
191e0 74 72 69 6e 67 20 0a 20 20 20 20 20 20 20 20 61  tring .        a
191f0 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74 20 6f  nd thus result o
19200 66 20 74 68 65 20 43 41 53 54 20 69 73 20 61 6c  f the CAST is al
19210 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20  ways zero.)^..  
19220 20 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f      <p>^A cast o
19230 66 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69  f a REAL value i
19240 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72  nto an INTEGER r
19250 65 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e  esults in the in
19260 74 65 67 65 72 0a 20 20 20 20 20 20 62 65 74 77  teger.      betw
19270 65 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c  een the REAL val
19280 75 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74  ue and zero that
19290 20 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74   is closest to t
192a0 68 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20  he REAL value.. 
192b0 20 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20       ^If a REAL 
192c0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
192d0 74 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73  the greatest pos
192e0 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20  sible signed.   
192f0 20 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32     integer (+922
19300 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
19310 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
19320 74 20 69 73 20 74 68 65 20 67 72 65 61 74 65 73  t is the greates
19330 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20  t possible.     
19340 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
19350 61 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c 20  and if the REAL 
19360 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
19370 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20   least possible 
19380 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74  signed.      int
19390 65 67 65 72 20 28 2d 39 32 32 33 33 37 32 30 33  eger (-922337203
193a0 36 38 35 34 37 37 35 38 30 38 29 20 74 68 65 6e  6854775808) then
193b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
193c0 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c  he least possibl
193d0 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69  e.      signed i
193e0 6e 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c  nteger...      <
193f0 70 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74  p>Prior to SQLit
19400 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 20  e version 3.8.2 
19410 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29  ([dateof:3.8.2])
19420 2c 0a 20 20 20 20 20 20 63 61 73 74 69 6e 67 20  ,.      casting 
19430 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65  a REAL value gre
19440 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20  ater than.      
19450 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
19460 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69  5807.0 into an i
19470 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20  nteger resulted 
19480 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61  in the most nega
19490 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67  tive.      integ
194a0 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38  er, -92233720368
194b0 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20  54775808.  This 
194c0 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61  behavior was mea
194d0 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68  nt to emulate th
194e0 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72  e.      behavior
194f0 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64   of x86/x64 hard
19500 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20  ware when doing 
19510 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63  the equivalent c
19520 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ast...<tr>.  <td
19530 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e  > NUMERIC.  <td>
19540 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54   ^Casting a TEXT
19550 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69   or BLOB value i
19560 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73  nto NUMERIC firs
19570 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a  t does a forced.
19580 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e     conversion in
19590 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e  to REAL but then
195a0 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74   further convert
195b0 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  s the result int
195c0 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20  o INTEGER if.   
195d0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  and only if the 
195e0 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20  conversion from 
195f0 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20  REAL to INTEGER 
19600 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20  is lossless and 
19610 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54  reversible..   T
19620 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
19630 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74  context in SQLit
19640 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45  e where the NUME
19650 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20  RIC and INTEGER 
19660 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20  [affinities].   
19670 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74  behave different
19680 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74  ly..   <p> ^Cast
19690 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e  ing a REAL or IN
196a0 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e  TEGER value to N
196b0 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f  UMERIC is a no-o
196c0 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61  p, even if a rea
196d0 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64  l.   value could
196e0 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
196f0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
19700 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a  nteger...</tr>..
19710 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f  </table>..<p>^No
19720 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75  te that the resu
19730 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
19740 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  any non-BLOB val
19750 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20  ue into a .BLOB 
19760 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66  and the result f
19770 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
19780 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
19790 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  a non-BLOB value
197a0 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e  .may be differen
197b0 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
197c0 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62  hether the datab
197d0 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69  ase [encoding] i
197e0 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62  s UTF-8,.UTF-16b
197f0 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a  e, or UTF-16le..
19800 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
19810 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b  nt booleanexpr {
19820 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
19830 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f  on}</tcl>.<h3>Bo
19840 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e  olean Expression
19850 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53  s</h3>..<p>The S
19860 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74  QL language feat
19870 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e  ures several con
19880 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65  texts where an e
19890 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76  xpression is .ev
198a0 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
198b0 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64  result converted
198c0 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74   to a boolean (t
198d0 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61  rue or false) va
198e0 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65  lue. These.conte
198f0 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e  xts are:..  <ul>
19900 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48  .    <li> the WH
19910 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
19920 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f  SELECT, UPDATE o
19930 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
19940 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
19950 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
19960 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e  use of a join in
19970 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
19980 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
19990 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
199a0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
199b0 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
199c0 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
199d0 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65  of an SQL trigge
199e0 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20  r, and.    <li> 
199f0 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
19a00 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f  or clauses of so
19a10 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  me CASE expressi
19a20 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70  ons..  </ul>..<p
19a30 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68  >^(To convert th
19a40 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20  e results of an 
19a50 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74  SQL expression t
19a60 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  o a boolean valu
19a70 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20  e, SQLite.first 
19a80 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74  casts the result
19a90 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
19aa0 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  lue in the same 
19ab0 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20  way as a .[CAST 
19ac0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 6e  expression]. A n
19ad0 75 6d 65 72 69 63 20 7a 65 72 6f 20 76 61 6c 75  umeric zero valu
19ae0 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  e (integer value
19af0 20 30 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c 75   0 or real .valu
19b00 65 20 30 2e 30 29 20 69 73 20 63 6f 6e 73 69 64  e 0.0) is consid
19b10 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
19b20 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  .  A NULL value 
19b30 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a 41  is still NULL..A
19b40 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20  ll other values 
19b50 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
19b60 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72  rue.)^..<p>^(For
19b70 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61   example, the va
19b80 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20  lues NULL, 0.0, 
19b90 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64  0, 'english' and
19ba0 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e   '0' are all con
19bb0 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61  sidered.to be fa
19bc0 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20  lse.)^ ^(Values 
19bd0 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e  1, 1.0, 0.1, -0.
19be0 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27  1 and '1english'
19bf0 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
19c00 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a  to .be true.)^..
19c10 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74  <p>Beginning wit
19c20 68 20 53 51 4c 69 74 65 20 33 2e 32 33 2e 30 20  h SQLite 3.23.0 
19c30 28 5b 64 61 74 65 6f 66 3a 33 2e 32 33 2e 30 5d  ([dateof:3.23.0]
19c40 29 2c 20 53 51 4c 69 74 65 20 72 65 63 6f 67 6e  ), SQLite recogn
19c50 69 7a 65 73 20 74 68 65 0a 69 64 65 6e 74 69 66  izes the.identif
19c60 69 65 72 73 20 22 54 52 55 45 22 20 61 6e 64 20  iers "TRUE" and 
19c70 22 46 41 4c 53 45 22 20 61 73 20 62 6f 6f 6c 65  "FALSE" as boole
19c80 61 6e 20 6c 69 74 65 72 61 6c 73 2c 20 69 66 20  an literals, if 
19c90 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 6f 73  and only if thos
19ca0 65 0a 69 64 65 6e 74 69 66 69 65 72 73 20 61 72  e.identifiers ar
19cb0 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 75 73  e not already us
19cc0 65 64 20 66 6f 72 20 73 6f 6d 65 20 6f 74 68 65  ed for some othe
19cd0 72 20 6d 65 61 6e 69 6e 67 2e 20 20 49 66 20 74  r meaning.  If t
19ce0 68 65 72 65 20 61 6c 72 65 61 64 79 0a 65 78 69  here already.exi
19cf0 73 74 73 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 74  sts columns or t
19d00 61 62 6c 65 73 20 6f 72 20 6f 74 68 65 72 20 6f  ables or other o
19d10 62 6a 65 63 74 73 20 6e 61 6d 65 64 20 54 52 55  bjects named TRU
19d20 45 20 6f 72 20 46 41 4c 53 45 2c 20 74 68 65 6e  E or FALSE, then
19d30 20 66 6f 72 0a 74 68 65 20 73 61 6b 65 20 6f 66   for.the sake of
19d40 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
19d50 74 69 62 69 6c 69 74 79 2c 20 74 68 65 20 54 52  tibility, the TR
19d60 55 45 20 61 6e 64 20 46 41 4c 53 45 20 69 64 65  UE and FALSE ide
19d70 6e 74 69 66 69 65 72 73 20 72 65 66 65 72 0a 74  ntifiers refer.t
19d80 6f 20 74 68 6f 73 65 20 6f 74 68 65 72 20 6f 62  o those other ob
19d90 6a 65 63 74 73 2c 20 6e 6f 74 20 74 6f 20 74 68  jects, not to th
19da0 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73  e boolean values
19db0 2e 0a 0a 3c 70 3e 54 68 65 20 62 6f 6f 6c 65 61  ...<p>The boolea
19dc0 6e 20 69 64 65 6e 74 69 66 69 65 72 73 20 54 52  n identifiers TR
19dd0 55 45 20 61 6e 64 20 46 41 4c 53 45 20 61 72 65  UE and FALSE are
19de0 20 75 73 75 61 6c 6c 79 20 6a 75 73 74 20 61 6c   usually just al
19df0 69 61 73 65 73 20 66 6f 72 0a 74 68 65 20 69 6e  iases for.the in
19e00 74 65 67 65 72 20 76 61 6c 75 65 73 20 31 20 61  teger values 1 a
19e10 6e 64 20 30 2c 20 72 65 73 70 65 63 74 69 76 65  nd 0, respective
19e20 6c 79 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ly.  However, if
19e30 20 54 52 55 45 20 6f 72 20 46 41 4c 53 45 0a 6f   TRUE or FALSE.o
19e40 63 63 75 72 20 6f 6e 20 74 68 65 20 72 69 67 68  ccur on the righ
19e50 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61  t-hand side of a
19e60 6e 20 49 53 20 6f 70 65 72 61 74 6f 72 2c 20 74  n IS operator, t
19e70 68 65 6e 20 74 68 65 79 20 66 6f 72 6d 20 6e 65  hen they form ne
19e80 77 0a 75 6e 61 72 79 20 70 6f 73 74 66 69 78 20  w.unary postfix 
19e90 6f 70 65 72 61 74 6f 72 73 20 22 49 53 20 54 52  operators "IS TR
19ea0 55 45 22 20 61 6e 64 20 22 49 53 20 46 41 4c 53  UE" and "IS FALS
19eb0 45 22 20 77 68 69 63 68 20 74 65 73 74 20 74 68  E" which test th
19ec0 65 20 62 6f 6f 6c 65 61 6e 0a 76 61 6c 75 65 20  e boolean.value 
19ed0 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f  of the operand o
19ee0 6e 20 74 68 65 20 6c 65 66 74 2e 0a 0a 3c 68 33  n the left...<h3
19ef0 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a  >Functions</h3>.
19f00 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
19f10 74 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66 75 6e  ts many [corefun
19f20 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61  c|simple] and [a
19f30 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65  ggfunc|aggregate
19f40 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2e  ].SQL functions.
19f50 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69    For presentati
19f60 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
19f70 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
19f80 65 20 66 75 72 74 68 65 72 0a 73 75 62 64 69 76  e further.subdiv
19f90 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72 65 66  ided into [coref
19fa0 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
19fb0 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
19fc0 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66 75  unc|date-time fu
19fd0 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69 63  nctions]..Applic
19fe0 61 74 69 6f 6e 73 20 63 61 6e 20 61 64 64 20 6e  ations can add n
19ff0 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c 20 77 72  ew functions, wr
1a000 69 74 74 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c 20  itten in C/C++, 
1a010 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
1a020 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1a030 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  on()] interface.
1a040 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69 73  .</p>..<p>^It is
1a050 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
1a060 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
1a070 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
1a080 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 0a   same name as a.
1a090 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2c  simple function,
1a0a0 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
1a0b0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
1a0c0 6e 74 73 20 66 6f 72 20 74 68 65 20 74 77 6f 20  nts for the two 
1a0d0 66 6f 72 6d 73 20 6f 66 20 74 68 65 0a 66 75 6e  forms of the.fun
1a0e0 63 74 69 6f 6e 20 61 72 65 20 64 69 66 66 65 72  ction are differ
1a0f0 65 6e 74 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70  ent.  ^For examp
1a100 6c 65 2c 20 74 68 65 20 5b 61 67 67 5f 6d 61 78  le, the [agg_max
1a110 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  |max()] function
1a120 20 77 69 74 68 20 61 0a 73 69 6e 67 6c 65 20 61   with a.single a
1a130 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  rgument is an ag
1a140 67 72 65 67 61 74 65 20 61 6e 64 20 74 68 65 20  gregate and the 
1a150 5b 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  [max()] function
1a160 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72   with two or mor
1a170 65 0a 61 72 67 75 6d 65 6e 74 73 20 69 73 20 61  e.arguments is a
1a180 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1a190 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
1a1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1e0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1a1f0 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d  {Core Functions}
1a200 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65   corefunc {*core
1a210 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f 63  func}.unset -noc
1a220 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e 63  omplain corefunc
1a230 73 65 74 0a 70 72 6f 63 20 66 75 6e 63 64 65 66  set.proc funcdef
1a240 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
1a250 73 20 64 65 73 63 7d 20 7b 0a 20 20 67 6c 6f 62  s desc} {.  glob
1a260 61 6c 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 20  al corefuncset. 
1a270 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d   regexp {^[a-z_]
1a280 2b 7d 20 24 73 79 6e 74 61 78 20 62 61 73 65 73  +} $syntax bases
1a290 79 6e 74 61 78 0a 20 20 73 65 74 20 63 6f 72 65  yntax.  set core
1a2a0 66 75 6e 63 73 65 74 28 24 62 61 73 65 73 79 6e  funcset($basesyn
1a2b0 74 61 78 29 20 5b 6c 69 73 74 20 24 73 79 6e 74  tax) [list $synt
1a2c0 61 78 20 24 6b 65 79 77 6f 72 64 73 20 24 64 65  ax $keywords $de
1a2d0 73 63 5d 0a 7d 0a 66 75 6e 63 64 65 66 20 7b 61  sc].}.funcdef {a
1a2e0 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  bs(X)} {} {.  ^T
1a2f0 68 65 20 61 62 73 28 58 29 20 66 75 6e 63 74 69  he abs(X) functi
1a300 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1a310 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
1a320 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61   the numeric.  a
1a330 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73  rgument X.  ^Abs
1a340 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  (X) returns NULL
1a350 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a   if X is NULL. .
1a360 20 20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72    ^(Abs(X) retur
1a370 6e 73 20 30 2e 30 20 69 66 20 58 20 69 73 20 61  ns 0.0 if X is a
1a380 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a   string or blob.
1a390 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65    that cannot be
1a3a0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
1a3b0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e  numeric value.)^
1a3c0 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a    ^If X is the .
1a3d0 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33    integer -92233
1a3e0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 74  72036854775808 t
1a3f0 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77  hen abs(X) throw
1a400 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
1a410 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69  rflow.  error si
1a420 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20  nce there is no 
1a430 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74  equivalent posit
1a440 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63  ive 64-bit two c
1a450 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e  omplement value.
1a460 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61  .}..funcdef {cha
1a470 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  nges()} {} {.  ^
1a480 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66 75  The changes() fu
1a490 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1a4a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  he number of dat
1a4b0 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
1a4c0 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f  were changed.  o
1a4d0 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65  r inserted or de
1a4e0 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73  leted by the mos
1a4f0 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c  t recently compl
1a500 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c  eted INSERT, DEL
1a510 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45  ETE,.  or UPDATE
1a520 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c   statement, excl
1a530 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65  usive of stateme
1a540 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76  nts in lower-lev
1a550 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e  el triggers..  ^
1a560 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53 51  The changes() SQ
1a570 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
1a580 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1a590 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
1a5a0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66  ges()].  C/C++ f
1a5b0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63  unction and henc
1a5c0 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61  e follows the sa
1a5d0 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75  me rules for cou
1a5e0 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d  nting changes..}
1a5f0 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 72 28  ..funcdef {char(
1a600 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b  X1,X2,...,XN)} {
1a610 7d 20 7b 0a 20 20 5e 28 54 68 65 20 63 68 61 72  } {.  ^(The char
1a620 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66  (X1,X2,...,XN) f
1a630 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a640 61 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65  a string compose
1a650 64 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  d of characters 
1a660 68 61 76 69 6e 67 20 74 68 65 0a 20 20 20 75 6e  having the.   un
1a670 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
1a680 20 76 61 6c 75 65 73 20 6f 66 20 69 6e 74 65 67   values of integ
1a690 65 72 73 20 58 31 20 74 68 72 6f 75 67 68 20 58  ers X1 through X
1a6a0 4e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  N, respectively.
1a6b0 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  )^.}..funcdef {c
1a6c0 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29  oalesce(X,Y,...)
1a6d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  } {} {.  ^The co
1a6e0 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f  alesce() functio
1a6f0 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
1a700 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
1a710 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
1a720 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c   or.  NULL if al
1a730 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  l arguments are 
1a740 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65  NULL.  ^Coalesce
1a750 28 29 20 6d 75 73 74 20 68 61 76 65 20 61 74 20  () must have at 
1a760 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d  least .  2 argum
1a770 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
1a780 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20   {glob(X,Y)} {} 
1a790 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c  {.  ^The glob(X,
1a7a0 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  Y) function is e
1a7b0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
1a7c0 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c  .  expression "<
1a7d0 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e  b>Y GLOB X</b>".
1a7e0 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
1a7f0 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e   X and Y argumen
1a800 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20  ts are reversed 
1a810 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75  in the glob() fu
1a820 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76  nction.  relativ
1a830 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
1a840 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  GLOB] operator..
1a850 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74    ^If the [sqlit
1a860 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1a870 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
1a880 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65  is used to.  ove
1a890 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58  rride the glob(X
1a8a0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ,Y) function wit
1a8b0 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  h an alternative
1a8c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1a8d0 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42  then.  the [GLOB
1a8e0 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  ] operator will 
1a8f0 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72  invoke the alter
1a900 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
1a910 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ation..}..funcde
1a920 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20  f {ifnull(X,Y)} 
1a930 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75  {} {.  ^The ifnu
1a940 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ll() function re
1a950 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1a960 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
1a970 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
1a980 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61    NULL if both a
1a990 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
1a9a0 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75  L.  ^Ifnull() mu
1a9b0 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20  st have exactly 
1a9c0 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e  2 arguments..  ^
1a9d0 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
1a9e0 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
1a9f0 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65  ent to [coalesce
1aa00 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67  ()] with two arg
1aa10 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
1aa20 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20  ef {instr(X,Y)} 
1aa30 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74  {} {.  ^The inst
1aa40 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  r(X,Y) function 
1aa50 66 69 6e 64 73 20 74 68 65 20 66 69 72 73 74 20  finds the first 
1aa60 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74  occurrence of st
1aa70 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20 0a 20  ring Y within . 
1aa80 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20 72 65   string X and re
1aa90 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1aaa0 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72 61 63   of prior charac
1aab0 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f 72 20  ters plus 1, or 
1aac0 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f 77 68  0 if.  Y is nowh
1aad0 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68 69 6e  ere found within
1aae0 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20   X..  ^Or, if X 
1aaf0 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68 20 42  and Y are both B
1ab00 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73 74 72  LOBs, then instr
1ab10 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 6f 6e  (X,Y) returns on
1ab20 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20 74 68  e.  more than th
1ab30 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73 20 70  e number bytes p
1ab40 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
1ab50 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  t occurrence of 
1ab60 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 64  Y, or 0 if.  Y d
1ab70 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e  oes not occur an
1ab80 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 58 2e  ywhere within X.
1ab90 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72 67 75  .  ^If both argu
1aba0 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20 74 6f  ments X and Y to
1abb0 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72 65 20   instr(X,Y) are 
1abc0 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65  non-NULL and are
1abd0 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68 65   not BLOBs.  the
1abe0 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74 65 72  n both are inter
1abf0 70 72 65 74 65 64 20 61 73 20 73 74 72 69 6e 67  preted as string
1ac00 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65 72 20  s..  ^If either 
1ac10 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c 20  X or Y are NULL 
1ac20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 74 68  in instr(X,Y) th
1ac30 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
1ac40 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65   NULL..}..funcde
1ac50 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a  f {hex(X)} {} {.
1ac60 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e    ^The hex() fun
1ac70 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73  ction interprets
1ac80 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73   its argument as
1ac90 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75   a BLOB and retu
1aca0 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
1acb0 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70 65  hich is the uppe
1acc0 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69 6d  r-case hexadecim
1acd0 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20  al rendering of 
1ace0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20  the content of. 
1acf0 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66   that blob..}..f
1ad00 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73  uncdef {last_ins
1ad10 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20  ert_rowid()} {} 
1ad20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  {.  ^The last_in
1ad30 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
1ad40 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1ad50 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74  e [ROWID].  of t
1ad60 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65  he last row inse
1ad70 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  rt from the data
1ad80 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
1ad90 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68  which invoked th
1ada0 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  e.  function..  
1adb0 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74  ^The last_insert
1adc0 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e  _rowid() SQL fun
1add0 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1ade0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1adf0 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  [sqlite3_last_in
1ae00 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f  sert_rowid()] C/
1ae10 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75  C++ interface fu
1ae20 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  nction..}..funcd
1ae30 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b  ef {length(X)} {
1ae40 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74 72  } {.  ^For a str
1ae50 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74 68 65  ing value X, the
1ae60 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
1ae70 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1ae80 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63 68 61  number of .  cha
1ae90 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62 79 74  racters (not byt
1aea0 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72 20 74  es) in X prior t
1aeb0 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 20  o the first NUL 
1aec0 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53 69 6e  character..  Sin
1aed0 63 65 20 53 51 4c 69 74 65 20 73 74 72 69 6e 67  ce SQLite string
1aee0 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  s do not normall
1aef0 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68  y contain NUL ch
1af00 61 72 61 63 74 65 72 73 2c 20 74 68 65 20 6c 65  aracters, the le
1af10 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63 74 69  ngth(X).  functi
1af20 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20  on will usually 
1af30 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c  return the total
1af40 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   number of chara
1af50 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
1af60 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20  ing X..  ^For a 
1af70 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c 65  blob value X, le
1af80 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73 20  ngth(X) returns 
1af90 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1afa0 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e  tes in the blob.
1afb0 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c  .  ^If X is NULL
1afc0 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
1afd0 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58  is NULL..  ^If X
1afe0 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e   is numeric then
1aff0 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72   length(X) retur
1b000 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  ns the length of
1b010 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72   a string.  repr
1b020 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e  esentation of X.
1b030 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b  .}..funcdef {lik
1b040 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c  e(X,Y) like(X,Y,
1b050 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Z)} {} {.  ^The 
1b060 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
1b070 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
1b080 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59  ment the.  "<b>Y
1b090 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43   LIKE X &#91;ESC
1b0a0 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20  APE Z&#93;</b>" 
1b0b0 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e  expression. .  ^
1b0c0 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
1b0d0 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
1b0e0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
1b0f0 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
1b100 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20  tion is invoked 
1b110 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b120 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73  ents.  ^Otherwis
1b130 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b  e, it is.  invok
1b140 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75  ed with two argu
1b150 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65  ments only. Note
1b160 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20   that the X and 
1b170 59 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  Y parameters are
1b180 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74  .  reversed in t
1b190 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
1b1a0 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  on relative to t
1b1b0 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20  he infix [LIKE] 
1b1c0 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65  operator..  ^The
1b1d0 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
1b1e0 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
1b1f0 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
1b200 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74  ed to override t
1b210 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
1b220 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79  tion and thereby
1b230 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72   change the oper
1b240 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b  ation of the.  [
1b250 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20  LIKE] operator. 
1b260 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67   When overriding
1b270 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
1b280 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20  tion, it may be 
1b290 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f  important.  to o
1b2a0 76 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65  verride both the
1b2b0 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61   two and three a
1b2c0 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73  rgument versions
1b2d0 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a   of the like() .
1b2e0 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65    function. Othe
1b2f0 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74  rwise, different
1b300 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c   code may be cal
1b310 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  led to implement
1b320 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
1b330 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67  erator depending
1b340 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
1b350 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61  ot an ESCAPE cla
1b360 75 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69  use was .  speci
1b370 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65  fied..}...funcde
1b380 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  f {likelihood(X,
1b390 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1b3a0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1b3b0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1b3c0 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68   argument X unch
1b3d0 61 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65 20 76  anged..  ^(The v
1b3e0 61 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69  alue Y in likeli
1b3f0 68 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74 20 62  hood(X,Y) must b
1b400 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
1b410 6e 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65  nt constant.  be
1b420 74 77 65 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e  tween 0.0 and 1.
1b430 30 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a  0, inclusive.)^.
1b440 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f    ^The likelihoo
1b450 64 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  d(X) function is
1b460 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1b470 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1b480 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1b490 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1b4a0 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1b4b0 6c 65 73 20 64 75 72 69 6e 67 20 72 75 6e 2d 74  les during run-t
1b4c0 69 6d 65 0a 20 20 28 74 68 61 74 20 69 73 2c 20  ime.  (that is, 
1b4d0 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20  during calls to 
1b4e0 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
1b4f0 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73  )..  ^The purpos
1b500 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69 68  e of the likelih
1b510 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ood(X,Y) functio
1b520 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  n is to provide 
1b530 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20  a hint.  to the 
1b540 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68  query planner th
1b550 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  at the argument 
1b560 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74  X is a boolean t
1b570 68 61 74 20 69 73 0a 20 20 74 72 75 65 20 77 69  hat is.  true wi
1b580 74 68 20 61 20 70 72 6f 62 61 62 69 6c 69 74 79  th a probability
1b590 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
1b5a0 79 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e  y Y..  ^(The [un
1b5b0 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74  likely(X)] funct
1b5c0 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e  ion is short-han
1b5d0 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  d for likelihood
1b5e0 28 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20  (X,0.0625).)^.  
1b5f0 5e 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29  ^(The [likely(X)
1b600 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68  ] function is sh
1b610 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b  ort-hand for lik
1b620 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35  elihood(X,0.9375
1b630 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ).)^.}..funcdef 
1b640 7b 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b  {likely(X)} {} {
1b650 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58  .  ^The likely(X
1b660 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b670 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1b680 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1b690 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  The likely(X) fu
1b6a0 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  nction is a no-o
1b6b0 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  p that the code 
1b6c0 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69  generator.  opti
1b6d0 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68  mizes away so th
1b6e0 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e  at it consumes n
1b6f0 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a  o CPU cycles at.
1b700 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74    run-time (that
1b710 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
1b720 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
1b730 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
1b740 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69  urpose of the li
1b750 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1b760 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
1b770 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71   hint.  to the q
1b780 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61  uery planner tha
1b790 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  t the argument X
1b7a0 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   is a boolean va
1b7b0 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20 75 73  lue.  that is us
1b7c0 75 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54 68  ually true. ^(Th
1b7d0 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1b7e0 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
1b7f0 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68  nt.  to [likelih
1b800 6f 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29  ood](X,0.9375).)
1b810 5e 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c  ^ See also: [unl
1b820 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75  ikely(X)]..}..fu
1b830 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
1b840 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
1b850 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
1b860 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
1b870 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
1b880 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51  nction loads [SQ
1b890 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d  Lite extensions]
1b8a0 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72   out of the shar
1b8b0 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c  ed.  library fil
1b8c0 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20  e named X using 
1b8d0 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  the entry point 
1b8e0 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  Y.  ^The result 
1b8f0 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  of load_extensio
1b900 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20  n().  is always 
1b910 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69  a NULL.  ^If Y i
1b920 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74  s omitted then t
1b930 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79  he default entry
1b940 20 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75   point name is u
1b950 73 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64  sed..  ^The load
1b960 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
1b970 63 74 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20  ction raises an 
1b980 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
1b990 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73   extension fails
1b9a0 20 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e   to.  load or in
1b9b0 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74  itialize correct
1b9c0 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c  ly...  <p>^The l
1b9d0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20  oad_extension() 
1b9e0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61  function will fa
1b9f0 69 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  il if the extens
1ba00 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
1ba10 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
1ba20 65 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74  ete an SQL funct
1ba30 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ion or collating
1ba40 20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65   sequence.  ^The
1ba50 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e  .  extension can
1ba60 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f   add new functio
1ba70 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
1ba80 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63  sequences, but c
1ba90 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f  annot.  modify o
1baa0 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e  r delete existin
1bab0 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  g functions or c
1bac0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1bad0 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f  es because.  tho
1bae0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64  se functions and
1baf0 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  /or collating se
1bb00 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65  quences might be
1bb10 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a   used elsewhere.
1bb20 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74    in the current
1bb30 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73  ly running SQL s
1bb40 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f  tatement.  To lo
1bb50 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ad an extension 
1bb60 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f  that.  changes o
1bb70 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69  r deletes functi
1bb80 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
1bb90 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20   sequences, use 
1bba0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
1bbb0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
1bbc0 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e   C-language API.
1bbd0 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73  </p>..  <p>For s
1bbe0 65 63 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c  ecurity reasons,
1bbf0 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65   extension loade
1bc00 64 20 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20  d is turned off 
1bc10 62 79 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d  by default and m
1bc20 75 73 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64  ust.  be enabled
1bc30 20 62 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c   by a prior call
1bc40 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61   to [sqlite3_ena
1bc50 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
1bc60 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75  on()].</p>.}..fu
1bc70 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d  ncdef {lower(X)}
1bc80 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77   {} {.  ^The low
1bc90 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
1bca0 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1bcb0 20 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61   string X with a
1bcc0 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ll ASCII charact
1bcd0 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20  ers.  converted 
1bce0 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  to lower case.  
1bcf0 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69  ^The default bui
1bd00 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75  lt-in lower() fu
1bd10 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66  nction works.  f
1bd20 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1bd30 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f  ers only.  To do
1bd40 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e   case conversion
1bd50 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20  s on non-ASCII. 
1bd60 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61   characters, loa
1bd70 64 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73  d the ICU extens
1bd80 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
1bd90 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28  {ltrim(X) ltrim(
1bda0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1bdb0 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  e ltrim(X,Y) fun
1bdc0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1bdd0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1bde0 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1bdf0 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1be00 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1be10 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  n Y from the lef
1be20 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
1be30 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1be40 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74  t is omitted, lt
1be50 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1be60 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c  paces from the l
1be70 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e  eft side.  of X.
1be80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
1be90 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78  (X,Y,...)} {*max
1bea0 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d  CoreFunc *max {m
1beb0 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ax() SQL functio
1bec0 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
1bed0 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28  ti-argument max(
1bee0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1bef0 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1bf00 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69  with the .  maxi
1bf10 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65  mum value, or re
1bf20 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79  turn NULL if any
1bf30 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
1bf40 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  L. .  ^The multi
1bf50 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
1bf60 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
1bf70 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
1bf80 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1bf90 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
1bfa0 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1bfb0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1bfc0 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
1bfd0 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
1bfe0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1bff0 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
1c000 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
1c010 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
1c020 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69   to max().  defi
1c030 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
1c040 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
1c050 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
1c060 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
1c070 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68  sed..  ^(Note th
1c080 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20  at <b>max()</b> 
1c090 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
1c0a0 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68  tion when.  it h
1c0b0 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67  as 2 or more arg
1c0c0 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61  uments but opera
1c0d0 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78  tes as an.  [max
1c0e0 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67  AggFunc | aggreg
1c0f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66  ate function] if
1c100 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69   given only a si
1c110 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e  ngle argument.)^
1c120 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
1c130 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e  (X,Y,...)} {*min
1c140 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d  CoreFunc *min {m
1c150 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  in() SQL functio
1c160 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
1c170 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
1c180 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c190 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1c1a0 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d  with the.  minim
1c1b0 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  um value..  ^The
1c1c0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1c1d0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  min() function s
1c1e0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1c1f0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1c200 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1c210 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1c220 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1c230 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1c240 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1c250 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1c260 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1c270 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1c280 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1c290 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a  uments to min().
1c2a0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1c2b0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1c2c0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1c2d0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1c2e0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1c2f0 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
1c300 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1c310 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1c320 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1c330 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1c340 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20   operates as an 
1c350 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c  .  [minAggFunc |
1c360 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1c370 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20  ion] if given.  
1c380 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
1c390 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e  gument.)^.}..fun
1c3a0 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59  cdef {nullif(X,Y
1c3b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e  )} {} {.  ^The n
1c3c0 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
1c3d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20  ion returns its 
1c3e0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
1c3f0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1c400 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20  are.  different 
1c410 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20  and NULL if the 
1c420 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
1c430 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75  e same.  ^The nu
1c440 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
1c450 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74  on.  searches it
1c460 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1c470 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66   left to right f
1c480 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
1c490 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20  hat defines a.  
1c4a0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1c4b0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1c4c0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1c4d0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
1c4e0 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ng.  comparisons
1c4f0 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61  .  ^If neither a
1c500 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69  rgument to nulli
1c510 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f  f() defines a co
1c520 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1c530 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  .  then the BINA
1c540 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66  RY is used..}..f
1c550 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46  uncdef {printf(F
1c560 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b  ORMAT,...)} {} {
1c570 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28  .  ^(The printf(
1c580 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20  FORMAT,...) SQL 
1c590 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c  function works l
1c5a0 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ike the [sqlite3
1c5b0 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61  _mprintf()] C-la
1c5c0 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f  nguage.  functio
1c5d0 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66  n and the printf
1c5e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d  () function from
1c5f0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1c600 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65  library.)^.  The
1c610 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
1c620 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  is a format stri
1c630 6e 67 20 74 68 61 74 20 73 70 65 63 69 66 69 65  ng that specifie
1c640 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75  s how to constru
1c650 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20  ct the output.  
1c660 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c  string using val
1c670 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73  ues taken from s
1c680 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65  ubsequent argume
1c690 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f  nts.  ^If the FO
1c6a0 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73  RMAT argument is
1c6b0 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55  .  missing or NU
1c6c0 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
1c6d0 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68  lt is NULL.  ^Th
1c6e0 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73  e %n format is s
1c6f0 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20  ilently ignored 
1c700 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63  and.  does not c
1c710 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65  onsume an argume
1c720 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72  nt.  ^The %p for
1c730 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20  mat is an alias 
1c740 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a  for %X.  ^The %z
1c750 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74   format.  is int
1c760 65 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74  erchangeable wit
1c770 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72  h %s.  ^(If ther
1c780 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72  e are too few ar
1c790 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  guments in the a
1c7a0 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20  rgument list,.  
1c7b0 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74  missing argument
1c7c0 73 20 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f  s are assumed to
1c7d0 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c   have a NULL val
1c7e0 75 65 2c 20 77 68 69 63 68 20 69 73 20 74 72 61  ue, which is tra
1c7f0 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30  nslated into.  0
1c800 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65   or 0.0 for nume
1c810 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61  ric formats or a
1c820 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66  n empty string f
1c830 6f 72 20 25 73 2e 29 5e 20 20 53 65 65 20 74 68  or %s.)^  See th
1c840 65 0a 20 20 5b 62 75 69 6c 74 2d 69 6e 20 70 72  e.  [built-in pr
1c850 69 6e 74 66 28 29 5d 20 64 6f 63 75 6d 65 6e 74  intf()] document
1c860 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
1c870 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1c880 2e 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65 66 20  ..}.  ..funcdef 
1c890 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a  {quote(X)} {} {.
1c8a0 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20    ^The quote(X) 
1c8b0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c8c0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
1c8d0 53 51 4c 20 6c 69 74 65 72 61 6c 20 77 68 69 63  SQL literal whic
1c8e0 68 0a 20 20 69 73 20 74 68 65 20 76 61 6c 75 65  h.  is the value
1c8f0 20 6f 66 20 69 74 73 20 61 72 67 75 6d 65 6e 74   of its argument
1c900 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e   suitable for in
1c910 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20  clusion into an 
1c920 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  SQL statement.. 
1c930 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73 75   ^Strings are su
1c940 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67  rrounded by sing
1c950 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65  le-quotes with e
1c960 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69  scapes on interi
1c970 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e  or quotes.  as n
1c980 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61  eeded.  ^BLOBs a
1c990 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65  re encoded as he
1c9a0 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61  xadecimal litera
1c9b0 6c 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 77  ls..  ^Strings w
1c9c0 69 74 68 20 65 6d 62 65 64 64 65 64 20 4e 55 4c  ith embedded NUL
1c9d0 20 63 68 61 72 61 63 74 65 72 73 20 63 61 6e 6e   characters cann
1c9e0 6f 74 20 62 65 20 72 65 70 72 65 73 65 6e 74 65  ot be represente
1c9f0 64 20 61 73 20 73 74 72 69 6e 67 0a 20 20 6c 69  d as string.  li
1ca00 74 65 72 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e  terals in SQL an
1ca10 64 20 68 65 6e 63 65 20 74 68 65 20 72 65 74 75  d hence the retu
1ca20 72 6e 65 64 20 73 74 72 69 6e 67 20 6c 69 74 65  rned string lite
1ca30 72 61 6c 20 69 73 20 74 72 75 6e 63 61 74 65 64  ral is truncated
1ca40 20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68 65 20   prior.  to the 
1ca50 66 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75  first NUL..}..fu
1ca60 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d  ncdef {random()}
1ca70 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e   {} {.  ^The ran
1ca80 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  dom() function r
1ca90 65 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d  eturns a pseudo-
1caa0 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20  random integer. 
1cab0 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37   between -922337
1cac0 32 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e  2036854775808 an
1cad0 64 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34  d +9223372036854
1cae0 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64  775807..}..funcd
1caf0 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  ef {randomblob(N
1cb00 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1cb10 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e  andomblob(N) fun
1cb20 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20  ction return an 
1cb30 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74  N-byte blob cont
1cb40 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61  aining pseudo-ra
1cb50 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49  ndom.  bytes. ^I
1cb60 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e  f N is less than
1cb70 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65   1 then a 1-byte
1cb80 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20   random blob is 
1cb90 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e  returned...  <p>
1cba0 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69  Hint:  applicati
1cbb0 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65  ons can generate
1cbc0 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65   globally unique
1cbd0 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75   identifiers.  u
1cbe0 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69  sing this functi
1cbf0 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  on together with
1cc00 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a   [hex()] and/or.
1cc10 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65    [lower()] like
1cc20 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62   this:</p>..  <b
1cc30 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78  lockquote>.  hex
1cc40 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
1cc50 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65  <br></br>.  lowe
1cc60 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62  r(hex(randomblob
1cc70 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b  (16))).  </block
1cc80 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65  quote>.}..funcde
1cc90 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  f {replace(X,Y,Z
1cca0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1ccb0 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75  eplace(X,Y,Z) fu
1ccc0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1ccd0 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
1cce0 79 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20  y substituting. 
1ccf0 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76   string Z for ev
1cd00 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  ery occurrence o
1cd10 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74  f string Y in st
1cd20 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42  ring X.  ^The [B
1cd30 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69  INARY].  collati
1cd40 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
1cd50 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  sed for comparis
1cd60 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61  ons.  ^If Y is a
1cd70 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67  n empty.  string
1cd80 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75   then return X u
1cd90 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a  nchanged.  ^If Z
1cda0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
1cdb0 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74  y.  a string, it
1cdc0 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54   is cast to a UT
1cdd0 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72  F-8 string prior
1cde0 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a   to processing..
1cdf0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e  }..funcdef {roun
1ce00 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d  d(X) round(X,Y)}
1ce10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75   {} {.  ^The rou
1ce20 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  nd(X,Y) function
1ce30 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74   returns a float
1ce40 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75  ing-point.  valu
1ce50 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59  e X rounded to Y
1ce60 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 20 72   digits to the r
1ce70 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
1ce80 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66  mal point..  ^If
1ce90 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
1cea0 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20 69  is omitted, it i
1ceb0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20  s assumed to be 
1cec0 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  0..}..funcdef {r
1ced0 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c  trim(X) rtrim(X,
1cee0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1cef0 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74  rtrim(X,Y) funct
1cf00 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1cf10 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
1cf20 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
1cf30 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
1cf40 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
1cf50 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  Y from the right
1cf60 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49   side of X..  ^I
1cf70 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1cf80 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74 72   is omitted, rtr
1cf90 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1cfa0 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72 69  aces from the ri
1cfb0 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58 2e  ght.  side of X.
1cfc0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75  .}..funcdef {sou
1cfd0 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ndex(X)} {} {.  
1cfe0 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29 20  ^The soundex(X) 
1cff0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1d000 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
1d010 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e  s the soundex en
1d020 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68 65  coding .  of the
1d030 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68   string X..  ^Th
1d040 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20  e string "?000" 
1d050 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
1d060 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e  he argument is N
1d070 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a  ULL or contains.
1d080 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68 61    no ASCII alpha
1d090 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72 73  betic characters
1d0a0 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63 74  ..  ^(This funct
1d0b0 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ion is omitted f
1d0c0 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65  rom SQLite by de
1d0d0 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f  fault..  It is o
1d0e0 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66  nly available if
1d0f0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55   the [SQLITE_SOU
1d100 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  NDEX] compile-ti
1d110 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75  me option.  is u
1d120 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20  sed when SQLite 
1d130 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66  is built.)^.}..f
1d140 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63  uncdef {sqlite_c
1d150 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
1d160 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
1d170 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
1d180 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20  ption_get() SQL 
1d190 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1d1a0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1d1b0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70  .  [sqlite3_comp
1d1c0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d  ileoption_get()]
1d1d0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
1d1e0 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e 65  .  ^This routine
1d1f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d 74   returns the N-t
1d200 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  h compile-time o
1d210 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62 75  ption used to bu
1d220 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72 20  ild SQLite.  or 
1d230 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75 74  NULL if N is out
1d240 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65 20   of range.  See 
1d250 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c  also the [compil
1d260 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d 61  e_options pragma
1d270 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  ]..}..funcdef {s
1d280 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1d290 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20  ion_used(X)} {} 
1d2a0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1d2b0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1d2c0 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ed() SQL functio
1d2d0 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
1d2e0 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c  round the.  [sql
1d2f0 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
1d300 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b  on_used()] C/C++
1d310 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68   function..  ^Wh
1d320 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  en the argument 
1d330 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70  X to sqlite_comp
1d340 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
1d350 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77 68  ) is a string wh
1d360 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61 6d  ich.  is the nam
1d370 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74  e of a compile-t
1d380 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73  ime option, this
1d390 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
1d3a0 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20 66   true (1) or.  f
1d3b0 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64 69  alse (0) dependi
1d3c0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
1d3d0 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f 6e   not that option
1d3e0 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e 67   was used during
1d3f0 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a   the.  build..}.
1d400 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1d410 5f 6f 66 66 73 65 74 28 58 29 7d 20 7b 7d 20 7b  _offset(X)} {} {
1d420 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6f  .  ^The sqlite_o
1d430 66 66 73 65 74 28 58 29 20 66 75 6e 63 74 69 6f  ffset(X) functio
1d440 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 62 79  n returns the by
1d450 74 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65  te offset in the
1d460 20 64 61 74 61 62 61 73 65 0a 20 20 66 69 6c 65   database.  file
1d470 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e 69   for the beginni
1d480 6e 67 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ng of the record
1d490 20 66 72 6f 6d 20 77 68 69 63 68 20 76 61 6c 75   from which valu
1d4a0 65 20 77 6f 75 6c 64 20 62 65 20 72 65 61 64 2e  e would be read.
1d4b0 0a 20 20 49 66 20 58 20 69 73 20 6e 6f 74 20 61  .  If X is not a
1d4c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 6e 20 6f 72   column in an or
1d4d0 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 74 68  dinary table, th
1d4e0 65 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  en sqlite_offset
1d4f0 28 58 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55  (X) returns.  NU
1d500 4c 4c 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  LL.  The value r
1d510 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
1d520 65 5f 6f 66 66 73 65 74 28 58 29 20 6d 69 67 68  e_offset(X) migh
1d530 74 20 72 65 66 65 72 65 6e 63 65 20 65 69 74 68  t reference eith
1d540 65 72 20 74 68 65 0a 20 20 6f 72 69 67 69 6e 61  er the.  origina
1d550 6c 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 69 6e  l table or an in
1d560 64 65 78 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  dex, depending o
1d570 6e 20 74 68 65 20 71 75 65 72 79 2e 20 20 49 66  n the query.  If
1d580 20 74 68 65 20 76 61 6c 75 65 20 58 20 77 6f 75   the value X wou
1d590 6c 64 0a 20 20 6e 6f 72 6d 61 6c 6c 79 20 62 65  ld.  normally be
1d5a0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
1d5b0 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 73 71  an index, the sq
1d5c0 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 72  lite_offset(X) r
1d5d0 65 74 75 72 6e 73 20 74 68 65 0a 20 20 6f 66 66  eturns the.  off
1d5e0 73 65 74 20 74 6f 20 74 68 65 20 63 6f 72 72 65  set to the corre
1d5f0 73 70 6f 6e 64 69 6e 67 20 69 6e 64 65 78 20 72  sponding index r
1d600 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 20 76  ecord.  If the v
1d610 61 6c 75 65 20 58 20 77 6f 75 6c 64 20 62 65 0a  alue X would be.
1d620 20 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d    extracted from
1d630 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74 61   the original ta
1d640 62 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74 65  ble, then sqlite
1d650 5f 6f 66 66 73 65 74 28 58 29 20 72 65 74 75 72  _offset(X) retur
1d660 6e 73 20 74 68 65 20 6f 66 66 73 65 74 0a 20 20  ns the offset.  
1d670 74 6f 20 74 68 65 20 74 61 62 6c 65 20 72 65 63  to the table rec
1d680 6f 72 64 2e 0a 0a 20 20 3c 70 3e 54 68 65 20 73  ord...  <p>The s
1d690 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20  qlite_offset(X) 
1d6a0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1d6b0 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
1d6c0 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
1d6d0 74 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 2d  t.  using the [-
1d6e0 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f  DSQLITE_ENABLE_O
1d6f0 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 5d 20  FFSET_SQL_FUNC] 
1d700 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
1d710 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
1d720 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69  {sqlite_source_i
1d730 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  d()} {} {.  ^The
1d740 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
1d750 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  d() function ret
1d760 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1d770 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  at identifies th
1d780 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72  e.  specific ver
1d790 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72  sion of the sour
1d7a0 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73  ce code that was
1d7b0 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74   used to build t
1d7c0 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72  he SQLite.  libr
1d7d0 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e  ary.  ^The strin
1d7e0 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
1d7f0 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1d800 20 69 73 0a 20 20 74 68 65 20 64 61 74 65 20 61   is.  the date a
1d810 6e 64 20 74 69 6d 65 20 74 68 61 74 20 74 68 65  nd time that the
1d820 20 73 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73   source code was
1d830 20 63 68 65 63 6b 65 64 20 69 6e 20 66 6f 6c 6c   checked in foll
1d840 6f 77 65 64 20 62 79 0a 20 20 74 68 65 20 53 48  owed by.  the SH
1d850 41 31 20 68 61 73 68 20 66 6f 72 20 74 68 61 74  A1 hash for that
1d860 20 63 68 65 63 6b 2d 69 6e 2e 20 20 5e 54 68 69   check-in.  ^Thi
1d870 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20  s function is.  
1d880 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61  an SQL wrapper a
1d890 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1d8a0 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43  e3_sourceid()] C
1d8b0 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
1d8c0 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76  uncdef {sqlite_v
1d8d0 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20  ersion()} {} {. 
1d8e0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72   ^The sqlite_ver
1d8f0 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
1d900 72 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73  returns the vers
1d910 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ion string for t
1d920 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72  he SQLite.  libr
1d930 61 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e  ary that is runn
1d940 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63  ing.  ^This func
1d950 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20  tion is an SQL. 
1d960 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
1d970 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62  the [sqlite3_lib
1d980 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74  version()] C-int
1d990 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
1d9a0 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a  ef {substr(X,Y,Z
1d9b0 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b  ) substr(X,Y)} {
1d9c0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74  } {.  ^The subst
1d9d0 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  r(X,Y,Z) functio
1d9e0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73  n returns a subs
1d9f0 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73  tring of input s
1da00 74 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67  tring X that beg
1da10 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59  ins.  with the Y
1da20 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e  -th character an
1da30 64 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61  d which is Z cha
1da40 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20  racters long..  
1da50 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64  ^If Z is omitted
1da60 20 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59   then substr(X,Y
1da70 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68  ) returns all ch
1da80 61 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68  aracters through
1da90 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68   the end.  of th
1daa0 65 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e  e string X begin
1dab0 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d  ning with the Y-
1dac0 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d  th..  ^The left-
1dad0 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  most character o
1dae0 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e  f X is number 1.
1daf0 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74    ^If Y is negat
1db00 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66  ive.  then the f
1db10 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
1db20 66 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20  f the substring 
1db30 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e  is found by coun
1db40 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20  ting from the.  
1db50 72 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61  right rather tha
1db60 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66  n the left.  ^If
1db70 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74   Z is negative t
1db80 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29  hen.  the abs(Z)
1db90 20 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63   characters prec
1dba0 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63  eding the Y-th c
1dbb0 68 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74  haracter are ret
1dbc0 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69  urned..  ^If X i
1dbd0 73 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20  s a string then 
1dbe0 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63  characters indic
1dbf0 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75  es refer to actu
1dc00 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72  al UTF-8 .  char
1dc10 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69  acters.  ^If X i
1dc20 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68  s a BLOB then th
1dc30 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  e indices refer 
1dc40 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e  to bytes..}..fun
1dc50 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e  cdef {total_chan
1dc60 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ges()} {} {.  ^T
1dc70 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  he total_changes
1dc80 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1dc90 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1dca0 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20  f row changes.  
1dcb0 63 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54  caused by INSERT
1dcc0 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1dcd0 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20  TE.  statements 
1dce0 73 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e  since the curren
1dcf0 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
1dd00 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64  ction was opened
1dd10 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  ..  ^This functi
1dd20 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
1dd30 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
1dd40 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
1dd50 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74  s()].  C/C++ int
1dd60 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
1dd70 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d  ef {trim(X) trim
1dd80 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1dd90 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  he trim(X,Y) fun
1dda0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1ddb0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1ddc0 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1ddd0 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1dde0 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1ddf0 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  n Y from both en
1de00 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  ds of X..  ^If t
1de10 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
1de20 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58   omitted, trim(X
1de30 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1de40 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20   from both ends 
1de50 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
1de60 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20   {typeof(X)} {} 
1de70 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28  {.  ^The typeof(
1de80 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1de90 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61  rns a string tha
1dea0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  t indicates the 
1deb0 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20  [datatype] of.  
1dec0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58  the expression X
1ded0 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67  : "null", "integ
1dee0 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65  er", "real", "te
1def0 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a  xt", or "blob"..
1df00 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 6c 69  }..funcdef {unli
1df10 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  kely(X)} {} {.  
1df20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  ^The unlikely(X)
1df30 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1df40 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  s the argument X
1df50 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54   unchanged..  ^T
1df60 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1df70 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  unction is a no-
1df80 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  op that the code
1df90 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74   generator.  opt
1dfa0 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74  imizes away so t
1dfb0 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20  hat it consumes 
1dfc0 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74  no CPU cycles at
1dfd0 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61  .  run-time (tha
1dfe0 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1dff0 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1e000 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1e010 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 75  purpose of the u
1e020 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1e030 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ion is to provid
1e040 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68  e a hint.  to th
1e050 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
1e060 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e  that the argumen
1e070 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e  t X is a boolean
1e080 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73   value.  that is
1e090 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74 72 75   usually not tru
1e0a0 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b 65 6c  e. ^(The unlikel
1e0b0 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1e0c0 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f   equivalent.  to
1e0d0 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c   [likelihood](X,
1e0e0 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66   0.0625).)^.}..f
1e0f0 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65 28  uncdef {unicode(
1e100 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1e110 75 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63 74  unicode(X) funct
1e120 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1e130 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65 20  numeric unicode 
1e140 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72 65  code point corre
1e150 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68  sponding to.  th
1e160 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
1e170 72 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  r of the string 
1e180 58 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d  X.  If the argum
1e190 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28 58  ent to unicode(X
1e1a0 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69 6e  ) is not a strin
1e1b0 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65 73  g.  then the res
1e1c0 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ult is undefined
1e1d0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70  ..}..funcdef {up
1e1e0 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  per(X)} {} {.  ^
1e1f0 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e  The upper(X) fun
1e200 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1e210 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74  copy of input st
1e220 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20  ring X in which 
1e230 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73  all .  lower-cas
1e240 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  e ASCII characte
1e250 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  rs are converted
1e260 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d   to their upper-
1e270 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e  case equivalent.
1e280 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72  .}..funcdef {zer
1e290 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20  oblob(N)} {} {. 
1e2a0 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e   ^The zeroblob(N
1e2b0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1e2c0 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73  ns a BLOB consis
1e2d0 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20  ting of N bytes 
1e2e0 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74  of 0x00..  SQLit
1e2f0 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20  e manages these 
1e300 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65  zeroblobs very e
1e310 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72  fficiently.  Zer
1e320 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73  oblobs can be us
1e330 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20  ed to.  reserve 
1e340 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42  space for a BLOB
1e350 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77   that is later w
1e360 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20  ritten using .  
1e370 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70  [sqlite3_blob_op
1e380 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74  en() | increment
1e390 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20  al BLOB I/O]..  
1e3a0 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69  ^This SQL functi
1e3b0 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  on is implemente
1e3c0 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  d using the [sql
1e3d0 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f  ite3_result_zero
1e3e0 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e  blob()].  routin
1e3f0 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b  e from the C/C++
1e400 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f   interface..}.</
1e410 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72  tcl>..<p>The cor
1e420 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
1e430 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
1e440 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
1e450 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44  . .[datefunc | D
1e460 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66  ate &amp; Time f
1e470 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b 61 67 67 66  unctions],.[aggf
1e480 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
1e490 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61 6e 64 0a  functions], and.
1e4a0 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e 20 66 75  [json1 | JSON fu
1e4b0 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63  nctions] are doc
1e4c0 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74 65  umented separate
1e4d0 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74  ly.  An.applicat
1e4e0 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61  ion may define a
1e4f0 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69  dditional.functi
1e500 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
1e510 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
1e520 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
1e530 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
1e540 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1e550 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e  tion()] API.</p>
1e560 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b  ..<tcl>.set lx {
1e570 7d 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73 79  }.foreach basesy
1e580 6e 74 61 78 20 5b 61 72 72 61 79 20 6e 61 6d 65  ntax [array name
1e590 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b  s corefuncset] {
1e5a0 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74  .  foreach {synt
1e5b0 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63  ax keywords desc
1e5c0 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24  } $corefuncset($
1e5d0 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61  basesyntax) brea
1e5e0 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d  k.  regexp {^[a-
1e5f0 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61  z_]+} $basesynta
1e600 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72  x fragment.  for
1e610 65 61 63 68 20 63 6f 72 65 73 79 6e 74 61 78 20  each coresyntax 
1e620 24 73 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61  $syntax {.    la
1e630 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24  ppend lx [list $
1e640 66 72 61 67 6d 65 6e 74 20 24 63 6f 72 65 73 79  fragment $coresy
1e650 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64  ntax 0].  }.}.hd
1e660 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b  _list_of_links {
1e670 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e  } 225 [lsort -in
1e680 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70  dex 1 $lx]..hd_p
1e690 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73  utsnl "<hr class
1e6a0 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70 75 74 73  ='xhr'>".hd_puts
1e6b0 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63  nl "<dl>".foreac
1e6c0 68 20 62 61 73 65 73 79 6e 74 61 78 20 5b 6c 73  h basesyntax [ls
1e6d0 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ort [array names
1e6e0 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b   corefuncset]] {
1e6f0 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74  .  foreach {synt
1e700 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63  ax keywords desc
1e710 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24  } $corefuncset($
1e720 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61  basesyntax) brea
1e730 6b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  k.  regsub -all 
1e740 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72  {\s+} [string tr
1e750 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72  im $syntax] {<br
1e760 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65   />} syntax.  re
1e770 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
1e780 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
1e790 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
1e7a0 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
1e7b0 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
1e7c0 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
1e7d0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
1e7e0 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
1e7f0 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
1e800 6e 74 61 78 0a 20 20 72 65 67 65 78 70 20 7b 5e  ntax.  regexp {^
1e810 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e  [a-z]+} $basesyn
1e820 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 69  tax fragment.  i
1e830 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79  f {[llength $key
1e840 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20  words]==0} {.   
1e850 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b   regexp {[a-z_]+
1e860 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20  } $syntax name. 
1e870 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24     hd_fragment $
1e880 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e  name *$name "${n
1e890 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74  ame}() SQL funct
1e8a0 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  ion".  } else {.
1e8b0 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65      set fragname
1e8c0 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72   [lindex $keywor
1e8d0 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62  ds 0].    regsub
1e8e0 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24   -all {[^a-z]} $
1e8f0 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67  fragname {} frag
1e900 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
1e910 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20  ment $fragname. 
1e920 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f     eval hd_keywo
1e930 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  rds [string map 
1e940 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72  {\n { }} $keywor
1e950 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  ds].  }.  hd_put
1e960 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79  s "<dt><p><b>$sy
1e970 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20  ntax</b></dt>". 
1e980 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64   hd_resolve "<dd
1e990 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e  ><p>$desc</dd>\n
1e9a0 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c  ".}.hd_putsnl "<
1e9b0 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23 23  /dl>"..#########
1e9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ea00 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
1ea10 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e  ate And Time Fun
1ea20 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63  ctions} datefunc
1ea30 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b 64 61 74   {*datefunc {dat
1ea40 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1ea50 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f 72  ions}}.hd_keywor
1ea60 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20 66  ds {date() SQL f
1ea70 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29  unction} {time()
1ea80 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68   SQL function}.h
1ea90 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
1eaa0 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74  time() SQL funct
1eab0 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28  ion} {julianday(
1eac0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1ead0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74 72  hd_keywords {str
1eae0 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  ftime() SQL func
1eaf0 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tion}.</tcl>..<p
1eb00 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  >.SQLite support
1eb10 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  s five date and 
1eb20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
1eb30 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
1eb40 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e  .<p>.<ol>.<li> ^
1eb50 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e  (<b>date(</b><i>
1eb60 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1eb70 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1eb80 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1eb90 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1eba0 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>time(</b><i>ti
1ebb0 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1ebc0 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1ebd0 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1ebe0 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1ebf0 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  datetime(</b><i>
1ec00 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1ec10 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1ec20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1ec30 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1ec40 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e  b>julianday(</b>
1ec50 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1ec60 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1ec70 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1ec80 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1ec90 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f  ^(<b>strftime(</
1eca0 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d  b><i>format, tim
1ecb0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1ecc0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1ecd0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1ece0 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a  /li>.</ol>..<p>.
1ecf0 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20 61  ^All five date a
1ed00 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1ed10 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73 74  s take a time st
1ed20 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75 6d  ring as an argum
1ed30 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20  ent. .^The time 
1ed40 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77  string is follow
1ed50 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f  ed by zero or mo
1ed60 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e  re modifiers. .^
1ed70 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 66  The strftime() f
1ed80 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b  unction also tak
1ed90 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  es a format stri
1eda0 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74 20  ng as its first 
1edb0 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a  argument..</p>..
1edc0 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e 64  <p>.The date and
1edd0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1ede0 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66 0a  use a subset of.
1edf0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1ee00 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53  edia.org/wiki/IS
1ee10 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36 30  O_8601 | IS0-860
1ee20 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  1] date and time
1ee30 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64  .formats..^The d
1ee40 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ate() function r
1ee50 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20  eturns the date 
1ee60 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a 20  in this format: 
1ee70 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68  YYYY-MM-DD. .^Th
1ee80 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  e time() functio
1ee90 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 69  n returns the ti
1eea0 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20  me as HH:MM:SS. 
1eeb0 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28 29  .^The datetime()
1eec0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1eed0 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  s "YYYY-MM-DD HH
1eee0 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20  :MM:SS". .^(The 
1eef0 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63  julianday() func
1ef00 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1ef10 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
1ef20 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1ef30 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c  Julian_day | Jul
1ef40 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e  ian day] - the.n
1ef50 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
1ef60 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65  nce noon in Gree
1ef70 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65  nwich on Novembe
1ef80 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20  r 24, 4714 B.C. 
1ef90 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .([http://en.wik
1efa0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1efb0 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72  Proleptic_Gregor
1efc0 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50  ian_calendar | P
1efd0 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69  roleptic Gregori
1efe0 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e  an calendar]).)^
1eff0 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29  .^The strftime()
1f000 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
1f010 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74   the date format
1f020 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
1f030 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72   .the format str
1f040 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61 73  ing specified as
1f050 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
1f060 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74  ent..^The format
1f070 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73   string supports
1f080 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e   the most common
1f090 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66   substitutions f
1f0a0 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68 74  ound in the .[ht
1f0b0 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f  tp://opengroup.o
1f0c0 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30  rg/onlinepubs/00
1f0d0 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66  7908799/xsh/strf
1f0e0 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66  time.html | strf
1f0f0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d  time() function]
1f100 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61  .from the standa
1f110 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c 75  rd C library plu
1f120 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74 69  s two new substi
1f130 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20  tutions, %f and 
1f140 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77  %J..^(The follow
1f150 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65 74  ing is a complet
1f160 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20  e list of valid 
1f170 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73 74  strftime() subst
1f180 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a  itutions:.</p>..
1f190 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
1f1a0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
1f1b0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
1f1c0 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
1f1d0 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74  <tr><td><td widt
1f1e0 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e  h="10"><td></tr>
1f1f0 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74  ..<tr><td> %d <t
1f200 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f  d><td> day of mo
1f210 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e  nth: 00.<tr><td>
1f220 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61   %f <td><td> fra
1f230 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a  ctional seconds:
1f240 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e   SS.SSS.<tr><td>
1f250 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75   %H <td><td> hou
1f260 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74  r: 00-24 .<tr><t
1f270 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %j <td><td> d
1f280 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31 2d  ay of year: 001-
1f290 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20  366.<tr><td> %J 
1f2a0 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20  <td><td> Julian 
1f2b0 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  day number.<tr><
1f2c0 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20  td> %m <td><td> 
1f2d0 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72  month: 01-12.<tr
1f2e0 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64  ><td> %M <td><td
1f2f0 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a  > minute: 00-59.
1f300 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e  <tr><td> %s <td>
1f310 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e  <td> seconds sin
1f320 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74  ce 1970-01-01.<t
1f330 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74  r><td> %S <td><t
1f340 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35  d> seconds: 00-5
1f350 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74  9.<tr><td> %w <t
1f360 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77 65  d><td> day of we
1f370 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e 64  ek 0-6 with Sund
1f380 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25  ay==0.<tr><td> %
1f390 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20  W <td><td> week 
1f3a0 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c  of year: 00-53.<
1f3b0 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c  tr><td> %Y <td><
1f3c0 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d 39  td> year: 0000-9
1f3d0 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20  999.<tr><td> %% 
1f3e0 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62  <td><td> %.</tab
1f3f0 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
1f400 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63  >)^..<p>.^(Notic
1f410 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72  e that all other
1f420 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1f430 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  unctions can be 
1f440 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72  expressed.in ter
1f450 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29  ms of strftime()
1f460 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1f470 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
1f480 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
1f490 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
1f4a0 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
1f4b0 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c  <b>Function</b><
1f4c0 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74  td width="30"><t
1f4d0 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20  d><b>Equivalent 
1f4e0 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c  strftime()</b>.<
1f4f0 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e  tr><td>   date(.
1f500 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64  ..)      <td><td
1f510 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
1f520 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72  %m-%d', ...).<tr
1f530 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e  ><td>   time(...
1f540 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
1f550 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25 4d   strftime('%H:%M
1f560 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
1f570 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e  td>   datetime(.
1f580 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ..)  <td><td>  s
1f590 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1f5a0 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e  d %H:%M:%S', ...
1f5b0 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c  ).<tr><td>   jul
1f5c0 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e  ianday(...) <td>
1f5d0 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1f5e0 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c  %J', ...).</tabl
1f5f0 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
1f600 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79  )^..<p>.The only
1f610 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f   reasons for pro
1f620 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  viding functions
1f630 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72 66   other than strf
1f640 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63 6f  time() is.for co
1f650 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f  nvenience and fo
1f660 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f  r efficiency..</
1f670 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72  p>..<h3>Time Str
1f680 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ings</h3>..<p>^(
1f690 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  A time string ca
1f6a0 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20 74  n be in any of t
1f6b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
1f6c0 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  mats:</p>..<ol>.
1f6d0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1f6e0 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  DD</i>.<li> <i>Y
1f6f0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c  YYY-MM-DD HH:MM<
1f700 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1f710 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c  -MM-DD HH:MM:SS<
1f720 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1f730 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e  -MM-DD HH:MM:SS.
1f740 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
1f750 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
1f760 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f  >T</b><i>HH:MM</
1f770 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1f780 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
1f790 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  ><i>HH:MM:SS</i>
1f7a0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1f7b0 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
1f7c0 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
1f7d0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
1f7e0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
1f7f0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
1f800 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
1f810 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f  i>.<li> <b>now</
1f820 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44  b>.<li> <i>DDDDD
1f830 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29  DDDDD</i>.</ol>)
1f840 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61  ^..<p>.^In forma
1f850 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c 20  ts 5 through 7, 
1f860 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69 74  the "T" is a lit
1f870 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20 73  eral character s
1f880 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20 64  eparating .the d
1f890 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d 65  ate and the time
1f8a0 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62 79  , as required by
1f8b0 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33   .[http://www.w3
1f8c0 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61  c.org/TR/NOTE-da
1f8d0 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30  tetime | ISO-860
1f8e0 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20  1]. .^Formats 8 
1f8f0 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20  through 10 that 
1f900 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74  specify only a t
1f910 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74  ime assume a dat
1f920 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31  e of .2000-01-01
1f930 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65  . Format 11, the
1f940 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69   string 'now', i
1f950 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
1f960 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61   the .current da
1f970 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f  te and time as o
1f980 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
1f990 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65   xCurrentTime me
1f9a0 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c  thod.of the [sql
1f9b0 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74  ite3_vfs] object
1f9c0 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e   in use..^The 'n
1f9d0 6f 77 27 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ow' argument to 
1f9e0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1f9f0 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79 73 20 72  nctions always r
1fa00 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20 74  eturns exactly t
1fa10 68 65 0a 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he.same value fo
1fa20 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63  r multiple invoc
1fa30 61 74 69 6f 6e 73 20 77 69 74 68 69 6e 20 74 68  ations within th
1fa40 65 20 73 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f  e same [sqlite3_
1fa50 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b  step()] call..^[
1fa60 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1fa70 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f  dia.org/wiki/Coo
1fa80 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73  rdinated_Univers
1fa90 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72  al_Time | Univer
1faa0 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
1fab0 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75  Time (UTC)] is u
1fac0 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32  sed. .^Format 12
1fad0 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   is the .[http:/
1fae0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1faf0 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
1fb00 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  y | Julian day n
1fb10 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64  umber].expressed
1fb20 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   as a floating p
1fb30 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e  oint value..</p>
1fb40 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20  ..<p>.Formats 2 
1fb50 74 68 72 6f 75 67 68 20 31 30 20 6d 61 79 20 62  through 10 may b
1fb60 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
1fb70 6c 6f 77 65 64 20 62 79 20 61 20 74 69 6d 65 7a  lowed by a timez
1fb80 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72 20 6f 66  one indicator of
1fb90 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23   the form."<i>&#
1fba0 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c  91;+-&#93;HH:MM<
1fbb0 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20 22 3c 69  /i>" or just "<i
1fbc0 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65 20 64 61  >Z</i>".  The da
1fbd0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1fbe0 74 69 6f 6e 73 20 75 73 65 20 55 54 43 20 6f 72  tions use UTC or
1fbf0 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74   "zulu".time int
1fc00 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20  ernally, and so 
1fc10 74 68 65 20 22 5a 22 20 73 75 66 66 69 78 20 69  the "Z" suffix i
1fc20 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20  s a no-op.  Any 
1fc30 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22  non-zero "HH:MM"
1fc40 20 73 75 66 66 69 78 20 69 73 0a 73 75 62 74 72   suffix is.subtr
1fc50 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 69  acted from the i
1fc60 6e 64 69 63 61 74 65 64 20 64 61 74 65 20 61 6e  ndicated date an
1fc70 64 20 74 69 6d 65 20 69 6e 20 6f 72 64 65 72 20  d time in order 
1fc80 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20  to compute zulu 
1fc90 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c  time..For exampl
1fca0 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f  e, all of the fo
1fcb0 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20 73 74 72  llowing time str
1fcc0 69 6e 67 73 20 61 72 65 20 65 71 75 69 76 61 6c  ings are equival
1fcd0 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ent:.</p>..<bloc
1fce0 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d  kquote>.2013-10-
1fcf0 30 37 20 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c  07 08:23:19.120<
1fd00 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 54 30  br>.2013-10-07T0
1fd10 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e  8:23:19.120Z<br>
1fd20 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 34 3a 32  .2013-10-07 04:2
1fd30 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62  3:19.120-04:00<b
1fd40 72 3e 0a 32 34 35 36 35 37 32 2e 38 34 39 35 32  r>.2456572.84952
1fd50 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  685.</blockquote
1fd60 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d  >..<p>.^(In form
1fd70 61 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30  ats 4, 7, and 10
1fd80 2c 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c  , the fractional
1fd90 20 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53   seconds value S
1fda0 53 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f  S.SSS can have.o
1fdb0 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74  ne or more digit
1fdc0 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
1fdd0 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20  decimal point.  
1fde0 45 78 61 63 74 6c 79 20 74 68 72 65 65 20 64 69  Exactly three di
1fdf0 67 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69  gits are.shown i
1fe00 6e 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62  n the examples b
1fe10 65 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20  ecause only the 
1fe20 66 69 72 73 74 20 74 68 72 65 65 20 64 69 67 69  first three digi
1fe30 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
1fe40 6e 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt.to the result
1fe50 2c 20 62 75 74 20 74 68 65 20 69 6e 70 75 74 20  , but the input 
1fe60 73 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20  string can have 
1fe70 66 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68  fewer or more th
1fe80 61 6e 20 74 68 72 65 65 20 64 69 67 69 74 73 0a  an three digits.
1fe90 61 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d  and the date/tim
1fea0 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  e functions will
1feb0 20 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63   still operate c
1fec0 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69  orrectly.)^.Simi
1fed0 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32  larly, format 12
1fee0 20 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31   is shown with 1
1fef0 30 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69  0 significant di
1ff00 67 69 74 73 2c 20 62 75 74 20 74 68 65 20 64 61  gits, but the da
1ff10 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e  te/time.function
1ff20 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63  s will really ac
1ff30 63 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20  cept as many or 
1ff40 61 73 20 66 65 77 20 64 69 67 69 74 73 20 61 73  as few digits as
1ff50 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74   are necessary t
1ff60 6f 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o.represent the 
1ff70 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1ff80 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64  r..</p>..<h3>Mod
1ff90 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ifiers</h3>..<p>
1ffa0 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
1ffb0 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
1ffc0 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
1ffd0 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74 20   modifiers that 
1ffe0 0a 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f  .alter date and/
1fff0 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d  or time. ^Each m
20000 6f 64 69 66 69 65 72 0a 69 73 20 61 20 74 72 61  odifier.is a tra
20010 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  nsformation that
20020 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74   is applied to t
20030 68 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f  he time value to
20040 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69   its left..^Modi
20050 66 69 65 72 73 20 61 72 65 20 61 70 70 6c 69 65  fiers are applie
20060 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  d from left to r
20070 69 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69  ight; order is i
20080 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20  mportant..^(The 
20090 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69  available modifi
200a0 65 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ers are as follo
200b0 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws.</p>..<ol>.<l
200c0 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e  i> NNN days.<li>
200d0 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20   NNN hours.<li> 
200e0 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e  NNN minutes.<li>
200f0 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64   NNN.NNNN second
20100 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68  s.<li> NNN month
20110 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73  s.<li> NNN years
20120 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d  .<li> start of m
20130 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20  onth.<li> start 
20140 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61  of year.<li> sta
20150 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77  rt of day.<li> w
20160 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e  eekday N.<li> un
20170 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63  ixepoch.<li> loc
20180 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20  altime.<li> utc 
20190 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  .</ol>)^..<p>^Th
201a0 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69  e first six modi
201b0 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68  fiers (1 through
201c0 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20   6) .simply add 
201d0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d  the specified am
201e0 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20  ount of time to 
201f0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
20200 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20  e .specified by 
20210 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 69  the preceding ti
20220 6d 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64  mestring and mod
20230 69 66 69 65 72 73 2e 0a 5e 54 68 65 20 27 73 27  ifiers..^The 's'
20240 20 63 68 61 72 61 63 74 65 72 20 61 74 20 74 68   character at th
20250 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6d 6f 64  e end of the mod
20260 69 66 69 65 72 20 6e 61 6d 65 73 20 69 73 20 6f  ifier names is o
20270 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74 65 20 74  ptional..^Note t
20280 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e  hat "&plusmn;NNN
20290 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62   months" works b
202a0 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20  y rendering the 
202b0 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e  original date in
202c0 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44  to.the YYYY-MM-D
202d0 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67  D format, adding
202e0 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e   the &plusmn;NNN
202f0 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68   to the MM month
20300 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72   value, then.nor
20310 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73  malizing the res
20320 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72  ult.  ^Thus, for
20330 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61   example, the da
20340 74 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f  ta 2001-03-31 mo
20350 64 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f  dified.by '+1 mo
20360 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79  nth' initially y
20370 69 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31  ields 2001-04-31
20380 2c 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79  , but April only
20390 20 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20   has 30 days.so 
203a0 74 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d  the date is norm
203b0 61 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30  alized to 2001-0
203c0 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61  5-01.  ^A simila
203d0 72 20 65 66 66 65 63 74 20 6f 63 63 75 72 73 20  r effect occurs 
203e0 77 68 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61  when.the origina
203f0 6c 20 64 61 74 65 20 69 73 20 46 65 62 72 75 61  l date is Februa
20400 72 79 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79  ry 29 of a leapy
20410 65 61 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69  ear and the modi
20420 66 69 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b  fier is.&plusmn;
20430 4e 20 79 65 61 72 73 20 77 68 65 72 65 20 4e 20  N years where N 
20440 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c  is not a multipl
20450 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a  e of four.</p>..
20460 3c 70 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f  <p>^The "start o
20470 66 22 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20  f" modifiers (7 
20480 74 68 72 6f 75 67 68 20 39 29 20 73 68 69 66 74  through 9) shift
20490 20 74 68 65 20 64 61 74 65 20 62 61 63 6b 77 61   the date backwa
204a0 72 64 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69  rds .to the begi
204b0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72  nning of the cur
204c0 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72  rent month, year
204d0 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70   or day.</p>..<p
204e0 3e 5e 54 68 65 20 22 77 65 65 6b 64 61 79 22 20  >^The "weekday" 
204f0 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e 63 65  modifier advance
20500 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 77 61  s the date forwa
20510 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64  rd to the next d
20520 61 74 65 20 0a 77 68 65 72 65 20 74 68 65 20 77  ate .where the w
20530 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73  eekday number is
20540 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c   N. Sunday is 0,
20550 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e   Monday is 1, an
20560 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a  d so forth.</p>.
20570 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70  .<p>^The "unixep
20580 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31  och" modifier (1
20590 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  1) only works if
205a0 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   it immediately 
205b0 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73  follows .a times
205c0 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44  tring in the DDD
205d0 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20  DDDDDDD format. 
205e0 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20  .^This modifier 
205f0 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44 44  causes the DDDDD
20600 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65  DDDDD to be inte
20610 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20  rpreted not .as 
20620 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  a Julian day num
20630 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c  ber as it normal
20640 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74  ly would be, but
20650 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   as.[http://en.w
20660 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
20670 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e  i/Unix_time | Un
20680 69 78 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a  ix Time] - the .
20690 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
206a0 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49  s since 1970.  I
206b0 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  f the "unixepoch
206c0 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20  " modifier does 
206d0 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d  not.follow a tim
206e0 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66  estring of the f
206f0 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44 20 77  orm DDDDDDDDDD w
20700 68 69 63 68 20 65 78 70 72 65 73 73 65 73 20 74  hich expresses t
20710 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63  he number.of sec
20720 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 20  onds since 1970 
20730 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69  or if other modi
20740 66 69 65 72 73 0a 73 65 70 61 72 61 74 65 20 74  fiers.separate t
20750 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
20760 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69  odifier from pri
20770 6f 72 20 44 44 44 44 44 44 44 44 44 44 20 74 68  or DDDDDDDDDD th
20780 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20  en the.behavior 
20790 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 46 6f  is undefined..Fo
207a0 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  r SQLite version
207b0 73 20 62 65 66 6f 72 65 20 33 2e 31 36 2e 30 20  s before 3.16.0 
207c0 28 5b 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30 5d  ([dateof:3.16.0]
207d0 29 2c 20 0a 74 68 65 20 22 75 6e 69 78 65 70 6f  ), .the "unixepo
207e0 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c  ch" modifier onl
207f0 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65  y works for.date
20800 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
20810 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61 6e  1-01 00:00:00 an
20820 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30 3a  d 5352-11-01 10:
20830 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d 65  52:47 (unix time
20840 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32 30  s.of -6216721920
20850 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35 31  0 through 106751
20860 39 39 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 74  991167).</p>..<t
20870 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
20880 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c 74  ocaltime {localt
20890 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 20 7b 27  ime modifier} {'
208a0 75 74 63 27 20 6d 6f 64 69 66 69 65 72 7d 3c 2f  utc' modifier}</
208b0 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f  tcl>.<p>^The "lo
208c0 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65  caltime" modifie
208d0 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20 74  r (12) assumes t
208e0 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74  he time string t
208f0 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e  o its left is in
20900 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64  .Universal Coord
20910 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43  inated Time (UTC
20920 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  ) and adjusts th
20930 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f  e time.string so
20940 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61 79   that it display
20950 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66  s localtime.  If
20960 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c   "localtime".fol
20970 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61 74  lows a time that
20980 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65   is not UTC, the
20990 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
209a0 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54  s undefined..^(T
209b0 68 65 20 22 75 74 63 22 20 6d 6f 64 69 66 69 65  he "utc" modifie
209c0 72 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74  r is the opposit
209d0 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22  e of "localtime"
209e0 2e 20 20 0a 22 75 74 63 22 20 61 73 73 75 6d 65  .  ."utc" assume
209f0 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e  s that the strin
20a00 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g.to its left is
20a10 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69   in the local ti
20a20 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73  mezone and adjus
20a30 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74  ts that string t
20a40 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49  o be in UTC.)^.I
20a50 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69  f the prior stri
20a60 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63  ng is not in loc
20a70 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  altime, then the
20a80 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22   result of "utc"
20a90 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f   is.undefined.</
20aa0 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
20ab0 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  </h3>..^(<p>Comp
20ac0 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
20ad0 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b  date.<p>..<block
20ae0 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
20af0 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b  e('now');</block
20b00 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
20b10 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20  ompute the last 
20b20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65  day of the curre
20b30 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c  nt month.</p>..<
20b40 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
20b50 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
20b60 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b  art of month','+
20b70 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79  1 month','-1 day
20b80 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
20b90 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
20ba0 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
20bb0 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
20bc0 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
20bd0 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  41466.</p>..<blo
20be0 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c  ckquote>.    SEL
20bf0 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
20c00 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
20c10 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  och');.</blockqu
20c20 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
20c30 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
20c40 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
20c50 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
20c60 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63  92941466, and .c
20c70 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f  ompensate for yo
20c80 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  ur local timezon
20c90 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
20ca0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
20cb0 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
20cc0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20  6, 'unixepoch', 
20cd0 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f  'localtime');.</
20ce0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
20cf0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
20d00 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d  current unix tim
20d10 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c  estamp.</p>..<bl
20d20 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
20d30 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
20d40 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ,'now');.</block
20d50 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
20d60 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
20d70 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
20d80 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74  the signing of t
20d90 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f  he US Declaratio
20da0 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63  n.of Independenc
20db0 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
20dc0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75  ote>.  SELECT ju
20dd0 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
20de0 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36   julianday('1776
20df0 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63  -07-04');.</bloc
20e00 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20e10 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
20e20 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
20e30 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  nce a particular
20e40 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a   moment in 2004:
20e50 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
20e60 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
20e70 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
20e80 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27   - strftime('%s'
20e90 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a  ,'2004-01-01 02:
20ea0 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  34:56');.</block
20eb0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a  quote>)^..^(<p>.
20ec0 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
20ed0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75   of the first Tu
20ee0 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72  esday in October
20ef0 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74  .for the current
20f00 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c   year..</p>..<bl
20f10 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
20f20 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
20f30 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b  tart of year','+
20f40 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64  9 months','weekd
20f50 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  ay 2');.</blockq
20f60 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
20f70 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73  mpute the time s
20f80 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70  ince the unix ep
20f90 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a  och in seconds .
20fa0 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27  (like strftime('
20fb0 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70  %s','now') excep
20fc0 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74  t includes fract
20fd0 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e  ional part):</p>
20fe0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
20ff0 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64   SELECT (juliand
21000 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30  ay('now') - 2440
21010 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a  587.5)*86400.0;.
21020 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
21030 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64  .<h3>Caveats And
21040 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54   Bugs</h3>..<p>T
21050 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f  he computation o
21060 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70  f local time dep
21070 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20  ends heavily on 
21080 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c  the whim .of pol
21090 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20  iticians and is 
210a0 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74  thus difficult t
210b0 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f  o get correct fo
210c0 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20  r .all locales. 
210d0 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65  ^In this impleme
210e0 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61  ntation, the sta
210f0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
21100 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74  .function localt
21110 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20  ime_r() is used 
21120 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65  to assist in the
21130 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20   calculation of 
21140 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28  .local time.  ^(
21150 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72  The .localtime_r
21160 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f  () C function no
21170 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b  rmally only work
21180 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77  s for years.betw
21190 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33  een 1970 and 203
211a0 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74  7. For dates out
211b0 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c  side this range,
211c0 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74   SQLite .attempt
211d0 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61  s to map the yea
211e0 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61  r into an equiva
211f0 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e  lent year within
21200 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f   .this range, do
21210 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
21220 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79  , then map the y
21230 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a  ear back.)^</p>.
21240 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e  ..<p>^(These fun
21250 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  ctions only work
21260 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65   for dates betwe
21270 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
21280 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d  :00:00.and 9999-
21290 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28  12-31 23:59:59 (
212a0 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62  julidan day numb
212b0 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68  ers 1721059.5 th
212c0 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29  rough 5373484.5)
212d0 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75  .)^.For dates ou
212e0 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65  tside that range
212f0 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  , the results of
21300 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73   these.functions
21310 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c   are undefined.<
21320 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74  /p>..<p>Non-Vist
21330 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
21340 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  rms only support
21350 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20   one set of DST 
21360 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e  rules. .Vista on
21370 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e  ly supports two.
21380 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74   Therefore, on t
21390 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20  hese platforms, 
213a0 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20  .historical DST 
213b0 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c  calculations wil
213c0 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  l be incorrect. 
213d0 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e  .For example, in
213e0 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37   the US, in 2007
213f0 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63   the DST rules c
21400 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73  hanged. .Non-Vis
21410 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
21420 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e  orms apply the n
21430 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65  ew 2007 DST rule
21440 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f  s .to all previo
21450 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c  us years as well
21460 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d  . Vista does som
21470 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74  ewhat better.get
21480 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72  ting results cor
21490 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38  rect back to 198
214a0 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65  6, when the rule
214b0 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e  s were also chan
214c0 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c  ged.</p>..<p>All
214d0 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74   internal comput
214e0 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68  ations assume th
214f0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
21500 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
21510 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  /Gregorian_calen
21520 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20  dar | Gregorian 
21530 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d  calendar].system
21540 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73  .  It is also as
21550 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79  sumed that every
21560 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20  .day is exactly 
21570 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e  86400 seconds in
21580 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   duration.</p>..
21590 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
215a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215e0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67  ####.Section {Ag
215f0 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
21600 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67  s} aggfunc {*agg
21610 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f 63  func}.unset -noc
21620 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e 63  omplain corefunc
21630 73 65 74 0a 0a 66 75 6e 63 64 65 66 20 7b 61 76  set..funcdef {av
21640 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67  g(X)} {*avg {avg
21650 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
21660 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
21670 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a   avg() function.
21680 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 76    returns the av
21690 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61  erage value of a
216a0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58  ll non-NULL <i>X
216b0 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20  </i> within a.  
216c0 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20  group.  ^String 
216d0 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20  and BLOB values 
216e0 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b  that do not look
216f0 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72   like numbers ar
21700 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20  e.  interpreted 
21710 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73  as 0..  ^The res
21720 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
21730 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
21740 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73  g point value as
21750 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68   long as.  at th
21760 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74 20  ere is at least 
21770 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  one non-NULL inp
21780 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ut even if all. 
21790 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
217a0 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75  gers.  ^The resu
217b0 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e  lt of avg() is N
217c0 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ULL if and only 
217d0 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e  if.  there are n
217e0 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
217f0 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  s.  .}..funcdef 
21800 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28  {count(X) count(
21810 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75  *)} {*count {cou
21820 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  nt() aggregate f
21830 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
21840 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63  he count(X) func
21850 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
21860 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75   count of the nu
21870 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20  mber of times.  
21880 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73  that <i>X</i> is
21890 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67   not NULL in a g
218a0 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e  roup.  ^The coun
218b0 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  t(*) function.  
218c0 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
218d0 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  ts) returns the 
218e0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
218f0 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
21900 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  p..}..funcdef {g
21910 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67  roup_concat(X) g
21920 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29  roup_concat(X,Y)
21930 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e  } {.  *group_con
21940 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  cat {group_conca
21950 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
21960 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
21970 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  he group_concat(
21980 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
21990 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68  ns.  a string wh
219a0 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61  ich is the conca
219b0 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c  tenation of.  al
219c0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
219d0 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  s of <i>X</i>.  
219e0 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69  ^If parameter <i
219f0 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e  >Y</i> is presen
21a00 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75  t then.  it is u
21a10 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
21a20 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69  ator.  between i
21a30 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58  nstances of <i>X
21a40 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20  </i>.  ^A comma 
21a50 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
21a60 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
21a70 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
21a80 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
21a90 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
21aa0 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
21ab0 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
21ac0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
21ad0 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e  (X)} {*maxAggFun
21ae0 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28  c *agg_max {max(
21af0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
21b00 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
21b10 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
21b20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
21b30 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  ns the maximum v
21b40 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
21b50 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
21b60 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  .  ^The maximum 
21b70 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c  value is the val
21b80 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ue that would be
21b90 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69   returned last i
21ba0 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20  n an.  ORDER BY 
21bb0 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75  on the same colu
21bc0 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  mn.  ^Aggregate 
21bd0 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55  max() returns NU
21be0 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c  LL .  if and onl
21bf0 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
21c00 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  o non-NULL value
21c10 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
21c20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
21c30 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63  X)} {*minAggFunc
21c40 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29   *agg_min {min()
21c50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
21c60 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
21c70 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
21c80 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
21c90 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f  s the minimum no
21ca0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20  n-NULL value of 
21cb0 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
21cc0 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20  e group..  ^The 
21cd0 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
21ce0 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
21cf0 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77  ULL value that w
21d00 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e  ould appear.  in
21d10 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20   an ORDER BY of 
21d20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41  the column..  ^A
21d30 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72  ggregate min() r
21d40 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61  eturns NULL if a
21d50 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
21d60 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
21d70 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  .  values in the
21d80 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
21d90 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c  ef {sum(X) total
21da0 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e  (X)} {.  *sumFun
21db0 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20  c *sum *total.  
21dc0 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74 65  {sum() aggregate
21dd0 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f   function}.  {to
21de0 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20  tal() aggregate 
21df0 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
21e00 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74  ^The sum() and t
21e10 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
21e20 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74   functions.  ret
21e30 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e  urn sum of all n
21e40 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
21e50 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
21e60 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
21e70 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
21e80 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
21e90 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75  eturns.  NULL bu
21ea0 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
21eb0 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73  s 0.0..  NULL is
21ec0 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20   not normally a 
21ed0 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66  helpful result f
21ee0 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f  or the sum of no
21ef0 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20   rows.  but the 
21f00 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
21f10 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
21f20 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61  t other.  SQL da
21f30 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
21f40 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
21f50 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
21f60 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
21f70 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f  .  same way in o
21f80 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61  rder to be compa
21f90 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e  tible.   The non
21fa0 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
21fb0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
21fc0 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
21fd0 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
21fe0 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
21ff0 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
22000 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
22010 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
22020 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  >^The result of 
22030 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79  total() is alway
22040 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
22050 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  nt value..  ^The
22060 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
22070 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
22080 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
22090 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
220a0 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20  integers..  ^If 
220b0 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
220c0 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
220d0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
220e0 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
220f0 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
22100 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
22110 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
22120 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
22130 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
22140 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d  .</p>..  <p>^Sum
22150 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  () will throw an
22160 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c   "integer overfl
22170 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66  ow" exception if
22180 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72   all inputs.  ar
22190 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55  e integers or NU
221a0 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  LL.  and an inte
221b0 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
221c0 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
221d0 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
221e0 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61  utation..  ^Tota
221f0 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
22200 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
22210 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  flow..}.</tcl>..
22220 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61  .<p>.The aggrega
22230 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  te functions sho
22240 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
22250 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
22260 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61  t.  Additional.a
22270 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
22280 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
22290 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69  may be added usi
222a0 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33  ng the .[sqlite3
222b0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
222c0 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  ()]</a>.API.</p>
222d0 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67  ..<p>.^In any ag
222e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
222f0 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69   that takes a si
22300 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74  ngle argument, t
22310 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e  hat argument.can
22320 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
22330 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54  the keyword DIST
22340 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20  INCT.  ^In such 
22350 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
22360 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
22370 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
22380 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
22390 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
223a0 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  nction..^For exa
223b0 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69  mple, the functi
223c0 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e  on "count(distin
223d0 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75  ct X)" will retu
223e0 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  rn the number.of
223f0 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73   distinct values
22400 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73   of column X ins
22410 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61  tead of the tota
22420 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  l number of non-
22430 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63  null.values in c
22440 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c  olumn X..</p>..<
22450 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66  tcl>.set lx {}.f
22460 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61  oreach basesynta
22470 78 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63  x [array names c
22480 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20 20  orefuncset] {.  
22490 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20  foreach {syntax 
224a0 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24  keywords desc} $
224b0 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73  corefuncset($bas
224c0 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20  esyntax) break. 
224d0 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d   regexp {^[a-z_]
224e0 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20 66  +} $basesyntax f
224f0 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61 63  ragment.  foreac
22500 68 20 63 6f 72 65 73 79 6e 74 61 78 20 24 73 79  h coresyntax $sy
22510 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61 70 70 65  ntax {.    lappe
22520 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 66 72 61  nd lx [list $fra
22530 67 6d 65 6e 74 20 24 63 6f 72 65 73 79 6e 74 61  gment $coresynta
22540 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c 69  x 0].  }.}.hd_li
22550 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 32  st_of_links {} 2
22560 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78  25 [lsort -index
22570 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74 73   1 $lx]..hd_puts
22580 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73 3d 27 78  nl "<hr class='x
22590 68 72 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c 20  hr'>".hd_putsnl 
225a0 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20 62  "<dl>".foreach b
225b0 61 73 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72 74  asesyntax [lsort
225c0 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f   [array names co
225d0 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20 20  refuncset]] {.  
225e0 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20  foreach {syntax 
225f0 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24  keywords desc} $
22600 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73  corefuncset($bas
22610 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20  esyntax) break. 
22620 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73   regsub -all {\s
22630 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim 
22640 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e  $syntax] {<br />
22650 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
22660 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d  b -all {\(([^*)]
22670 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28  +)\)} $syntax {(
22680 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74  <i>\1</i>)} synt
22690 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
226a0 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f   {,} $syntax {</
226b0 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20  i>,<i>} syntax. 
226c0 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69   regsub -all {<i
226d0 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79  >\.\.\.</i>} $sy
226e0 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61  ntax {...} synta
226f0 78 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d  x.  regexp {^[a-
22700 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78  z]+} $basesyntax
22710 20 66 72 61 67 6d 65 6e 74 0a 20 20 69 66 20 7b   fragment.  if {
22720 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
22730 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65  ds]==0} {.    re
22740 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24  gexp {[a-z_]+} $
22750 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20  syntax name.    
22760 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d  hd_fragment $nam
22770 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65  e *$name "${name
22780 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  }() SQL function
22790 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ".  } else {.   
227a0 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c   set fragname [l
227b0 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20  index $keywords 
227c0 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61  0].    regsub -a
227d0 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61  ll {[^a-z]} $fra
227e0 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d  gname {} fragnam
227f0 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
22800 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  t $fragname.    
22810 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
22820 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e   [string map {\n
22830 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d   { }} $keywords]
22840 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22  .  }.  hd_puts "
22850 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74 61  <dt><p><b>$synta
22860 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68 64  x</b></dt>".  hd
22870 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c 70  _resolve "<dd><p
22880 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a 7d  >$desc</dd>\n".}
22890 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64 6c  .hd_putsnl "</dl
228a0 3e 22 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23  >"..############
228b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228f0 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52  ##.Section INSER
22900 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54  T insert {INSERT
22910 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75   *INSERTs}..Recu
22920 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
22930 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c  am insert-stmt.<
22940 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
22950 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
22960 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
22970 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 6f 6c  sic forms.  .<ol
22980 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45  >.<li><p><b>INSE
22990 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74  RT INTO </b><i>t
229a0 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 56 41 4c 55  able</i><b> VALU
229b0 45 53 28 2e 2e 2e 29 3b 3c 2f 62 3e 0a 3c 70 3e  ES(...);</b>.<p>
229c0 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20  ^The first form 
229d0 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45  (with the "VALUE
229e0 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61  S" keyword) crea
229f0 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  tes one or more.
22a00 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65  new rows in.an e
22a10 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e  xisting table. ^
22a20 49 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63  If the <yyterm>c
22a30 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
22a40 72 6d 3e 20 6c 69 73 74 20 61 66 74 65 72 0a 3c  rm> list after.<
22a50 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
22a60 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f 6d  e</yyterm> is om
22a70 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 6e  itted then the n
22a80 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20  umber.of values 
22a90 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61  inserted into ea
22aa0 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74  ch row.must be t
22ab0 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
22ac0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
22ad0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e   in the table. ^
22ae0 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65  In this case.the
22af0 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
22b00 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d  ating the left-m
22b10 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66  ost expression f
22b20 72 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66  rom each term of
22b30 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74  .the VALUES list
22b40 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
22b50 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  o the left-most 
22b60 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e  column of each n
22b70 65 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66  ew row,.and so f
22b80 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75  orth for each su
22b90 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73  bsequent express
22ba0 69 6f 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74 65  ion. ^If a <yyte
22bb0 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
22bc0 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20  yyterm>.list is 
22bd0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
22be0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
22bf0 6c 75 65 73 20 69 6e 20 65 61 63 68 20 74 65 72  lues in each ter
22c00 6d 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c  m of the.VALUE l
22c10 69 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ist must match t
22c20 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65  he number of.spe
22c30 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  cified columns. 
22c40 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d  ^Each of the nam
22c50 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ed columns of th
22c60 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70  e new row is pop
22c70 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65 20  ulated.with the 
22c80 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75  results of evalu
22c90 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  ating the corres
22ca0 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65  ponding VALUES e
22cb0 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c  xpression. ^Tabl
22cc0 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64  e.columns that d
22cd0 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20  o not appear in 
22ce0 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20  the column list 
22cf0 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69  are populated wi
22d00 74 68 20 74 68 65 20 0a 5b 64 65 66 61 75 6c 74  th the .[default
22d10 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20 28   column value] (
22d20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
22d30 74 20 6f 66 20 74 68 65 20 5b 43 52 45 41 54 45  t of the [CREATE
22d40 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
22d50 74 29 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c 4c  t), or.with NULL
22d60 20 69 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74 20   if no [default 
22d70 76 61 6c 75 65 5d 20 69 73 20 73 70 65 63 69 66  value] is specif
22d80 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  ied...<li><p><b>
22d90 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e  INSERT INTO </b>
22da0 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20  <i>table</i><b> 
22db0 53 45 4c 45 43 54 20 2e 2e 2e 3b 3c 2f 62 3e 0a  SELECT ...;</b>.
22dc0 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  <p>The second fo
22dd0 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
22de0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61   statement conta
22df0 69 6e 73 20 61 20 5b 53 45 4c 45 43 54 5d 20 73  ins a [SELECT] s
22e00 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64  tatement.instead
22e10 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61   of a VALUES cla
22e20 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72  use. ^A new entr
22e30 79 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  y is inserted in
22e40 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72  to the table for
22e50 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61 74   each.row of dat
22e60 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78  a returned by ex
22e70 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
22e80 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49  CT statement. ^I
22e90 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20  f a column-list 
22ea0 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
22eb0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
22ec0 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
22ed0 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
22ee0 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
22ef0 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .as the number o
22f00 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63  f items in the c
22f10 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68  olumn-list. ^Oth
22f20 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f  erwise, if no co
22f30 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65  lumn-list is.spe
22f40 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62  cified, the numb
22f50 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
22f60 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
22f70 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62  he SELECT must b
22f80 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  e the same.as th
22f90 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
22fa0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
22fb0 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73 74  . ^Any SELECT st
22fc0 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69  atement, includi
22fd0 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  ng.[compound SEL
22fe0 45 43 54 73 5d 20 61 6e 64 20 53 45 4c 45 43 54  ECTs] and SELECT
22ff0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
23000 20 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 2f   [ORDER BY] and/
23010 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
23020 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64  es, .may be used
23030 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
23040 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20  atement of this 
23050 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  form...<li><p><b
23060 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62  >INSERT INTO </b
23070 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e  ><i>table</i><b>
23080 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b   DEFAULT VALUES;
23090 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20 74 68 69 72  </b>.<p>The thir
230a0 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53  d form of an INS
230b0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
230c0 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41   with DEFAULT VA
230d0 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45  LUES..^(The INSE
230e0 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56  RT ... DEFAULT V
230f0 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20  ALUES statement 
23100 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65  inserts a single
23110 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68   new row into th
23120 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e  e.named table.)^
23130 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
23140 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
23150 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69  populated with i
23160 74 73 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c  ts .[default val
23170 75 65 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e  ue], or with a N
23180 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c  ULL if no defaul
23190 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
231a0 66 69 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66  fied .as part of
231b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69   the column defi
231c0 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43  nition in the [C
231d0 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
231e0 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a  tement...</ol>..
231f0 3c 70 3e 0a 5e 54 68 65 20 69 6e 69 74 69 61 6c  <p>.^The initial
23200 20 22 49 4e 53 45 52 54 22 20 6b 65 79 77 6f 72   "INSERT" keywor
23210 64 20 63 61 6e 20 62 65 20 72 65 70 6c 61 63 65  d can be replace
23220 64 20 62 79 0a 22 52 45 50 4c 41 43 45 22 20 6f  d by."REPLACE" o
23230 72 20 22 49 4e 53 45 52 54 20 4f 52 20 3c 69 3e  r "INSERT OR <i>
23240 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 74 6f 20 73  action</i>" to s
23250 70 65 63 69 66 79 20 61 6e 20 61 6c 74 65 72 6e  pecify an altern
23260 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  ative.constraint
23270 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7c 63 6f   [ON CONFLICT|co
23280 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
23290 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 20 74 6f 20  n algorithm] to 
232a0 75 73 65 20 64 75 72 69 6e 67 20 0a 74 68 61 74  use during .that
232b0 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d   one INSERT comm
232c0 61 6e 64 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  and..For compati
232d0 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
232e0 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61  L, ^the parser a
232f0 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
23300 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
23310 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
23320 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
23330 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
23340 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
23350 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
23360 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  ...<p>^(The opti
23370 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65 6d 61 2d  onal "<i>schema-
23380 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
23390 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
233a0 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e  .<yyterm>table-n
233b0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 73 20  ame</yyterm>.is 
233c0 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 74 6f  supported for to
233d0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
233e0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
233f0 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
23400 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
23410 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
23420 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
23430 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
23440 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
23450 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
23460 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
23470 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
23480 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
23490 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
234a0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
234b0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
234c0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
234d0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
234e0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
234f0 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
23500 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
23510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23550 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
23560 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
23570 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
23580 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
23590 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65  N CONFLICT}}..Re
235a0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
235b0 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
235c0 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
235d0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
235e0 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
235f0 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
23600 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
23610 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
23620 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
23630 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
23640 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
23650 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
23660 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
23670 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
23680 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
23690 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
236a0 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
236b0 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
236c0 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
236d0 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
236e0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
236f0 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
23700 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
23710 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
23720 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
23730 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
23740 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
23750 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
23760 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
23770 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
23780 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
23790 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
237a0 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
237b0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
237c0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
237d0 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
237e0 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
237f0 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
23800 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
23810 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
23820 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
23830 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
23840 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
23850 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
23860 61 70 70 6c 69 65 73 20 74 6f 20 5b 55 4e 49 51  applies to [UNIQ
23870 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c  UE], [NOT NULL],
23880 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64 20 5b 50  .[CHECK], and [P
23890 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
238a0 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 4f 4e 20  traints..The ON 
238b0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
238c0 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c  hm does not.appl
238d0 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45  y to [FOREIGN KE
238e0 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a  Y constraints]..
238f0 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
23900 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
23910 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f  on algorithm cho
23920 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20  ices:.ROLLBACK, 
23930 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e  ABORT, FAIL, IGN
23940 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
23950 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
23960 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
23970 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
23980 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20  ABORT.  This.is 
23990 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c  what they mean:<
239a0 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62  /p>..<dl>.<dt><b
239b0 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64  >ROLLBACK</b></d
239c0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
239d0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
239e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
239f0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
23a00 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74  ROLLBACK.resolut
23a10 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
23a20 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
23a30 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
23a40 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ith.an SQLITE_CO
23a50 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61  NSTRAINT error a
23a60 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68  nd rolls back th
23a70 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
23a80 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72  ction..^If no tr
23a90 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74  ansaction is.act
23aa0 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20  ive (other than 
23ab0 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e  the implied tran
23ac0 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  saction that is 
23ad0 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79  created on every
23ae0 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74  .command) then t
23af0 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f  he ROLLBACK reso
23b00 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
23b10 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
23b20 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67  as the.ABORT alg
23b30 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e  orithm.</p></dd>
23b40 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f  ..<dt><b>ABORT</
23b50 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
23b60 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
23b70 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
23b80 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
23b90 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c   the ABORT.resol
23ba0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
23bb0 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  aborts the curre
23bc0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
23bd0 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f  .with an SQLITE_
23be0 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72  CONSTRAINT error
23bf0 20 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61   and backs out a
23c00 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20  ny changes.made 
23c10 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  by the current S
23c20 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75  QL statement; bu
23c30 74 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64  t changes caused
23c40 0a 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74  .by prior SQL st
23c50 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
23c60 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
23c70 74 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76  tion are preserv
23c80 65 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73  ed and the.trans
23c90 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
23ca0 63 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74  ctive..This is t
23cb0 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
23cc0 69 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61  ior and the beha
23cd0 76 69 6f 72 20 73 70 65 63 69 66 69 65 64 20 62  vior specified b
23ce0 79 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64 61  y the SQL.standa
23cf0 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  rd.</p></dd>..<d
23d00 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64  t><b>FAIL</b></d
23d10 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
23d20 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
23d30 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
23d40 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
23d50 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL.resolution 
23d60 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
23d70 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
23d80 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20   statement with 
23d90 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an.SQLITE_CONSTR
23da0 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42 75  AINT error.  ^Bu
23db0 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f 6c  t the FAIL resol
23dc0 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62  ution does not.b
23dd0 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63 68  ack out prior ch
23de0 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51 4c  anges of the SQL
23df0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
23e00 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a  failed nor does.
23e10 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e 73  it end the trans
23e20 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  action..^For exa
23e30 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41  mple, if an UPDA
23e40 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  TE.statement enc
23e50 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74  ountered a const
23e60 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
23e70 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77  on the 100th row
23e80 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74   that.it attempt
23e90 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65  s to update, the
23ea0 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72  n the first 99 r
23eb0 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70  ow changes are p
23ec0 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61  reserved.but cha
23ed0 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30  nges to rows 100
23ee0 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65   and beyond neve
23ef0 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64  r occur.</p></dd
23f00 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45  >..<dt><b>IGNORE
23f10 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
23f20 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
23f30 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
23f40 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
23f50 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72  s, .the IGNORE r
23f60 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
23f70 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e  thm skips the on
23f80 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61  e row that conta
23f90 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69  ins.the constrai
23fa0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64  nt violation and
23fb0 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65   continues proce
23fc0 73 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74  ssing subsequent
23fd0 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c   rows.of the SQL
23fe0 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66   statement as if
23ff0 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72   nothing went wr
24000 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20  ong..Other rows 
24010 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
24020 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f   the row that.co
24030 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73  ntained the cons
24040 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
24050 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72   are inserted or
24060 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c   updated.normall
24070 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20  y. ^No error is 
24080 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68  returned when th
24090 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63  e IGNORE conflic
240a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67  t resolution.alg
240b0 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
240c0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
240d0 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74  >REPLACE</b></dt
240e0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
240f0 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50  a [UNIQUE] or [P
24100 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
24110 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
24120 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 52 45   occurs, .the RE
24130 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a  PLACE algorithm.
24140 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73  deletes pre-exis
24150 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61  ting rows that a
24160 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
24170 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
24180 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73  ion.prior to ins
24190 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69  erting or updati
241a0 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
241b0 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  ow and the comma
241c0 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78  nd continues .ex
241d0 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
241e0 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c  ..^If a [NOT NUL
241f0 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  L] constraint vi
24200 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
24210 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
24220 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
24230 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c  replaces the NUL
24240 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65  L value with.the
24250 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
24260 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20  or that column, 
24270 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  or if the column
24280 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a   has no default.
24290 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
242a0 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
242b0 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b  is used..^If a [
242c0 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72 61 69 6e  CHECK] constrain
242d0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
242e0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
242f0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
24300 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c  ion.algorithm al
24310 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20  ways works like 
24320 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ABORT.</p>..<p>^
24330 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45  When the REPLACE
24340 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
24350 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
24360 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
24370 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
24380 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
24390 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
243a0 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
243b0 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  fire if and only
243c0 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74   if.[recursive_t
243d0 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c  riggers pragma |
243e0 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
243f0 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  ers] are enabled
24400 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
24410 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
24420 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f  ook | update hoo
24430 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65  k] is not invoke
24440 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a  d for rows that.
24450 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74  are deleted by t
24460 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
24470 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
24480 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64  trategy.  ^Nor d
24490 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72  oes.REPLACE incr
244a0 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74  ement the [sqlit
244b0 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61  e3_changes | cha
244c0 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68  nge counter]..Th
244d0 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65  e exceptional be
244e0 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20  haviors defined 
244f0 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70  in this paragrap
24500 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a  h might change .
24510 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
24520 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a  ase.</p>.</dl>..
24530 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68  <p>^The algorith
24540 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
24550 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20  he OR clause of 
24560 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  an INSERT or UPD
24570 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e  ATE.overrides an
24580 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  y algorithm spec
24590 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54  ified in a CREAT
245a0 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20  E TABLE..^If no 
245b0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
245c0 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
245d0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
245e0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
245f0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
24600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24640 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
24650 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
24660 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73 69  REINDEX..Recursi
24670 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
24680 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  reindex-stmt.</t
24690 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49  cl>..<p>^The REI
246a0 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
246b0 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
246c0 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
246d0 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
246e0 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
246f0 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
24700 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
24710 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
24720 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
24730 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
24740 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  EX keyword is no
24750 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
24760 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
24770 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a  ce or database .
24780 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65  object identifie
24790 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  r, then all indi
247a0 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
247b0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
247c0 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e  e rebuilt...<p>^
247d0 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
247e0 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77  eyword is follow
247f0 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
24800 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c  n-sequence name,
24810 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65   then.all indice
24820 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
24830 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
24840 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
24850 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
24860 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64  es.are recreated
24870 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74  . ..<p>^Or, if t
24880 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61  he argument atta
24890 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e  ched to the REIN
248a0 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61  DEX identifies a
248b0 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62   specific .datab
248c0 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  ase table, then 
248d0 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61  all indices atta
248e0 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  ched to the data
248f0 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72  base table are r
24900 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20  ebuilt. .^If it 
24910 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
24920 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69  cific database i
24930 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20  ndex, then just 
24940 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65  that index is re
24950 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  created...<p>^Fo
24960 72 20 61 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 74  r a command of t
24970 68 65 20 66 6f 72 6d 20 22 52 45 49 4e 44 45 58  he form "REINDEX
24980 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 2c 20 61   <i>name</i>", a
24990 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c   match.against <
249a0 79 79 74 65 72 6d 3e 63 6f 6c 6c 61 74 69 6f 6e  yyterm>collation
249b0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74  -name</yyterm> t
249c0 61 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65 20  akes precedence 
249d0 6f 76 65 72 20 61 20 6d 61 74 63 68 0a 61 67 61  over a match.aga
249e0 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 69 6e 64  inst <yyterm>ind
249f0 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ex-name</yyterm>
24a00 20 6f 72 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c   or <yyterm>tabl
24a10 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e  e-name</yyterm>.
24a20 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20  .This ambiguity 
24a30 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61  in the syntax ma
24a40 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20  y be avoided by 
24a50 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
24a60 67 20 61 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65  g a.<yyterm>sche
24a70 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ma-name</yyterm>
24a80 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
24a90 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c   a specific tabl
24aa0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
24ab0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
24ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24b00 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
24b10 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
24b20 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
24b30 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
24b40 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
24b50 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
24b60 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
24b70 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
24b80 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
24b90 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
24ba0 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
24bb0 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
24bc0 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
24bd0 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
24be0 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
24bf0 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
24c00 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
24c10 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
24c20 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
24c30 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
24c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c80 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57  #####.Section {W
24c90 49 54 48 20 63 6c 61 75 73 65 7d 20 77 69 74 68  ITH clause} with
24ca0 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20   {{common table 
24cb0 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 57 49 54  expressions} WIT
24cc0 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  H}..RecursiveBub
24cd0 62 6c 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d  bleDiagram with-
24ce0 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
24cf0 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  p>Common Table E
24d00 78 70 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54  xpressions or CT
24d10 45 73 20 61 63 74 20 6c 69 6b 65 20 74 65 6d 70  Es act like temp
24d20 6f 72 61 72 79 20 5b 76 69 65 77 73 5d 20 74 68  orary [views] th
24d30 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f  at exist.only fo
24d40 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
24d50 66 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  f a single SQL s
24d60 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65  tatement.  There
24d70 20 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f   are two kinds o
24d80 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  f.common table e
24d90 78 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64  xpressions: "ord
24da0 69 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63 75  inary" and "recu
24db0 72 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72 79  rsive". Ordinary
24dc0 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   .common table e
24dd0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
24de0 65 6c 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e  elpful for makin
24df0 67 0a 71 75 65 72 69 65 73 20 65 61 73 69 65 72  g.queries easier
24e00 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 62   to understand b
24e10 79 20 66 61 63 74 6f 72 69 6e 67 0a 73 75 62 71  y factoring.subq
24e20 75 65 72 69 65 73 20 6f 75 74 20 6f 66 20 74 68  ueries out of th
24e30 65 20 6d 61 69 6e 20 53 51 4c 20 73 74 61 74 65  e main SQL state
24e40 6d 65 6e 74 2e 0a 52 65 63 75 72 73 69 76 65 20  ment..Recursive 
24e50 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
24e60 72 65 73 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65  ressions.provide
24e70 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20   the ability to 
24e80 64 6f 20 68 69 65 72 61 72 63 68 69 63 61 6c 20  do hierarchical 
24e90 6f 72 0a 72 65 63 75 72 73 69 76 65 20 71 75 65  or.recursive que
24ea0 72 69 65 73 20 6f 66 20 74 72 65 65 73 20 61 6e  ries of trees an
24eb0 64 20 67 72 61 70 68 73 2c 20 61 20 63 61 70 61  d graphs, a capa
24ec0 62 69 6c 69 74 79 0a 74 68 61 74 20 69 73 20 6e  bility.that is n
24ed0 6f 74 20 6f 74 68 65 72 77 69 73 65 20 61 76 61  ot otherwise ava
24ee0 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 53 51  ilable in the SQ
24ef0 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e  L language...<p>
24f00 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  All common table
24f10 20 65 78 70 72 65 73 73 69 6f 6e 73 20 28 6f 72   expressions (or
24f20 64 69 6e 61 72 79 20 61 6e 64 20 72 65 63 75 72  dinary and recur
24f30 73 69 76 65 29 20 61 72 65 20 0a 63 72 65 61 74  sive) are .creat
24f40 65 64 20 62 79 20 70 72 65 70 65 6e 64 69 6e 67  ed by prepending
24f50 20 61 20 57 49 54 48 20 63 6c 61 75 73 65 20 69   a WITH clause i
24f60 6e 20 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45  n front of a [SE
24f70 4c 45 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LECT], [INSERT],
24f80 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55   [DELETE],.or [U
24f90 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
24fa0 2e 20 20 41 20 73 69 6e 67 6c 65 20 57 49 54 48  .  A single WITH
24fb0 20 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63   clause can spec
24fc0 69 66 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  ify one or more.
24fd0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
24fe0 72 65 73 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f  ressions, some o
24ff0 66 20 77 68 69 63 68 20 61 72 65 20 6f 72 64 69  f which are ordi
25000 6e 61 72 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66  nary and some of
25010 20 77 68 69 63 68 0a 61 72 65 20 72 65 63 75 72   which.are recur
25020 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  sive...<tcl>hd_f
25030 72 61 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79  ragment ordinary
25040 63 74 65 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f  cte {ordinary co
25050 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
25060 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ssions}</tcl>.<h
25070 33 3e 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f  3>Ordinary Commo
25080 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69  n Table Expressi
25090 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20  ons</h3>..<p>An 
250a0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
250b0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
250c0 20 77 6f 72 6b 73 20 61 73 20 69 66 20 69 74 20   works as if it 
250d0 77 65 72 65 20 61 20 5b 76 69 65 77 5d 20 74 68  were a [view] th
250e0 61 74 0a 65 78 69 73 74 73 20 66 6f 72 20 74 68  at.exists for th
250f0 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20  e duration of a 
25100 73 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74  single statement
25110 2e 20 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  .  Ordinary comm
25120 6f 6e 20 74 61 62 6c 65 0a 65 78 70 72 65 73 73  on table.express
25130 69 6f 6e 73 20 61 72 65 20 75 73 65 66 75 6c 20  ions are useful 
25140 66 6f 72 20 66 61 63 74 6f 72 69 6e 67 20 6f 75  for factoring ou
25150 74 20 73 75 62 71 75 65 72 69 65 73 20 61 6e 64  t subqueries and
25160 20 6d 61 6b 69 6e 67 20 74 68 65 20 6f 76 65 72   making the over
25170 61 6c 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  all.SQL statemen
25180 74 20 65 61 73 69 65 72 20 74 6f 20 72 65 61 64  t easier to read
25190 20 61 6e 64 20 75 6e 64 65 72 73 74 61 6e 64 2e   and understand.
251a0 0a 0a 3c 70 3e 41 20 57 49 54 48 20 63 6c 61 75  ..<p>A WITH clau
251b0 73 65 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f  se can contain o
251c0 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
251d0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
251e0 20 65 76 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c   even if.it incl
251f0 75 64 65 73 20 74 68 65 20 52 45 43 55 52 53 49  udes the RECURSI
25200 56 45 20 6b 65 79 77 6f 72 64 2e 20 20 54 68 65  VE keyword.  The
25210 20 75 73 65 20 6f 66 20 52 45 43 55 52 53 49 56   use of RECURSIV
25220 45 20 64 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65  E does not force
25230 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
25240 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 62 65 20  pressions to be 
25250 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c  recursive...<tcl
25260 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  >.hd_fragment re
25270 63 75 72 73 69 76 65 63 74 65 20 7b 72 65 63 75  cursivecte {recu
25280 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
25290 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20  le expressions} 
252a0 5c 0a 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d  \.{recursive com
252b0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
252c0 73 69 6f 6e 7d 20 7b 72 65 63 75 72 73 69 76 65  sion} {recursive
252d0 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c   query}.</tcl>.<
252e0 68 33 3e 52 65 63 75 72 73 69 76 65 20 43 6f 6d  h3>Recursive Com
252f0 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
25300 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
25310 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
25320 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
25330 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  on can be used t
25340 6f 20 77 72 69 74 65 20 61 20 71 75 65 72 79 20  o write a query 
25350 74 68 61 74 0a 77 61 6c 6b 73 20 61 20 74 72 65  that.walks a tre
25360 65 20 6f 72 20 67 72 61 70 68 2e 20 20 41 20 72  e or graph.  A r
25370 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
25380 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
25390 20 68 61 73 20 74 68 65 20 73 61 6d 65 0a 62 61   has the same.ba
253a0 73 69 63 20 73 79 6e 74 61 78 20 61 73 20 61 6e  sic syntax as an
253b0 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
253c0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
253d0 6e 2c 20 62 75 74 20 77 69 74 68 20 74 68 65 20  n, but with the 
253e0 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69  following.additi
253f0 6f 6e 61 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a  onal features:..
25400 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b  <ol>.<li> The "[
25410 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20  select-stmt]".  
25420 20 20 20 6d 75 73 74 20 62 65 20 61 20 5b 63 6f     must be a [co
25430 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 20 77  mpound select] w
25440 68 65 72 65 20 74 68 65 20 72 69 67 68 74 2d 6d  here the right-m
25450 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70  ost [compound-op
25460 65 72 61 74 6f 72 5d 20 69 73 0a 20 20 20 20 20  erator] is.     
25470 65 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20  either UNION or 
25480 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20  UNION ALL..<li> 
25490 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  The table named 
254a0 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
254b0 20 73 69 64 65 20 6f 66 20 74 68 65 20 41 53 20   side of the AS 
254c0 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 61 70 70  keyword must app
254d0 65 61 72 0a 20 20 20 20 20 65 78 61 63 74 6c 79  ear.     exactly
254e0 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f   once in the FRO
254f0 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  M clause of the 
25500 72 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43  right-most SELEC
25510 54 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20  T statement.    
25520 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   of the compound
25530 20 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77   select, and now
25540 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e  here else..</ol>
25550 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74 20 61  ..<p>To put it a
25560 6e 6f 74 68 65 72 20 77 61 79 2c 20 61 20 72 65  nother way, a re
25570 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
25580 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
25590 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74  must.look like t
255a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c  he following:..<
255b0 74 63 6c 3e 52 65 63 75 72 73 69 76 65 42 75 62  tcl>RecursiveBub
255c0 62 6c 65 44 69 61 67 72 61 6d 20 72 65 63 75 72  bleDiagram recur
255d0 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a  sive-cte</tcl>..
255e0 3c 70 3e 43 61 6c 6c 20 74 68 65 20 74 61 62 6c  <p>Call the tabl
255f0 65 20 6e 61 6d 65 64 20 62 79 20 74 68 65 20 5b  e named by the [
25600 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20  cte-table-name] 
25610 69 6e 20 61 20 72 65 63 75 72 73 69 76 65 0a 63  in a recursive.c
25620 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
25630 65 73 73 69 6f 6e 20 74 68 65 20 22 72 65 63 75  ession the "recu
25640 72 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e  rsive table"..In
25650 20 74 68 65 20 5b 72 65 63 75 72 73 69 76 65 2d   the [recursive-
25660 63 74 65 5d 20 62 75 62 62 6c 65 20 64 69 61 67  cte] bubble diag
25670 72 61 6d 20 61 62 6f 76 65 2c 20 74 68 65 20 72  ram above, the r
25680 65 63 75 72 73 69 76 65 0a 74 61 62 6c 65 20 6d  ecursive.table m
25690 75 73 74 20 61 70 70 65 61 72 20 65 78 61 63 74  ust appear exact
256a0 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46  ly once in the F
256b0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ROM clause of th
256c0 65 20 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  e .<yyterm>recur
256d0 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
256e0 65 72 6d 3e 0a 61 6e 64 20 6d 75 73 74 20 6e 6f  erm>.and must no
256f0 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  t appear anywher
25700 65 20 65 6c 73 65 20 69 6e 20 65 69 74 68 65 72  e else in either
25710 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 69 6e 69   the.<yyterm>ini
25720 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
25730 65 72 6d 3e 20 6f 72 20 74 68 65 0a 3c 79 79 74  erm> or the.<yyt
25740 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65  erm>recursive-se
25750 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 69  lect</yyterm>, i
25760 6e 63 6c 75 64 69 6e 67 20 73 75 62 71 75 65 72  ncluding subquer
25770 69 65 73 2e 0a 54 68 65 20 3c 79 79 74 65 72 6d  ies..The <yyterm
25780 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
25790 2f 79 79 74 65 72 6d 3e 20 6d 61 79 20 62 65 0a  /yyterm> may be.
257a0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
257b0 63 74 5d 2c 20 62 75 74 20 69 74 20 6d 61 79 20  ct], but it may 
257c0 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f  not include an O
257d0 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
257e0 6f 72 20 4f 46 46 53 45 54 2e 0a 54 68 65 20 72  or OFFSET..The r
257f0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
25800 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
25810 20 73 65 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63   select, not a c
25820 6f 6d 70 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65  ompound.  The.re
25830 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69  cursive-select i
25840 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63  s allowed to inc
25850 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59  lude an ORDER BY
25860 2c 20 4c 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20  , LIMIT, and/or 
25870 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20  OFFSET...<p>The 
25880 62 61 73 69 63 20 61 6c 67 6f 72 69 74 68 6d 20  basic algorithm 
25890 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 74 68  for computing th
258a0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
258b0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
258c0 0a 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  .is as follows:.
258d0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74  .<ol>.<li> Run t
258e0 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69  he <yyterm>initi
258f0 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  al-select</yyter
25900 6d 3e 20 61 6e 64 20 61 64 64 20 74 68 65 20 72  m> and add the r
25910 65 73 75 6c 74 73 20 74 6f 20 61 20 71 75 65 75  esults to a queu
25920 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68  e..<li> While th
25930 65 20 71 75 65 75 65 20 69 73 20 6e 6f 74 20 65  e queue is not e
25940 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22  mpty:.<ol type="
25950 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74  a">.<li> Extract
25960 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 72   a single row fr
25970 6f 6d 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c  om the queue..<l
25980 69 3e 20 49 6e 73 65 72 74 20 74 68 61 74 20 73  i> Insert that s
25990 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74  ingle row into t
259a0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
259b0 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20  le.<li> Pretend 
259c0 74 68 61 74 20 74 68 65 20 73 69 6e 67 6c 65 20  that the single 
259d0 72 6f 77 20 6a 75 73 74 20 65 78 74 72 61 63 74  row just extract
259e0 65 64 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20  ed is the only. 
259f0 20 20 20 20 72 6f 77 20 69 6e 20 74 68 65 20 72      row in the r
25a00 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61  ecursive table a
25a10 6e 64 20 72 75 6e 20 74 68 65 20 72 65 63 75 72  nd run the recur
25a20 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20  sive-select,.   
25a30 20 20 61 64 64 69 6e 67 20 61 6c 6c 20 72 65 73    adding all res
25a40 75 6c 74 73 20 74 6f 20 74 68 65 20 71 75 65 75  ults to the queu
25a50 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a  e..</ol>.</ol>..
25a60 3c 70 3e 54 68 65 20 62 61 73 69 63 20 70 72 6f  <p>The basic pro
25a70 63 65 64 75 72 65 20 61 62 6f 76 65 20 6d 61 79  cedure above may
25a80 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65   modified by the
25a90 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
25aa0 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75  ional rules:..<u
25ab0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  l>.<li><p>.  If 
25ac0 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72  a UNION operator
25ad0 20 63 6f 6e 6e 65 63 74 73 20 74 68 65 20 3c 79   connects the <y
25ae0 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65  yterm>initial-se
25af0 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 77 69  lect</yyterm> wi
25b00 74 68 20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d  th the.  <yyterm
25b10 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
25b20 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e  t</yyterm>, then
25b30 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77 73 20 74   only add rows t
25b40 6f 20 74 68 65 20 71 75 65 75 65 20 69 66 20 0a  o the queue if .
25b50 20 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20 72    no identical r
25b60 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20 70 72  ow has.  been pr
25b70 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64 20 74  eviously added t
25b80 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 52 65  o the queue.  Re
25b90 70 65 61 74 65 64 20 72 6f 77 73 20 61 72 65 20  peated rows are 
25ba0 64 69 73 63 61 72 64 65 64 20 62 65 66 6f 72 65  discarded before
25bb0 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64 20 74   being.  added t
25bc0 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e  o the queue even
25bd0 20 69 66 20 74 68 65 20 72 65 70 65 61 74 65 64   if the repeated
25be0 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72 65 61   rows have alrea
25bf0 64 79 20 62 65 65 6e 20 65 78 74 72 61 63 74 65  dy been extracte
25c00 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71 75 65  d.  from the que
25c10 75 65 20 62 79 20 74 68 65 20 72 65 63 75 72 73  ue by the recurs
25c20 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20 74 68  ion step.  If th
25c30 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 55 4e  e operator is UN
25c40 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20  ION ALL,.  then 
25c50 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72 61 74  all rows generat
25c60 65 64 20 62 79 20 62 6f 74 68 20 74 68 65 20 3c  ed by both the <
25c70 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73  yyterm>initial-s
25c80 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61  elect</yyterm> a
25c90 6e 64 20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d  nd the.  <yyterm
25ca0 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
25cb0 74 3c 2f 79 79 74 65 72 6d 3e 20 61 72 65 20 61  t</yyterm> are a
25cc0 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20 74  lways added to t
25cd0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
25ce0 0a 20 20 74 68 65 79 20 61 72 65 20 72 65 70 65  .  they are repe
25cf0 61 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65  ats..  When dete
25d00 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77  rmining if a row
25d10 20 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55   is repeated, NU
25d20 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72  LL values compar
25d30 65 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65  e.  equal to one
25d40 20 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74   another and not
25d50 20 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74   equal to any ot
25d60 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c  her value..<li><
25d70 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63  p>.  The LIMIT c
25d80 6c 61 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e  lause, if presen
25d90 74 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  t, determines th
25da0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
25db0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20   of rows that.  
25dc0 77 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64  will ever be add
25dd0 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
25de0 69 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65  ive table in ste
25df0 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65  p 2b..  Once the
25e00 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68 65   limit is reache
25e10 64 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  d, the recursion
25e20 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69   stops..  A limi
25e30 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20  t of zero means 
25e40 74 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65  that no rows are
25e50 20 65 76 65 72 20 61 64 64 65 64 20 74 6f 20 74   ever added to t
25e60 68 65 0a 20 20 72 65 63 75 72 73 69 76 65 20 74  he.  recursive t
25e70 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61  able, and a nega
25e80 74 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73  tive limit means
25e90 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75   an unlimited nu
25ea0 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d  mber of rows.  m
25eb0 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74  ay be added to t
25ec0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
25ed0 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68  le..<li><p>.  Th
25ee0 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  e OFFSET clause,
25ef0 20 69 66 20 69 74 20 69 73 20 70 72 65 73 65 6e   if it is presen
25f00 74 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69  t and has a posi
25f10 74 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72  tive value N, pr
25f20 65 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72  events the.  fir
25f30 73 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62  st N rows from b
25f40 65 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68  eing added to th
25f50 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
25f60 65 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e  e..  The first N
25f70 20 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20   rows are still 
25f80 70 72 6f 63 65 73 73 65 64 0a 20 20 62 79 20 74  processed.  by t
25f90 68 65 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  he <yyterm>recur
25fa0 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
25fb0 65 72 6d 3e 20 26 6d 64 61 73 68 3b 20 74 68 65  erm> &mdash; the
25fc0 79 0a 20 20 6a 75 73 74 20 61 72 65 20 6e 6f 74  y.  just are not
25fd0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
25fe0 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
25ff0 52 6f 77 73 20 61 72 65 20 6e 6f 74 20 63 6f 75  Rows are not cou
26000 6e 74 65 64 20 74 6f 77 61 72 64 0a 20 20 66 75  nted toward.  fu
26010 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d  lfilling the LIM
26020 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46  IT until all OFF
26030 53 45 54 20 72 6f 77 73 20 68 61 76 65 20 62 65  SET rows have be
26040 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e  en skipped..<li>
26050 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f 52 44 45  <p>.  If an ORDE
26060 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 70  R BY clause is p
26070 72 65 73 65 6e 74 2c 20 69 74 20 64 65 74 65 72  resent, it deter
26080 6d 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  mines the order 
26090 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 20 20  in which rows.  
260a0 61 72 65 20 65 78 74 72 61 63 74 65 64 20 66 72  are extracted fr
260b0 6f 6d 20 74 68 65 20 71 75 65 75 65 20 69 6e 20  om the queue in 
260c0 73 74 65 70 20 32 61 2e 20 20 49 66 20 74 68 65  step 2a.  If the
260d0 72 65 20 69 73 20 6e 6f 20 4f 52 44 45 52 20 42  re is no ORDER B
260e0 59 20 63 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e  Y clause,.  then
260f0 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
26100 69 63 68 20 72 6f 77 73 20 61 72 65 20 65 78 74  ich rows are ext
26110 72 61 63 74 65 64 20 69 73 20 75 6e 64 65 66 69  racted is undefi
26120 6e 65 64 2e 20 20 28 49 6e 20 74 68 65 20 63 75  ned.  (In the cu
26130 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e  rrent.  implemen
26140 74 61 74 69 6f 6e 2c 20 74 68 65 20 71 75 65 75  tation, the queu
26150 65 20 62 65 63 6f 6d 65 73 20 61 20 46 49 46 4f  e becomes a FIFO
26160 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
26170 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
26180 65 64 2c 0a 20 20 62 75 74 20 61 70 70 6c 69 63  ed,.  but applic
26190 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
261a0 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 61 74  t depend on that
261b0 20 66 61 63 74 20 73 69 6e 63 65 20 69 74 20 6d   fact since it m
261c0 69 67 68 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f  ight change.).</
261d0 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
261e0 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c  gment rcex1</tcl
261f0 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69 76 65 20  >.<h4>Recursive 
26200 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
26210 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
26220 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65 74 75  owing query retu
26230 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65 72 73  rns all integers
26240 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 31   between 1 and 1
26250 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71  000000:..<blockq
26260 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
26270 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28  RECURSIVE.  cnt(
26280 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31 29  x) AS (VALUES(1)
26290 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
262a0 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57  T x+1 FROM cnt W
262b0 48 45 52 45 20 78 3c 31 30 30 30 30 30 30 29 0a  HERE x<1000000).
262c0 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
262d0 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
262e0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69  quote>..<p>Consi
262f0 64 65 72 20 68 6f 77 20 74 68 69 73 20 71 75 65  der how this que
26300 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65 20 69  ry works.  The i
26310 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75  nitial-select.ru
26320 6e 73 20 66 69 72 73 74 20 61 6e 64 20 72 65 74  ns first and ret
26330 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  urns a single ro
26340 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  w.with a single 
26350 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54 68 69  column "1".  Thi
26360 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61 64 64  s one row is add
26370 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed to the queue.
26380 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20 74 68    In.step 2a, th
26390 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 65 78  at one row is ex
263a0 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tracted from the
263b0 20 71 75 65 75 65 20 61 6e 64 20 61 64 64 65 64   queue and added
263c0 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20   to "cnt"..Then 
263d0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
263e0 6c 65 63 74 20 69 73 20 72 75 6e 20 69 6e 20 61  lect is run in a
263f0 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20 73  ccordance with s
26400 74 65 70 20 32 63 20 67 65 6e 65 72 61 74 69 6e  tep 2c generatin
26410 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  g.a single new r
26420 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 32  ow with value "2
26430 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65 20  " to add to the 
26440 71 75 65 75 65 2e 20 20 54 68 65 20 71 75 65 75  queue.  The queu
26450 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20  e still.has one 
26460 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32 20 72  row, so step 2 r
26470 65 70 65 61 74 73 2e 20 20 54 68 65 20 22 32 22  epeats.  The "2"
26480 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74 65   row is extracte
26490 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
264a0 68 65 0a 72 65 63 75 72 73 69 76 65 20 74 61 62  he.recursive tab
264b0 6c 65 20 62 79 20 73 74 65 70 73 20 32 61 20 61  le by steps 2a a
264c0 6e 64 20 32 62 2e 20 20 54 68 65 6e 20 74 68 65  nd 2b.  Then the
264d0 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
264e0 32 20 69 73 20 75 73 65 64 20 0a 61 73 20 69 66  2 is used .as if
264f0 20 69 74 20 77 65 72 65 20 74 68 65 20 63 6f 6d   it were the com
26500 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66  plete content of
26510 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
26520 61 62 6c 65 20 61 6e 64 20 74 68 65 20 0a 72 65  able and the .re
26530 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69  cursive-select i
26540 73 20 72 75 6e 20 61 67 61 69 6e 2c 20 72 65 73  s run again, res
26550 75 6c 74 69 6e 67 20 69 6e 20 61 20 72 6f 77 20  ulting in a row 
26560 77 69 74 68 20 76 61 6c 75 65 20 22 33 22 20 62  with value "3" b
26570 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20 74 68  eing added.to th
26580 65 20 71 75 65 75 65 2e 20 20 54 68 69 73 20 72  e queue.  This r
26590 65 70 65 61 74 73 20 39 39 39 39 39 39 20 74 69  epeats 999999 ti
265a0 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c  mes until finall
265b0 79 20 61 74 20 73 74 65 70 20 32 61 20 74 68 65  y at step 2a the
265c0 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74  .only value on t
265d0 68 65 20 71 75 65 75 65 20 69 73 20 61 20 72 6f  he queue is a ro
265e0 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30  w containing 100
265f0 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f 77 20  0000.  That row 
26600 69 73 0a 65 78 74 72 61 63 74 65 64 20 61 6e 64  is.extracted and
26610 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
26620 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
26630 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c 20 74  But this time, t
26640 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
26650 63 61 75 73 65 73 20 74 68 65 20 72 65 63 75 72  causes the recur
26660 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 72  sive-select to r
26670 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73  eturn no rows, s
26680 6f 20 74 68 65 0a 71 75 65 75 65 20 72 65 6d 61  o the.queue rema
26690 69 6e 73 20 65 6d 70 74 79 20 61 6e 64 20 74 68  ins empty and th
266a0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
266b0 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69  s...<p><b>Optimi
266c0 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e  zation note:</b>
266d0 0a 49 6e 20 74 68 65 20 64 69 73 63 75 73 73 69  .In the discussi
266e0 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61 74 65 6d  on above, statem
266f0 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e 73 65 72  ents like "inser
26700 74 20 74 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74  t the row into.t
26710 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
26720 6c 65 22 20 73 68 6f 75 6c 64 20 62 65 20 75 6e  le" should be un
26730 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74  derstood concept
26740 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72  ually, not liter
26750 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20  ally..It sounds 
26760 61 73 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  as if SQLite is 
26770 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61 20 68  accumulating a h
26780 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  uge table.contai
26790 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e  ning one million
267a0 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e   rows, then goin
267b0 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e  g back and scann
267c0 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65 0a 66  ing that table.f
267d0 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f  rom top to botto
267e0 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  m to generate th
267f0 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61 74 20  e result.  What 
26800 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69  really happens.i
26810 73 20 74 68 61 74 20 74 68 65 20 71 75 65 72 79  s that the query
26820 20 6f 70 74 69 6d 69 7a 65 72 20 73 65 65 73 20   optimizer sees 
26830 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e 20 74  that values in t
26840 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72 73 69  he."cnt" recursi
26850 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c  ve table are onl
26860 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f  y used once.  So
26870 20 61 73 20 65 61 63 68 20 72 6f 77 20 69 73 20   as each row is 
26880 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72 65 63  added to.the rec
26890 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 74 68  ursive table, th
268a0 61 74 20 72 6f 77 20 69 73 20 69 6d 6d 65 64 69  at row is immedi
268b0 61 74 65 6c 79 20 72 65 74 75 72 6e 65 64 20 61  ately returned a
268c0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74 68  s a result of th
268d0 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54 20 73 74  e main.SELECT st
268e0 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e  atement and then
268f0 20 64 69 73 63 61 72 64 65 64 2e 20 20 53 51 4c   discarded.  SQL
26900 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74  ite does <em>not
26910 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65  </em> accumulate
26920 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  .a temporary tab
26930 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20  le containing a 
26940 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56  million rows.  V
26950 65 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72  ery little memor
26960 79 20 69 73 0a 6e 65 65 64 65 64 20 74 6f 20 72  y is.needed to r
26970 75 6e 20 74 68 65 20 61 62 6f 76 65 20 65 78 61  un the above exa
26980 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  mple.  However, 
26990 69 66 20 74 68 65 20 65 78 61 6d 70 6c 65 20 68  if the example h
269a0 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e  ad used.UNION in
269b0 73 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41  stead of UNION A
269c0 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  LL, then SQLite 
269d0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 64 20 74  would have had t
269e0 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c  o keep around.al
269f0 6c 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  l previously gen
26a00 65 72 61 74 65 64 20 63 6f 6e 74 65 6e 74 20 69  erated content i
26a10 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b  n order to check
26a20 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65 73 2e   for duplicates.
26a30 0a 46 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e  .For this reason
26a40 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 73 68  , programmers sh
26a50 6f 75 6c 64 20 73 74 72 69 76 65 20 74 6f 20 75  ould strive to u
26a60 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73  se UNION ALL ins
26a70 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68  tead.of UNION wh
26a80 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70  en feasible...<p
26a90 3e 48 65 72 65 20 69 73 20 61 20 76 61 72 69 61  >Here is a varia
26aa0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70 72 65 76  tion on the prev
26ab0 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c  ious example:..<
26ac0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26ad0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
26ae0 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a 20 20    cnt(x) AS (.  
26af0 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20     SELECT 1.    
26b00 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20   UNION ALL.     
26b10 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
26b20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d 49 54 20  cnt.      LIMIT 
26b30 31 30 30 30 30 30 30 0a 20 20 29 0a 53 45 4c 45  1000000.  ).SELE
26b40 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c  CT x FROM cnt;.<
26b50 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26b60 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  e>..<p>There are
26b70 20 74 77 6f 20 64 69 66 66 65 72 65 6e 63 65 73   two differences
26b80 20 69 6e 20 74 68 69 73 20 76 61 72 69 61 74 69   in this variati
26b90 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c  on.  The initial
26ba0 2d 73 65 6c 65 63 74 20 69 73 0a 22 53 45 4c 45  -select is."SELE
26bb0 43 54 20 31 22 20 69 6e 73 74 65 61 64 20 6f 66  CT 1" instead of
26bc0 20 22 56 41 4c 55 45 53 28 31 29 22 2e 20 20 42   "VALUES(1)".  B
26bd0 75 74 20 74 68 6f 73 65 20 61 72 65 20 6a 75 73  ut those are jus
26be0 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79 6e 74  t different.synt
26bf0 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e 67 20  axes for saying 
26c00 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
26c10 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f 74 68   thing.  The oth
26c20 65 72 20 63 68 61 6e 67 65 20 69 73 20 74 68 61  er change is tha
26c30 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f 6e 20  t the.recursion 
26c40 69 73 20 73 74 6f 70 70 65 64 20 62 79 20 61 20  is stopped by a 
26c50 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74 68 61  LIMIT rather tha
26c60 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
26c70 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 4c 49  .  The use of.LI
26c80 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74 20 77  MIT means that w
26c90 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c  hen the one-mill
26ca0 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61 64 64  ionth row is add
26cb0 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74 22 20  ed to the "cnt" 
26cc0 74 61 62 6c 65 0a 28 61 6e 64 20 72 65 74 75 72  table.(and retur
26cd0 6e 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20  ned by the main 
26ce0 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b 73 20 74  SELECT, thanks t
26cf0 6f 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  o the query opti
26d00 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74 68 65 20  mizer).then the 
26d10 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 20  recursion stops 
26d20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 67 61  immediately rega
26d30 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
26d40 6e 79 20 72 6f 77 73 20 6d 69 67 68 74 20 62 65  ny rows might be
26d50 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 71 75 65  .left in the que
26d60 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d  ue.  On more com
26d70 70 6c 65 78 20 71 75 65 72 69 65 73 2c 20 69 74  plex queries, it
26d80 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
26d90 65 0a 64 69 66 66 69 63 75 6c 74 20 74 6f 20 65  e.difficult to e
26da0 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 57  nsure that the W
26db0 48 45 52 45 20 63 6c 61 75 73 65 20 77 69 6c 6c  HERE clause will
26dc0 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61 75 73   eventually caus
26dd0 65 20 74 68 65 0a 71 75 65 75 65 20 74 6f 20 64  e the.queue to d
26de0 72 61 69 6e 20 61 6e 64 20 74 68 65 20 72 65 63  rain and the rec
26df0 75 72 73 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e  ursion to termin
26e00 61 74 65 2e 20 20 42 75 74 20 74 68 65 20 4c 49  ate.  But the LI
26e10 4d 49 54 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a  MIT clause will.
26e20 61 6c 77 61 79 73 20 73 74 6f 70 20 74 68 65 20  always stop the 
26e30 72 65 63 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69  recursion.  So i
26e40 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69  t is good practi
26e50 63 65 20 74 6f 20 61 6c 77 61 79 73 20 69 6e 63  ce to always inc
26e60 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61  lude a.LIMIT cla
26e70 75 73 65 20 61 73 20 61 20 73 61 66 65 74 79 20  use as a safety 
26e80 69 66 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  if an upper boun
26e90 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f 66  d on the size of
26ea0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 0a   the recursion .
26eb0 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e  is known...<tcl>
26ec0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
26ed0 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72  2</tcl>.<h4>Hier
26ee0 61 72 63 68 69 63 61 6c 20 51 75 65 72 79 20 45  archical Query E
26ef0 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
26f00 3e 43 6f 6e 73 69 64 65 72 20 61 20 74 61 62 6c  >Consider a tabl
26f10 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
26f20 20 74 68 65 20 6d 65 6d 62 65 72 73 20 6f 66 20   the members of 
26f30 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  an organization 
26f40 61 73 0a 77 65 6c 6c 20 61 73 20 74 68 65 20 63  as.well as the c
26f50 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20  hain-of-command 
26f60 77 69 74 68 69 6e 20 74 68 61 74 20 6f 72 67 61  within that orga
26f70 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63  nization:..<bloc
26f80 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
26f90 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20  ATE TABLE org(. 
26fa0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
26fb0 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54  RY KEY,.  boss T
26fc0 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f  EXT REFERENCES o
26fd0 72 67 2c 0a 20 20 68 65 69 67 68 74 20 49 4e 54  rg,.  height INT
26fe0 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  ,.  -- other con
26ff0 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a  tent omitted.);.
27000 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
27010 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65  te>..<p>Every me
27020 6d 62 65 72 20 69 6e 20 74 68 65 20 6f 72 67 61  mber in the orga
27030 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 6e  nization has a n
27040 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65  ame, and most me
27050 6d 62 65 72 73 20 68 61 76 65 0a 61 20 73 69 6e  mbers have.a sin
27060 67 6c 65 20 62 6f 73 73 2e 20 20 28 54 68 65 20  gle boss.  (The 
27070 68 65 61 64 20 6f 66 20 74 68 65 20 77 68 6f 6c  head of the whol
27080 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68  e organization h
27090 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22  as a NULL."boss"
270a0 20 66 69 65 6c 64 2e 29 20 54 68 65 20 72 6f 77   field.) The row
270b0 73 20 6f 66 20 74 68 65 20 22 6f 72 67 22 20 74  s of the "org" t
270c0 61 62 6c 65 20 66 6f 72 6d 20 61 20 74 72 65 65  able form a tree
270d0 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
270e0 71 75 65 72 79 20 74 68 61 74 20 63 6f 6d 70 75  query that compu
270f0 74 65 73 20 74 68 65 20 61 76 65 72 61 67 65 20  tes the average 
27100 68 65 69 67 68 74 20 6f 76 65 72 20 65 76 65 72  height over ever
27110 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65 27 73 20  yone.in Alice's 
27120 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e  organization, in
27130 63 6c 75 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a  cluding Alice:..
27140 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
27150 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
27160 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  .  works_for_ali
27170 63 65 28 6e 29 20 41 53 20 28 0a 20 20 20 20 56  ce(n) AS (.    V
27180 41 4c 55 45 53 28 27 41 6c 69 63 65 27 29 0a 20  ALUES('Alice'). 
27190 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c     UNION.    SEL
271a0 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72  ECT name FROM or
271b0 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  g, works_for_ali
271c0 63 65 0a 20 20 20 20 20 57 48 45 52 45 20 6f 72  ce.     WHERE or
271d0 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72  g.boss=works_for
271e0 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c  _alice.n.  ).SEL
271f0 45 43 54 20 61 76 67 28 68 65 69 67 68 74 29 20  ECT avg(height) 
27200 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45 52 45 20  FROM org. WHERE 
27210 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b  org.name IN work
27220 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  s_for_alice;.</p
27230 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
27240 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74 20 65 78  ..<p>The next ex
27250 61 6d 70 6c 65 20 75 73 65 73 20 74 77 6f 20 0a  ample uses two .
27260 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
27270 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 73 69  ressions in a si
27280 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
27290 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .  .The followin
272a0 67 20 74 61 62 6c 65 20 72 65 63 6f 72 64 73 20  g table records 
272b0 61 20 66 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a  a family tree:..
272c0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
272d0 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 66  >.CREATE TABLE f
272e0 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45  amily(.  name TE
272f0 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
27300 20 20 6d 6f 6d 20 54 45 58 54 20 52 45 46 45 52    mom TEXT REFER
27310 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20  ENCES family,.  
27320 64 61 64 20 54 45 58 54 20 52 45 46 45 52 45 4e  dad TEXT REFEREN
27330 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f  CES family,.  bo
27340 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a 20 20 64  rn DATETIME,.  d
27350 69 65 64 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d  ied DATETIME, --
27360 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61   NULL if still a
27370 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20  live.  -- other 
27380 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65  content.);.</pre
27390 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
273a0 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c 79 22 20  <p>The "family" 
273b0 74 61 62 6c 65 20 69 73 20 73 69 6d 69 6c 61 72  table is similar
273c0 20 74 6f 20 74 68 65 20 65 61 72 6c 69 65 72 20   to the earlier 
273d0 22 6f 72 67 22 20 74 61 62 6c 65 20 65 78 63 65  "org" table exce
273e0 70 74 20 74 68 61 74 20 0a 6e 6f 77 20 74 68 65  pt that .now the
273f0 72 65 20 61 72 65 20 74 77 6f 20 70 61 72 65 6e  re are two paren
27400 74 73 20 74 6f 20 65 61 63 68 20 6d 65 6d 62 65  ts to each membe
27410 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e  r..We want to kn
27420 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e  ow all living an
27430 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69 63 65  cestors of Alice
27440 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f  , from oldest to
27450 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72   youngest..An or
27460 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
27470 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
27480 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20  "parent_of", is 
27490 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e 20 20  defined first.  
274a0 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20 43 54  That.ordinary CT
274b0 45 20 69 73 20 61 20 76 69 65 77 20 74 68 61 74  E is a view that
274c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
274d0 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e 74 73  find all parents
274e0 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69 64 75   of any.individu
274f0 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69 6e 61  al.  That ordina
27500 72 79 20 43 54 45 20 69 73 20 74 68 65 6e 20 75  ry CTE is then u
27510 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e 63 65  sed in the "ance
27520 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72  stor_of_alice".r
27530 65 63 75 72 73 69 76 65 20 43 54 45 2e 20 20 54  ecursive CTE.  T
27540 68 65 20 72 65 63 75 72 73 69 76 65 20 43 54 45  he recursive CTE
27550 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e   is then used in
27560 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65 72 79   the final query
27570 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
27580 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
27590 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28  IVE.  parent_of(
275a0 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20 41 53  name, parent) AS
275b0 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61 6d  .    (SELECT nam
275c0 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69  e, mom FROM fami
275d0 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  ly UNION SELECT 
275e0 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d 20 66  name, dad FROM f
275f0 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74  amily),.  ancest
27600 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65  or_of_alice(name
27610 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
27620 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72   parent FROM par
27630 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d  ent_of WHERE nam
27640 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20 20 55  e='Alice'.     U
27650 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45  NION ALL.     SE
27660 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
27670 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20   parent_of JOIN 
27680 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
27690 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53  e USING(name)).S
276a0 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d  ELECT family.nam
276b0 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f  e FROM ancestor_
276c0 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79  of_alice, family
276d0 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72  . WHERE ancestor
276e0 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66  _of_alice.name=f
276f0 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e  amily.name.   AN
27700 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20  D died IS NULL. 
27710 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c  ORDER BY born;.<
27720 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
27730 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
27740 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e  ment rcex2</tcl>
27750 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41 67 61  .<h4>Queries Aga
27760 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f 68 34  inst A Graph</h4
27770 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20  >..<p>A version 
27780 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 20 28  control system (
27790 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69 63 61  VCS) will typica
277a0 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20 65 76  lly store the ev
277b0 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20  olving.versions 
277c0 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61 73 20  of a project as 
277d0 61 20 64 69 72 65 63 74 65 64 20 61 63 79 63 6c  a directed acycl
277e0 69 63 20 67 72 61 70 68 20 28 44 41 47 29 2e 20  ic graph (DAG). 
277f0 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72 73 69   Call each.versi
27800 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63  on of the projec
27810 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e 20 20  t a "checkin".  
27820 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e  A single.checkin
27830 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f   can have zero o
27840 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20  r more parents. 
27850 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73 20 28   Most checkins (
27860 65 78 63 65 70 74 20 74 68 65 0a 66 69 72 73 74  except the.first
27870 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20  ) have a single 
27880 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e 20 74  parent, but in t
27890 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d 65 72  he case of a mer
278a0 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69  ge, a checkin.mi
278b0 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f 72 20  ght have two or 
278c0 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 70 61  three or more pa
278d0 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65 6d 61  rents.  A schema
278e0 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f   to keep track o
278f0 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64 20 74  f.checkins and t
27900 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
27910 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d 69 67  h they occur mig
27920 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e  ht look somethin
27930 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62  g like.this:..<b
27940 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
27950 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 68 65  CREATE TABLE che
27960 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54 45 47  ckin(.  id INTEG
27970 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
27980 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45 52 20    mtime INTEGER 
27990 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77 68 65  -- timestamp whe
279a0 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e 20 6f  n this checkin o
279b0 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45 41 54  ccurred.);.CREAT
279c0 45 20 54 41 42 4c 45 20 64 65 72 69 76 65 64 66  E TABLE derivedf
279d0 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54  rom(.  xfrom INT
279e0 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
279f0 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
27a00 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68 65 63  , -- parent chec
27a10 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45 47 45  kin.  xto INTEGE
27a20 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
27a30 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 20  ENCES checkin,  
27a40 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68 65 63   -- derived chec
27a50 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  kin.  PRIMARY KE
27a60 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a  Y(xfrom,xto).);.
27a70 43 52 45 41 54 45 20 49 4e 44 45 58 20 64 65 72  CREATE INDEX der
27a80 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e  ivedfrom_back ON
27a90 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78 74 6f   derivedfrom(xto
27aa0 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c  ,xfrom);.</pre><
27ab0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
27ac0 3e 54 68 69 73 20 67 72 61 70 68 20 69 73 20 61  >This graph is a
27ad0 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77 65 20  cyclic.  And we 
27ae0 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
27af0 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79 0a 63  mtime of every.c
27b00 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69 73 20  hild checkin is 
27b10 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
27b20 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74   mtime of all it
27b30 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75 74 0a  s parents.  But.
27b40 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72 6c 69  unlike the earli
27b50 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68 69  er examples, thi
27b60 73 20 67 72 61 70 68 20 6d 69 67 68 74 20 68 61  s graph might ha
27b70 76 65 20 6d 75 6c 74 69 70 6c 65 20 70 61 74 68  ve multiple path
27b80 73 20 6f 66 0a 64 69 66 66 65 72 69 6e 67 20 6c  s of.differing l
27b90 65 6e 67 74 68 73 20 62 65 74 77 65 65 6e 20 61  engths between a
27ba0 6e 79 20 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e  ny two checkins.
27bb0 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20 74 6f 20  ..<p>We want to 
27bc0 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e 74 79 20  know the twenty 
27bd0 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65  most recent ance
27be0 73 74 6f 72 73 20 69 6e 20 74 69 6d 65 20 28 6f  stors in time (o
27bf0 75 74 20 6f 66 0a 74 68 65 20 74 68 6f 75 73 61  ut of.the thousa
27c00 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 61 6e 64  nds and thousand
27c10 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 20 69  s of ancestors i
27c20 6e 20 74 68 65 20 77 68 6f 6c 65 20 44 41 47 29  n the whole DAG)
27c30 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20 22 40 42   for.checkin "@B
27c40 41 53 45 4c 49 4e 45 22 2e 20 20 28 41 20 71 75  ASELINE".  (A qu
27c50 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 74  ery similar to t
27c60 68 69 73 20 69 73 20 75 73 65 64 0a 62 79 20 74  his is used.by t
27c70 68 65 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  he <a href="http
27c80 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63  ://www.fossil-sc
27c90 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f  m.org/">Fossil</
27ca0 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f 77 20 74  a> VCS to.show t
27cb0 68 65 20 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74  he N most recent
27cc0 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 61 20   ancestors of a 
27cd0 63 68 65 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d  check.  For exam
27ce0 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74  ple:.<a href="ht
27cf0 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
27d00 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65  org/src/timeline
27d10 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68  ?p=trunk&n=30">h
27d20 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
27d30 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e  .org/src/timelin
27d40 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f  e?p=trunk&n=30</
27d50 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  a>.)..<blockquot
27d60 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
27d70 55 52 53 49 56 45 0a 20 20 61 6e 63 65 73 74 6f  URSIVE.  ancesto
27d80 72 28 69 64 2c 6d 74 69 6d 65 29 20 41 53 20 28  r(id,mtime) AS (
27d90 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64 2c 20  .    SELECT id, 
27da0 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b  mtime FROM check
27db0 69 6e 20 57 48 45 52 45 20 69 64 3d 40 42 41 53  in WHERE id=@BAS
27dc0 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a  ELINE.    UNION.
27dd0 20 20 20 20 53 45 4c 45 43 54 20 64 65 72 69 76      SELECT deriv
27de0 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68  edfrom.xfrom, ch
27df0 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20  eckin.mtime.    
27e00 20 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c    FROM ancestor,
27e10 20 64 65 72 69 76 65 64 66 72 6f 6d 2c 20 63 68   derivedfrom, ch
27e20 65 63 6b 69 6e 0a 20 20 20 20 20 57 48 45 52 45  eckin.     WHERE
27e30 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d 64 65 72   ancestor.id=der
27e40 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20  ivedfrom.xto.   
27e50 20 20 20 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e      AND checkin.
27e60 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  id=derivedfrom.x
27e70 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44 45 52 20  from.     ORDER 
27e80 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
27e90 20 44 45 53 43 0a 20 20 20 20 20 4c 49 4d 49 54   DESC.     LIMIT
27ea0 20 32 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a   20.  ).SELECT *
27eb0 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f   FROM checkin JO
27ec0 49 4e 20 61 6e 63 65 73 74 6f 72 20 55 53 49 4e  IN ancestor USIN
27ed0 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  G(id);.</pre></b
27ee0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
27ef0 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 63 68  The "ORDER BY ch
27f00 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43  eckin.mtime DESC
27f10 22 20 74 65 72 6d 20 69 6e 20 74 68 65 20 72 65  " term in the re
27f20 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d  cursive-select m
27f30 61 6b 65 73 0a 74 68 65 20 71 75 65 72 79 20 72  akes.the query r
27f40 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 20 62  un much faster b
27f50 79 20 70 72 65 76 65 6e 74 69 6e 67 20 69 74 20  y preventing it 
27f60 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62  from following.b
27f70 72 61 6e 63 68 65 73 20 74 68 61 74 20 6d 65 72  ranches that mer
27f80 67 65 20 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d  ge checkins.from
27f90 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54 68 65 20   long ago.  The 
27fa0 4f 52 44 45 52 20 42 59 20 66 6f 72 63 65 73 20  ORDER BY forces 
27fb0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
27fc0 6c 65 63 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e  lect to focus.on
27fd0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
27fe0 20 63 68 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f   checkins, the o
27ff0 6e 65 73 20 77 65 20 77 61 6e 74 2e 20 20 57 69  nes we want.  Wi
28000 74 68 6f 75 74 20 74 68 65 20 4f 52 44 45 52 20  thout the ORDER 
28010 42 59 0a 6f 6e 20 74 68 65 20 72 65 63 75 72 73  BY.on the recurs
28020 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20  ive-select, one 
28030 77 6f 75 6c 64 20 62 65 20 66 6f 72 63 65 64 20  would be forced 
28040 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 63  to compute the c
28050 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66 0a 74  omplete set of.t
28060 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
28070 73 74 6f 72 73 2c 20 73 6f 72 74 20 74 68 65 6d  stors, sort them
28080 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74   all by mtime, t
28090 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74 6f 70  hen take the top
280a0 20 74 77 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44   twenty..The ORD
280b0 45 52 20 42 59 20 65 73 73 65 6e 74 69 61 6c 6c  ER BY essentiall
280c0 79 20 73 65 74 73 20 75 70 20 61 20 70 72 69 6f  y sets up a prio
280d0 72 69 74 79 20 71 75 65 75 65 20 74 68 61 74 0a  rity queue that.
280e0 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
280f0 73 69 76 65 20 71 75 65 72 79 20 74 6f 20 6c 6f  sive query to lo
28100 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73 74 20 72  ok at the most r
28110 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
28120 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20  first,.allowing 
28130 74 68 65 20 75 73 65 20 6f 66 20 61 20 4c 49 4d  the use of a LIM
28140 49 54 20 63 6c 61 75 73 65 20 74 6f 20 72 65 73  IT clause to res
28150 74 72 69 63 74 20 74 68 65 20 73 63 6f 70 65 20  trict the scope 
28160 6f 66 20 74 68 65 0a 71 75 65 72 79 20 74 6f 20  of the.query to 
28170 6a 75 73 74 20 74 68 65 20 63 68 65 63 6b 69 6e  just the checkin
28180 73 20 6f 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a  s of interest...
28190 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
281a0 20 77 69 74 68 6f 72 64 65 72 62 79 3c 2f 74 63   withorderby</tc
281b0 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69  l>.<h4>Controlli
281c0 6e 67 20 44 65 70 74 68 2d 46 69 72 73 74 20 56  ng Depth-First V
281d0 65 72 73 75 73 20 42 72 65 61 64 74 68 2d 46 69  ersus Breadth-Fi
281e0 72 73 74 20 53 65 61 72 63 68 20 4f 66 20 61 20  rst Search Of a 
281f0 54 72 65 65 0a 55 73 69 6e 67 20 4f 52 44 45 52  Tree.Using ORDER
28200 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20   BY</h4>..<p>An 
28210 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
28220 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
28230 2d 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 75  -select can be u
28240 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77  sed to control.w
28250 68 65 74 68 65 72 20 74 68 65 20 73 65 61 72 63  hether the searc
28260 68 20 6f 66 20 61 20 74 72 65 65 20 69 73 20 64  h of a tree is d
28270 65 70 74 68 2d 66 69 72 73 74 20 6f 72 20 62 72  epth-first or br
28280 65 61 64 74 68 2d 66 69 72 73 74 2e 20 20 54 6f  eadth-first.  To
28290 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20 77 65 20  .illustrate, we 
282a0 77 69 6c 6c 20 75 73 65 20 61 20 76 61 72 69 61  will use a varia
282b0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67  tion on the "org
282c0 22 20 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20  " table from an 
282d0 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77  example.above, w
282e0 69 74 68 6f 75 74 20 74 68 65 20 22 68 65 69 67  ithout the "heig
282f0 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ht" column, and 
28300 77 69 74 68 20 73 6f 6d 65 20 72 65 61 6c 20 64  with some real d
28310 61 74 61 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c  ata inserted:..<
28320 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
28330 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
28340 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
28350 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
28360 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
28370 45 53 20 6f 72 67 0a 29 20 57 49 54 48 4f 55 54  ES org.) WITHOUT
28380 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52 54 20 49   ROWID;.INSERT I
28390 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
283a0 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e  Alice',NULL);.IN
283b0 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
283c0 4c 55 45 53 28 27 42 6f 62 27 2c 27 41 6c 69 63  LUES('Bob','Alic
283d0 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
283e0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 43 69 6e   org VALUES('Cin
283f0 64 79 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e  dy','Alice');.IN
28400 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
28410 4c 55 45 53 28 27 44 61 76 65 27 2c 27 42 6f 62  LUES('Dave','Bob
28420 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ');.INSERT INTO 
28430 6f 72 67 20 56 41 4c 55 45 53 28 27 45 6d 6d 61  org VALUES('Emma
28440 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54  ','Bob');.INSERT
28450 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
28460 28 27 46 72 65 64 27 2c 27 43 69 6e 64 79 27 29  ('Fred','Cindy')
28470 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
28480 67 20 56 41 4c 55 45 53 28 27 47 61 69 6c 27 2c  g VALUES('Gail',
28490 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e  'Cindy');.</pre>
284a0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
284b0 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72  p>Here is a quer
284c0 79 20 74 6f 20 73 68 6f 77 20 74 68 65 20 74 72  y to show the tr
284d0 65 65 20 73 74 72 75 63 74 75 72 65 20 69 6e 20  ee structure in 
284e0 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
284f0 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b  pattern:..<block
28500 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
28510 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
28520 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
28530 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
28540 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
28550 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
28560 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
28570 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
28580 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
28590 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
285a0 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
285b0 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
285c0 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
285d0 59 20 32 0a 20 20 29 0a 53 45 4c 45 43 54 20 73  Y 2.  ).SELECT s
285e0 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e  ubstr('.........
285f0 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c  .',1,level*3) ||
28600 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72   name FROM under
28610 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
28620 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
28630 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 32 22  The "ORDER BY 2"
28640 20 28 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68   (which means th
28650 65 20 73 61 6d 65 20 61 73 20 22 4f 52 44 45 52  e same as "ORDER
28660 20 42 59 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e   BY under_alice.
28670 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75 73 65 73  level+1").causes
28680 20 68 69 67 68 65 72 20 6c 65 76 65 6c 73 20 69   higher levels i
28690 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69  n the organizati
286a0 6f 6e 20 63 68 61 72 74 20 28 77 69 74 68 20 73  on chart (with s
286b0 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c 22 20 76  maller "level" v
286c0 61 6c 75 65 73 29 0a 74 6f 20 62 65 20 70 72 6f  alues).to be pro
286d0 63 65 73 73 65 64 20 66 69 72 73 74 2c 20 72 65  cessed first, re
286e0 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 62 72 65  sulting in a bre
286f0 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
28700 68 2e 20 20 54 68 65 20 6f 75 74 70 75 74 20 69  h.  The output i
28710 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
28720 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42  <pre>.Alice....B
28730 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ob....Cindy.....
28740 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
28750 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e  a.......Fred....
28760 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f  ...Gail.</pre></
28770 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
28780 42 75 74 20 69 66 20 77 65 20 63 68 61 6e 67 65  But if we change
28790 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
287a0 61 75 73 65 20 74 6f 20 61 64 64 20 74 68 65 20  ause to add the 
287b0 22 44 45 53 43 22 20 6d 6f 64 69 66 69 65 72 2c  "DESC" modifier,
287c0 20 74 68 61 74 20 77 69 6c 6c 0a 63 61 75 73 65   that will.cause
287d0 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73 20 69 6e   lower levels in
287e0 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f   the organizatio
287f0 6e 20 28 77 69 74 68 20 6c 61 72 67 65 72 20 22  n (with larger "
28800 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 20 74  level" values) t
28810 6f 20 62 65 0a 70 72 6f 63 65 73 73 65 64 20 66  o be.processed f
28820 69 72 73 74 20 62 79 20 74 68 65 20 72 65 63 75  irst by the recu
28830 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 72 65  rsive-select, re
28840 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 64 65 70  sulting in a dep
28850 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 3a  th-first search:
28860 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
28870 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
28880 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
28890 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
288a0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
288b0 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
288c0 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
288d0 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
288e0 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
288f0 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
28900 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
28910 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
28920 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
28930 20 4f 52 44 45 52 20 42 59 20 32 20 3c 62 3e 44   ORDER BY 2 <b>D
28940 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45  ESC</b>.  ).SELE
28950 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
28960 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
28970 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
28980 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
28990 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
289a0 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 6f  .<p>The output o
289b0 66 20 74 68 69 73 20 72 65 76 69 73 65 64 20 71  f this revised q
289c0 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  uery is:..<block
289d0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63  quote><pre>.Alic
289e0 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44  e....Bob.......D
289f0 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
28a00 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72  ..Cindy.......Fr
28a10 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f  ed.......Gail.</
28a20 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
28a30 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f  >..<p>When the O
28a40 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
28a50 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
28a60 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
28a70 65 63 74 2c 20 74 68 65 0a 71 75 65 75 65 20 62  ect, the.queue b
28a80 65 68 61 76 65 73 20 61 73 20 61 20 46 49 46 4f  ehaves as a FIFO
28a90 2c 20 77 68 69 63 68 20 72 65 73 75 6c 74 73 20  , which results 
28aa0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
28ab0 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63  st search....<tc
28ac0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61  l>hd_fragment ma
28ad0 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74  ndelbrot {comput
28ae0 65 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  e the Mandelbrot
28af0 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e   set}</tcl>.<h4>
28b00 4f 75 74 6c 61 6e 64 69 73 68 20 52 65 63 75 72  Outlandish Recur
28b10 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
28b20 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
28b30 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
28b40 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 61 70 70   computes an app
28b50 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68  roximation of th
28b60 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
28b70 0a 61 6e 64 20 6f 75 74 70 75 74 73 20 74 68 65  .and outputs the
28b80 20 72 65 73 75 6c 74 20 61 73 20 41 53 43 49 49   result as ASCII
28b90 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  -art:..<blockquo
28ba0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
28bb0 43 55 52 53 49 56 45 0a 20 20 78 61 78 69 73 28  CURSIVE.  xaxis(
28bc0 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 32  x) AS (VALUES(-2
28bd0 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
28be0 4c 45 43 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d  LECT x+0.05 FROM
28bf0 20 78 61 78 69 73 20 57 48 45 52 45 20 78 26 6c   xaxis WHERE x&l
28c00 74 3b 31 2e 32 29 2c 0a 20 20 79 61 78 69 73 28  t;1.2),.  yaxis(
28c10 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31  y) AS (VALUES(-1
28c20 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
28c30 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20  LECT y+0.1 FROM 
28c40 79 61 78 69 73 20 57 48 45 52 45 20 79 26 6c 74  yaxis WHERE y&lt
28c50 3b 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c  ;1.0),.  m(iter,
28c60 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41   cx, cy, x, y) A
28c70 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30  S (.    SELECT 0
28c80 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30  , x, y, 0.0, 0.0
28c90 20 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78   FROM xaxis, yax
28ca0 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  is.    UNION ALL
28cb0 0a 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72  .    SELECT iter
28cc0 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d  +1, cx, cy, x*x-
28cd0 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a  y*y + cx, 2.0*x*
28ce0 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20  y + cy FROM m . 
28cf0 20 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b      WHERE (x*x +
28d00 20 79 2a 79 29 20 26 6c 74 3b 20 34 2e 30 20 41   y*y) &lt; 4.0 A
28d10 4e 44 20 69 74 65 72 26 6c 74 3b 32 38 0a 20 20  ND iter&lt;28.  
28d20 29 2c 0a 20 20 6d 32 28 69 74 65 72 2c 20 63 78  ),.  m2(iter, cx
28d30 2c 20 63 79 29 20 41 53 20 28 0a 20 20 20 20 53  , cy) AS (.    S
28d40 45 4c 45 43 54 20 6d 61 78 28 69 74 65 72 29 2c  ELECT max(iter),
28d50 20 63 78 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47   cx, cy FROM m G
28d60 52 4f 55 50 20 42 59 20 63 78 2c 20 63 79 0a 20  ROUP BY cx, cy. 
28d70 20 29 2c 0a 20 20 61 28 74 29 20 41 53 20 28 0a   ),.  a(t) AS (.
28d80 20 20 20 20 53 45 4c 45 43 54 20 67 72 6f 75 70      SELECT group
28d90 5f 63 6f 6e 63 61 74 28 20 73 75 62 73 74 72 28  _concat( substr(
28da0 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69  ' .+*#', 1+min(i
28db0 74 65 72 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27  ter/7,4), 1), ''
28dc0 29 20 0a 20 20 20 20 46 52 4f 4d 20 6d 32 20 47  ) .    FROM m2 G
28dd0 52 4f 55 50 20 42 59 20 63 79 0a 20 20 29 0a 53  ROUP BY cy.  ).S
28de0 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63  ELECT group_conc
28df0 61 74 28 72 74 72 69 6d 28 74 29 2c 78 27 30 61  at(rtrim(t),x'0a
28e00 27 29 20 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65  ') FROM a;.</pre
28e10 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
28e20 3c 70 3e 49 6e 20 74 68 69 73 20 71 75 65 72 79  <p>In this query
28e30 2c 20 74 68 65 20 22 78 61 78 69 73 22 20 61 6e  , the "xaxis" an
28e40 64 20 22 79 61 78 69 73 22 20 43 54 45 73 20 64  d "yaxis" CTEs d
28e50 65 66 69 6e 65 20 74 68 65 20 67 72 69 64 20 6f  efine the grid o
28e60 66 20 70 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69  f points for.whi
28e70 63 68 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  ch the Mandelbro
28e80 74 20 53 65 74 20 77 69 6c 6c 20 62 65 20 61 70  t Set will be ap
28e90 70 72 6f 78 69 6d 61 74 65 64 2e 20 20 45 61 63  proximated.  Eac
28ea0 68 20 72 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28  h row in the."m(
28eb0 69 74 65 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22  iter,cx,cy,x,y)"
28ec0 20 43 54 45 20 6d 65 61 6e 73 20 74 68 61 74 20   CTE means that 
28ed0 61 66 74 65 72 20 22 69 74 65 72 22 20 69 74 65  after "iter" ite
28ee0 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e  rations, the Man
28ef0 64 65 6c 62 72 6f 74 0a 69 74 65 72 61 74 69 6f  delbrot.iteratio
28f00 6e 20 73 74 61 72 74 69 6e 67 20 61 74 20 63 78  n starting at cx
28f10 2c 63 79 20 68 61 73 20 72 65 61 63 68 65 64 20  ,cy has reached 
28f20 70 6f 69 6e 74 20 78 2c 79 2e 20 20 54 68 65 20  point x,y.  The 
28f30 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
28f40 69 6f 6e 73 0a 69 6e 20 74 68 69 73 20 65 78 61  ions.in this exa
28f50 6d 70 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20  mple is limited 
28f60 74 6f 20 32 38 20 28 77 68 69 63 68 20 73 65 76  to 28 (which sev
28f70 65 72 65 6c 79 20 6c 69 6d 69 74 73 20 74 68 65  erely limits the
28f80 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74   resolution of.t
28f90 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20  he computation, 
28fa0 62 75 74 20 69 73 20 73 75 66 66 69 63 69 65 6e  but is sufficien
28fb0 74 20 66 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75  t for low-resolu
28fc0 74 69 6f 6e 20 41 53 43 49 49 2d 61 72 74 20 6f  tion ASCII-art o
28fd0 75 74 70 75 74 29 2e 0a 54 68 65 20 22 6d 32 28  utput)..The "m2(
28fe0 69 74 65 72 2c 63 78 2c 63 79 29 22 20 43 54 45  iter,cx,cy)" CTE
28ff0 20 68 6f 6c 64 73 20 74 68 65 20 6d 61 78 69 6d   holds the maxim
29000 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  um number of ite
29010 72 61 74 69 6f 6e 73 20 72 65 61 63 68 65 64 20  rations reached 
29020 77 68 65 6e 0a 73 74 61 72 74 69 6e 67 20 61 74  when.starting at
29030 20 70 6f 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69   point cx,cy..Fi
29040 6e 61 6c 6c 79 2c 20 65 61 63 68 20 72 6f 77 20  nally, each row 
29050 69 6e 20 74 68 65 20 22 61 28 74 29 22 20 43 54  in the "a(t)" CT
29060 45 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  E holds a string
29070 20 0a 77 68 69 63 68 20 69 73 20 61 20 73 69 6e   .which is a sin
29080 67 6c 65 20 6c 69 6e 65 20 6f 66 20 74 68 65 20  gle line of the 
29090 6f 75 74 70 75 74 20 41 53 43 49 49 2d 61 72 74  output ASCII-art
290a0 2e 0a 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  ..The SELECT sta
290b0 74 65 6d 65 6e 74 20 61 74 20 74 68 65 20 65 6e  tement at the en
290c0 64 20 6a 75 73 74 20 71 75 65 72 69 65 73 20 74  d just queries t
290d0 68 65 20 22 61 22 20 43 54 45 20 74 6f 0a 72 65  he "a" CTE to.re
290e0 74 72 69 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73  trieve all lines
290f0 20 6f 66 20 41 53 43 49 49 2d 61 72 74 2c 20 6f   of ASCII-art, o
29100 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52  ne by one...<p>R
29110 75 6e 6e 69 6e 67 20 74 68 65 20 71 75 65 72 79  unning the query
29120 20 61 62 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c   above in an SQL
29130 69 74 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  ite [command-lin
29140 65 20 73 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73  e shell] results
29150 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .in the followin
29160 67 20 6f 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63  g output:..<bloc
29170 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20  kquote><pre>.   
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20   ....#.         
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e            ..#*..
291d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
291e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291f0 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20    ..+####+..    
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b          .......+
29220 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20  ####....   +.   
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29240 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23          ..##+*##
29250 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20  ########+.++++. 
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23           .+.####
29280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
29290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
292a0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
292b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
292c0 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
292d0 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23    ..++..#.....*#
292e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
292f0 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
29300 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
29310 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
29320 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
29330 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23      ....+*######
29340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29350 23 23 23 23 23 23 23 23 23 23 2e 0a 20 23 23 23  ##########.. ###
29360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29380 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20  ##########....  
29390 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23          ....+*##
293a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
293b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
293d0 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23  +#######++######
293e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
293f0 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
29400 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23   ..++..#.....*##
29410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29420 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
29430 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e      ............
29440 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .+##############
29450 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20  #####+.+.       
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23     .+.##########
29480 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
29490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294a0 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23        ..##+*####
294b0 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20  ######+.++++.   
294c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294d0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e           .......
294e0 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20  +####....   +.  
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
29510 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
29520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29530 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 2a              ..#*
29540 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29560 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20         ....#.   
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29590 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   +..</pre></bloc
295a0 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
295b0 5f 66 72 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75  _fragment sudoku
295c0 20 7b 73 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70   {solve Sudoku p
295d0 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c  uzzles} </tcl>.<
295e0 70 3e 54 68 69 73 20 6e 65 78 74 20 71 75 65 72  p>This next quer
295f0 79 20 73 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b  y solves a Sudok
29600 75 20 70 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73  u puzzle.  The s
29610 74 61 74 65 20 6f 66 20 74 68 65 20 70 75 7a 7a  tate of the puzz
29620 6c 65 20 69 73 0a 64 65 66 69 6e 65 64 20 62 79  le is.defined by
29630 20 61 6e 20 38 31 2d 63 68 61 72 61 63 74 65 72   an 81-character
29640 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
29650 79 20 72 65 61 64 69 6e 67 20 65 6e 74 72 69 65  y reading entrie
29660 73 20 66 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c  s from the.puzzl
29670 65 20 62 6f 78 20 72 6f 77 20 62 79 20 72 6f 77  e box row by row
29680 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
29690 67 68 74 20 61 6e 64 20 74 68 65 6e 20 66 72 6f  ght and then fro
296a0 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e  m top to bottom.
296b0 0a 42 6c 61 6e 6b 20 73 71 75 61 72 65 73 20 69  .Blank squares i
296c0 6e 20 74 68 65 20 70 75 7a 7a 6c 65 20 61 72 65  n the puzzle are
296d0 20 64 65 6e 6f 74 65 64 20 62 79 20 61 20 22 2e   denoted by a ".
296e0 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 0a 54  " character.  .T
296f0 68 75 73 20 74 68 65 20 69 6e 70 75 74 20 73 74  hus the input st
29700 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  ring:..<blockquo
29710 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e  te>.53..7....6..
29720 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38  195....98....6.8
29730 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e  ...6...34..8.3..
29740 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e  17...2...6.6....
29750 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e  28....419..5....
29760 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  8..79.</blockquo
29770 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f  te>..<p>Correspo
29780 6e 64 73 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20  nds to a puzzle 
29790 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f  like this:..<blo
297a0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
297b0 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70  border="1" cellp
297c0 61 64 64 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e  adding="5">.<tr>
297d0 3c 74 64 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td>5<td>3<td> <
297e0 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  td> <td>7<td> <t
297f0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72  d> <td> <td>.<tr
29800 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20  ><td>6<td> <td> 
29810 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c  <td>1<td>9<td>5<
29820 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74  td> <td> <td>.<t
29830 72 3e 3c 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e  r><td> <td>9<td>
29840 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  8<td> <td> <td> 
29850 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c  <td> <td>6<td>.<
29860 74 72 3e 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  tr><td>8<td> <td
29870 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e  > <td> <td>6<td>
29880 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33   <td> <td> <td>3
29890 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c  .<tr><td>4<td> <
298a0 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td> <td>8<td> <t
298b0 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>3<td> <td> <td
298c0 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e  >1.<tr><td>7<td>
298d0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32   <td> <td> <td>2
298e0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
298f0 74 64 3e 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>6.<tr><td> <t
29900 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
29910 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e  > <td> <td>2<td>
29920 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c  8<td>.<tr><td> <
29930 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74  td> <td> <td>4<t
29940 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64  d>1<td>9<td> <td
29950 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e  > <td>5.<tr><td>
29960 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
29970 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
29980 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c  td>7<td>9.</tabl
29990 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
299a0 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20 74 68 65  ..<p>This is the
299b0 20 71 75 65 72 79 20 74 68 61 74 20 73 6f 6c 76   query that solv
299c0 65 73 20 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a  es the puzzle:..
299d0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
299e0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
299f0 0a 20 20 69 6e 70 75 74 28 73 75 64 29 20 41 53  .  input(sud) AS
29a00 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 35   (.    VALUES('5
29a10 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
29a20 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
29a30 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
29a40 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
29a50 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
29a60 27 29 0a 20 20 29 2c 0a 20 20 64 69 67 69 74 73  ').  ),.  digits
29a70 28 7a 2c 20 6c 70 29 20 41 53 20 28 0a 20 20 20  (z, lp) AS (.   
29a80 20 56 41 4c 55 45 53 28 27 31 27 2c 20 31 29 0a   VALUES('1', 1).
29a90 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45      UNION ALL SE
29aa0 4c 45 43 54 0a 20 20 20 20 43 41 53 54 28 6c 70  LECT.    CAST(lp
29ab0 2b 31 20 41 53 20 54 45 58 54 29 2c 20 6c 70 2b  +1 AS TEXT), lp+
29ac0 31 20 46 52 4f 4d 20 64 69 67 69 74 73 20 57 48  1 FROM digits WH
29ad0 45 52 45 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c  ERE lp&lt;9.  ),
29ae0 0a 20 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20  .  x(s, ind) AS 
29af0 28 0a 20 20 20 20 53 45 4c 45 43 54 20 73 75 64  (.    SELECT sud
29b00 2c 20 69 6e 73 74 72 28 73 75 64 2c 20 27 2e 27  , instr(sud, '.'
29b10 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20  ) FROM input.   
29b20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
29b30 45 4c 45 43 54 0a 20 20 20 20 20 20 73 75 62 73  ELECT.      subs
29b40 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
29b50 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
29b60 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20  , ind+1),.      
29b70 69 6e 73 74 72 28 20 73 75 62 73 74 72 28 73 2c  instr( substr(s,
29b80 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20   1, ind-1) || z 
29b90 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e 64  || substr(s, ind
29ba0 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20 20 20 20  +1), '.' ).     
29bb0 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41  FROM x, digits A
29bc0 53 20 7a 0a 20 20 20 20 57 48 45 52 45 20 69 6e  S z.    WHERE in
29bd0 64 3e 30 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f  d>0.      AND NO
29be0 54 20 45 58 49 53 54 53 20 28 0a 20 20 20 20 20  T EXISTS (.     
29bf0 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a         SELECT 1.
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
29c10 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c 70 0a  OM digits AS lp.
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45               WHE
29c30 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  RE z.z = substr(
29c40 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39  s, ((ind-1)/9)*9
29c50 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20 20 20 20   + lp, 1).      
29c60 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a            OR z.z
29c70 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 69   = substr(s, ((i
29c80 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c 70 2d 31  nd-1)%9) + (lp-1
29c90 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20 20 20 20  )*9 + 1, 1).    
29ca0 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a              OR z
29cb0 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
29cc0 28 28 69 6e 64 2d 31 29 2f 33 29 20 25 20 33 29  ((ind-1)/3) % 3)
29cd0 20 2a 20 33 0a 20 20 20 20 20 20 20 20 20 20 20   * 3.           
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28               + (
29cf0 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32 37  (ind-1)/27) * 27
29d00 20 2b 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20   + lp.          
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
29d20 28 28 6c 70 2d 31 29 20 2f 20 33 29 20 2a 20 36  ((lp-1) / 3) * 6
29d30 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 29 0a  , 1).         ).
29d40 20 20 29 0a 53 45 4c 45 43 54 20 73 20 46 52 4f    ).SELECT s FRO
29d50 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d 30 3b  M x WHERE ind=0;
29d60 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
29d70 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e  ote>..<p>The "in
29d80 70 75 74 22 20 43 54 45 20 64 65 66 69 6e 65 73  put" CTE defines
29d90 20 74 68 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c   the input puzzl
29da0 65 2e 0a 54 68 65 20 22 64 69 67 69 74 73 22 20  e..The "digits" 
29db0 43 54 45 20 64 65 66 69 6e 65 73 20 61 20 74 61  CTE defines a ta
29dc0 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 61  ble that holds a
29dd0 6c 6c 20 64 69 67 69 74 73 20 62 65 74 77 65 65  ll digits betwee
29de0 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68 65 20 77  n 1 and 9..The w
29df0 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74  ork of solving t
29e00 68 65 20 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64  he puzzle is und
29e10 65 72 74 61 6b 65 6e 20 62 79 20 74 68 65 20 22  ertaken by the "
29e20 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79  x" CTE..An entry
29e30 20 69 6e 20 78 28 73 2c 69 6e 64 29 20 6d 65 61   in x(s,ind) mea
29e40 6e 73 20 74 68 61 74 20 74 68 65 20 38 31 2d 63  ns that the 81-c
29e50 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
29e60 22 73 22 20 69 73 20 61 20 76 61 6c 69 64 0a 73  "s" is a valid.s
29e70 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74  udoku puzzle (it
29e80 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74   has no conflict
29e90 73 29 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  s) and that the 
29ea0 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68  first unknown ch
29eb0 61 72 61 63 74 65 72 0a 69 73 20 61 74 20 70 6f  aracter.is at po
29ec0 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72  sition "ind", or
29ed0 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63   ind==0 if all c
29ee0 68 61 72 61 63 74 65 72 20 70 6f 73 69 74 69 6f  haracter positio
29ef0 6e 73 20 61 72 65 20 66 69 6c 6c 65 64 20 69 6e  ns are filled in
29f00 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e  ..The goal, then
29f10 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  , is to compute 
29f20 65 6e 74 72 69 65 73 20 66 6f 72 20 22 78 22 20  entries for "x" 
29f30 77 69 74 68 20 61 6e 20 22 69 6e 64 22 20 6f 66  with an "ind" of
29f40 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76   0...<p>The solv
29f50 65 72 20 77 6f 72 6b 73 20 62 79 20 61 64 64 69  er works by addi
29f60 6e 67 20 6e 65 77 20 65 6e 74 72 69 65 73 20 74  ng new entries t
29f70 6f 20 74 68 65 20 22 78 22 20 72 65 63 75 72 73  o the "x" recurs
29f80 69 76 65 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e  ive table..Given
29f90 20 70 72 69 6f 72 20 65 6e 74 72 69 65 73 2c 20   prior entries, 
29fa0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
29fb0 6c 65 63 74 20 74 72 69 65 73 20 74 6f 20 66 69  lect tries to fi
29fc0 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e  ll in a single n
29fd0 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77 69 74 68  ew.position with
29fe0 20 61 6c 6c 20 76 61 6c 75 65 73 20 62 65 74 77   all values betw
29ff0 65 65 6e 20 31 20 61 6e 64 20 39 20 74 68 61 74  een 1 and 9 that
2a000 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69   actually work i
2a010 6e 20 74 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e  n that.position.
2a020 20 20 54 68 65 20 63 6f 6d 70 6c 69 63 61 74 65    The complicate
2a030 64 20 22 4e 4f 54 20 45 58 49 53 54 53 22 20 73  d "NOT EXISTS" s
2a040 75 62 71 75 65 72 79 20 69 73 20 74 68 65 20 6d  ubquery is the m
2a050 61 67 69 63 20 74 68 61 74 0a 66 69 67 75 72 65  agic that.figure
2a060 73 20 6f 75 74 20 77 68 65 74 68 65 72 20 6f 72  s out whether or
2a070 20 6e 6f 74 20 65 61 63 68 20 63 61 6e 64 69 64   not each candid
2a080 61 74 65 20 22 73 22 20 73 74 72 69 6e 67 20 69  ate "s" string i
2a090 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75  s a valid.sudoku
2a0a0 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a   puzzle or not..
2a0b0 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e  .<p>The final an
2a0c0 73 77 65 72 20 69 73 20 66 6f 75 6e 64 20 62 79  swer is found by
2a0d0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73   looking for a s
2a0e0 74 72 69 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d  tring with ind==
2a0f0 30 2e 0a 49 66 20 74 68 65 20 6f 72 69 67 69 6e  0..If the origin
2a100 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65  al sudoku proble
2a110 6d 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61  m did not have a
2a120 20 75 6e 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e   unique solution
2a130 2c 20 74 68 65 6e 0a 74 68 65 20 71 75 65 72 79  , then.the query
2a140 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c   will return all
2a150 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c 75 74 69   possible soluti
2a160 6f 6e 73 2e 20 20 49 66 20 74 68 65 20 6f 72 69  ons.  If the ori
2a170 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61  ginal problem.wa
2a180 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68  s unsolvable, th
2a190 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20  en no rows will 
2a1a0 62 65 20 72 65 74 75 72 6e 65 64 2e 20 20 49 6e  be returned.  In
2a1b0 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
2a1c0 75 6e 69 71 75 65 0a 61 6e 73 77 65 72 20 69 73  unique.answer is
2a1d0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
2a1e0 35 33 34 36 37 38 39 31 32 36 37 32 31 39 35 33  5346789126721953
2a1f0 34 38 31 39 38 33 34 32 35 36 37 38 35 39 37 36  4819834256785976
2a200 31 34 32 33 34 32 36 38 35 33 37 39 31 37 31 33  1423426853791713
2a210 39 32 34 38 35 36 39 36 31 35 33 37 32 38 34 32  9248569615372842
2a220 38 37 34 31 39 36 33 35 33 34 35 32 38 36 31 37  8741963534528617
2a230 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  9.</blockquote>.
2a240 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e  .<p>The solution
2a250 20 77 61 73 20 63 6f 6d 70 75 74 65 64 20 69 6e   was computed in
2a260 20 6c 65 73 73 20 74 68 61 6e 20 33 30 30 20 6d   less than 300 m
2a270 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61  illiseconds on a
2a280 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74   modern.workstat
2a290 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61  ion...<h3>Limita
2a2a0 74 69 6f 6e 73 20 41 6e 64 20 43 61 76 65 61 74  tions And Caveat
2a2b0 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  s</h3>..<ul>.<li
2a2c0 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c  ><p>.The WITH cl
2a2d0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 75  ause cannot be u
2a2e0 73 65 64 20 77 69 74 68 69 6e 20 61 20 5b 43 52  sed within a [CR
2a2f0 45 41 54 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c  EATE TRIGGER]..<
2a300 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20  li><p>.The WITH 
2a310 63 6c 61 75 73 65 20 6d 75 73 74 20 61 70 70 65  clause must appe
2a320 61 72 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ar at the beginn
2a330 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76  ing of a top-lev
2a340 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  el [SELECT] stat
2a350 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74 68 65 20  ement.or at the 
2a360 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73  beginning of a s
2a370 75 62 71 75 65 72 79 2e 20 20 54 68 65 20 57 49  ubquery.  The WI
2a380 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  TH clause cannot
2a390 20 62 65 20 70 72 65 70 65 6e 64 65 64 20 74 6f   be prepended to
2a3a0 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 73  .the second or s
2a3b0 75 62 73 65 71 75 65 6e 74 20 53 45 4c 45 43 54  ubsequent SELECT
2a3c0 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 61 20   statement of a 
2a3d0 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  [compound select
2a3e0 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53  ]..<li><p>.The S
2a3f0 51 4c 3a 31 39 39 39 20 73 70 65 63 20 72 65 71  QL:1999 spec req
2a400 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 52  uires that the R
2a410 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64  ECURSIVE keyword
2a420 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20   follow WITH in 
2a430 61 6e 79 0a 57 49 54 48 20 63 6c 61 75 73 65 20  any.WITH clause 
2a440 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61 20  that includes a 
2a450 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
2a460 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
2a470 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 66 6f 72  n.  However, for
2a480 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77  .compatibility w
2a490 69 74 68 20 53 71 6c 53 65 72 76 65 72 20 61 6e  ith SqlServer an
2a4a0 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c 69 74 65  d Oracle, SQLite
2a4b0 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63   does not enforc
2a4c0 65 20 74 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75  e this rule..</u
2a4d0 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  l>..<tcl>.######
2a4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a4f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a520 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2a530 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20  n SELECT select 
2a540 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a  {SELECT query}..
2a550 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
2a560 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 73 74  iagram select-st
2a570 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54  mt.</tcl>...<p>T
2a580 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2a590 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71  ent is used to q
2a5a0 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
2a5b0 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f  e.  The.result o
2a5c0 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
2a5d0 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
2a5e0 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
2a5f0 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
2a600 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
2a610 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45 43 54 20  umns.  A SELECT 
2a620 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
2a630 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e  ot make.any chan
2a640 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
2a650 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73  ase...<p>The "[s
2a660 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e  elect-stmt]" syn
2a670 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
2a680 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 68  e attempts to sh
2a690 6f 77 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68  ow as much of th
2a6a0 65 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e.SELECT stateme
2a6b0 6e 74 20 73 79 6e 74 61 78 20 61 73 20 70 6f 73  nt syntax as pos
2a6c0 73 69 62 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c  sible in a singl
2a6d0 65 20 64 69 61 67 72 61 6d 2c 20 62 65 63 61 75  e diagram, becau
2a6e0 73 65 20 73 6f 6d 65 20 72 65 61 64 65 72 73 0a  se some readers.
2a6f0 66 69 6e 64 20 74 68 61 74 20 68 65 6c 70 66 75  find that helpfu
2a700 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  l.  The followin
2a710 67 20 22 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c  g "[factored-sel
2a720 65 63 74 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e  ect-stmt]" is an
2a730 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 73 79 6e   alternative.syn
2a740 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61  tax diagrams tha
2a750 74 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  t expresses the 
2a760 73 61 6d 65 20 73 79 6e 74 61 78 20 62 75 74 20  same syntax but 
2a770 74 72 69 65 73 20 74 6f 20 62 72 65 61 6b 20 74  tries to break t
2a780 68 65 20 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20  he syntax .down 
2a790 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75  into smaller chu
2a7a0 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  nks...<tcl>.Recu
2a7b0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2a7c0 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68  am --initially-h
2a7d0 69 64 64 65 6e 20 66 61 63 74 6f 72 65 64 2d 73  idden factored-s
2a7e0 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63  elect-stmt selec
2a7f0 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-core.</tcl>..<
2a800 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
2a810 65 20 61 72 65 20 70 61 74 68 73 20 74 68 72 6f  e are paths thro
2a820 75 67 68 20 74 68 65 20 73 79 6e 74 61 78 20 64  ugh the syntax d
2a830 69 61 67 72 61 6d 73 20 74 68 61 74 0a 61 72 65  iagrams that.are
2a840 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20   not allowed in 
2a850 70 72 61 63 74 69 63 65 2e 20 20 53 6f 6d 65 20  practice.  Some 
2a860 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c  examples:.<ul>.<
2a870 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c  li>A [VALUES] cl
2a880 61 75 73 65 20 63 61 6e 20 62 65 20 74 68 65 20  ause can be the 
2a890 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
2a8a0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2a8b0 45 43 54 5d 0a 20 20 20 20 74 68 61 74 20 75 73  ECT].    that us
2a8c0 65 73 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75  es a [WITH] clau
2a8d0 73 65 2c 20 62 75 74 20 61 20 5b 73 69 6d 70 6c  se, but a [simpl
2a8e0 65 20 53 45 4c 45 43 54 5d 20 74 68 61 74 20 63  e SELECT] that c
2a8f0 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20 20 20 6a  onsists of.    j
2a900 75 73 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63  ust a [VALUES] c
2a910 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
2a920 70 72 65 63 65 64 65 64 20 62 79 20 61 20 5b 57  preceded by a [W
2a930 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69  ITH] clause..<li
2a940 3e 54 68 65 20 5b 57 49 54 48 5d 20 63 6c 61 75  >The [WITH] clau
2a950 73 65 20 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e  se must occur on
2a960 20 74 68 65 20 66 69 72 73 74 20 53 45 4c 45 43   the first SELEC
2a970 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  T of a [compound
2a980 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74   SELECT]..    It
2a990 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61   cannot follow a
2a9a0 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61   [compound-opera
2a9b0 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73  tor]..</ul>.Thes
2a9c0 65 20 61 6e 64 20 6f 74 68 65 72 20 73 69 6d 69  e and other simi
2a9d0 6c 61 72 20 73 79 6e 74 61 78 20 72 65 73 74 72  lar syntax restr
2a9e0 69 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73 63  ictions are desc
2a9f0 72 69 62 65 64 20 69 6e 20 74 68 65 20 74 65 78  ribed in the tex
2aa00 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  t...<p>The SELEC
2aa10 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  T statement is t
2aa20 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61  he most complica
2aa30 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74  ted command in t
2aa40 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
2aa50 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73  .To make the des
2aa60 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20  cription easier 
2aa70 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20  to follow, some 
2aa80 6f 66 20 74 68 65 20 70 61 73 73 61 67 65 73 20  of the passages 
2aa90 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74  below describe.t
2aaa0 68 65 20 77 61 79 20 74 68 65 20 64 61 74 61 20  he way the data 
2aab0 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
2aac0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2aad0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
2aae0 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70  a series of.step
2aaf0 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  s. It is importa
2ab00 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69  nt to keep in mi
2ab10 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 73 20  nd that this is 
2ab20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74  purely illustrat
2ab30 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63  ive -.in practic
2ab40 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65  e neither SQLite
2ab50 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53   nor any other S
2ab60 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71  QL engine is req
2ab70 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20  uired to follow 
2ab80 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68  .this or any oth
2ab90 65 72 20 73 70 65 63 69 66 69 63 20 70 72 6f 63  er specific proc
2aba0 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ess...<tcl>hd_fr
2abb0 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c  agment simplesel
2abc0 65 63 74 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45  ect {simple SELE
2abd0 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69  CT}</tcl>.<h3>Si
2abe0 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72 6f 63  mple Select Proc
2abf0 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e  essing</h3>..<p>
2ac00 54 68 65 20 63 6f 72 65 20 6f 66 20 61 20 53 45  The core of a SE
2ac10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2ac20 73 20 61 20 22 73 69 6d 70 6c 65 20 53 45 4c 45  s a "simple SELE
2ac30 43 54 22 20 73 68 6f 77 6e 20 62 79 20 74 68 65  CT" shown by the
2ac40 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61  .[select-core] a
2ac50 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63  nd [simple-selec
2ac60 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61 78 20 64  t-stmt] syntax d
2ac70 69 61 67 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20  iagrams below.  
2ac80 0a 49 6e 20 70 72 61 63 74 69 63 65 2c 20 6d 6f  .In practice, mo
2ac90 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  st SELECT statem
2aca0 65 6e 74 73 20 61 72 65 20 73 69 6d 70 6c 65 20  ents are simple 
2acb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2acc0 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  s...<tcl>.Recurs
2acd0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2ace0 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73   simple-select-s
2acf0 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a  tmt select-core.
2ad00 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72  </tcl>..<p>Gener
2ad10 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ating the result
2ad20 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 53 45  s of a simple SE
2ad30 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 69  LECT.statement i
2ad40 73 20 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  s presented as a
2ad50 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f 63 65   four step proce
2ad60 73 73 20 69 6e 20 74 68 65 20 64 65 73 63 72 69  ss in the descri
2ad70 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f  ption below:..<o
2ad80 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52  l>.  <li> <p>[FR
2ad90 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65  OM clause] proce
2ada0 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74  ssing: The input
2adb0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73 69   data for the si
2adc0 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 0a 20  mple SELECT is. 
2add0 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64        determined
2ade0 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  . The input data
2adf0 20 69 73 20 65 69 74 68 65 72 20 69 6d 70 6c 69   is either impli
2ae00 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72  citly a single r
2ae10 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20 20 20  ow with 0.      
2ae20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74 68 65   columns (if the
2ae30 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c  re is no FROM cl
2ae40 61 75 73 65 29 20 6f 72 20 69 73 20 64 65 74 65  ause) or is dete
2ae50 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 46 52  rmined by the FR
2ae60 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65  OM.       clause
2ae70 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45  ..  <li> <p>[WHE
2ae80 52 45 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65  RE clause] proce
2ae90 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74  ssing: The input
2aea0 20 64 61 74 61 20 69 73 20 66 69 6c 74 65 72 65   data is filtere
2aeb0 64 20 75 73 69 6e 67 20 74 68 65 20 57 48 45 52  d using the WHER
2aec0 45 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65 20  E.       clause 
2aed0 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20  expression.  .  
2aee0 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42  <li> <p>[GROUP B
2aef0 59 7c 47 52 4f 55 50 20 42 59 2c 20 48 41 56 49  Y|GROUP BY, HAVI
2af00 4e 47 20 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f  NG and result-co
2af10 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lumn expression]
2af20 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20   processing: .  
2af30 20 20 20 20 20 54 68 65 20 73 65 74 20 6f 66 20       The set of 
2af40 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20 63  result rows is c
2af50 6f 6d 70 75 74 65 64 20 62 79 20 61 67 67 72 65  omputed by aggre
2af60 67 61 74 69 6e 67 20 74 68 65 20 64 61 74 61 20  gating the data 
2af70 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20  according to.   
2af80 20 20 20 20 61 6e 79 20 47 52 4f 55 50 20 42 59      any GROUP BY
2af90 20 63 6c 61 75 73 65 20 61 6e 64 20 63 61 6c 63   clause and calc
2afa0 75 6c 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  ulating the resu
2afb0 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
2afc0 6e 73 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20  ns for the.     
2afd0 20 20 72 6f 77 73 20 6f 66 20 74 68 65 20 66 69    rows of the fi
2afe0 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
2aff0 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c  aset.  .  <li> <
2b000 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49 53 54  p>[DISTINCT|DIST
2b010 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64  INCT/ALL keyword
2b020 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 49 66  ] processing: If
2b030 20 74 68 65 20 71 75 65 72 79 20 69 73 20 61 20   the query is a 
2b040 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 44  "SELECT.       D
2b050 49 53 54 49 4e 43 54 22 20 71 75 65 72 79 2c 20  ISTINCT" query, 
2b060 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
2b070 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
2b080 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
2b090 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  t rows..</ol>..<
2b0a0 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  p>There are two 
2b0b0 74 79 70 65 73 20 6f 66 20 73 69 6d 70 6c 65 20  types of simple 
2b0c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2b0d0 20 2d 20 61 67 67 72 65 67 61 74 65 20 61 6e 64   - aggregate and
2b0e0 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20   .non-aggregate 
2b0f0 71 75 65 72 69 65 73 2e 20 5e 41 20 73 69 6d 70  queries. ^A simp
2b100 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2b110 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67  ent is an aggreg
2b120 61 74 65 20 71 75 65 72 79 20 69 66 0a 69 74 20  ate query if.it 
2b130 63 6f 6e 74 61 69 6e 73 20 65 69 74 68 65 72 20  contains either 
2b140 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
2b150 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  e or one or more
2b160 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
2b170 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65 73 75  ions.in the resu
2b180 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72 77 69  lt-set. ^Otherwi
2b190 73 65 2c 20 69 66 20 61 20 73 69 6d 70 6c 65 20  se, if a simple 
2b1a0 53 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e 73 20  SELECT contains 
2b1b0 6e 6f 20 61 67 67 72 65 67 61 74 65 0a 66 75 6e  no aggregate.fun
2b1c0 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
2b1d0 50 20 42 59 20 63 6c 61 75 73 65 2c 20 69 74 20  P BY clause, it 
2b1e0 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
2b1f0 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62  te query...<p><b
2b200 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61 74 69 6f  >1. Determinatio
2b210 6e 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20  n of input data 
2b220 28 46 52 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f  (FROM clause pro
2b230 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
2b240 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 66  cl>hd_fragment f
2b250 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a  romclause</tcl>.
2b260 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
2b270 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f   {FROM clause}</
2b280 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70  tcl>..<p>The inp
2b290 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
2b2a0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
2b2b0 71 75 65 72 79 20 69 73 20 61 20 73 65 74 20 6f  query is a set o
2b2c0 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  f <i>N</i> rows 
2b2d0 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63  .each <i>M</i> c
2b2e0 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70  olumns wide...<p
2b2f0 3e 5e 28 49 66 20 74 68 65 20 46 52 4f 4d 20 63  >^(If the FROM c
2b300 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
2b310 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53   from a simple S
2b320 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
2b330 20 74 68 65 6e 20 74 68 65 20 0a 69 6e 70 75 74   then the .input
2b340 20 64 61 74 61 20 69 73 20 69 6d 70 6c 69 63 69   data is implici
2b350 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  tly a single row
2b360 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69   zero columns wi
2b370 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c  de)^ (i.e. <i>N<
2b380 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f  /i>=1 and.<i>M</
2b390 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20  i>=0)...<p>If a 
2b3a0 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 73  FROM clause is s
2b3b0 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 61  pecified, the da
2b3c0 74 61 20 6f 6e 20 77 68 69 63 68 20 61 20 73 69  ta on which a si
2b3d0 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72  mple SELECT quer
2b3e0 79 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d 65 73  y.operates comes
2b3f0 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72   from the one or
2b400 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f 72 20   more tables or 
2b410 73 75 62 71 75 65 72 69 65 73 20 28 53 45 4c 45  subqueries (SELE
2b420 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e  CT statements.in
2b430 20 70 61 72 65 6e 74 68 65 73 69 73 29 20 73 70   parenthesis) sp
2b440 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e  ecified followin
2b450 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f  g the FROM keywo
2b460 72 64 2e 20 5e 41 20 73 75 62 71 75 65 72 79 20  rd. ^A subquery 
2b470 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74 68 65  specified.in the
2b480 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6f   <yyterm>table-o
2b490 72 2d 73 75 62 71 75 65 72 79 3c 2f 79 79 74 65  r-subquery</yyte
2b4a0 72 6d 3e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  rm> following th
2b4b0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e  e FROM clause in
2b4c0 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43   a .simple SELEC
2b4d0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68  T statement is.h
2b4e0 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74 20  andled as if it 
2b4f0 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74  was a table cont
2b500 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20  aining the data 
2b510 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
2b520 75 74 69 6e 67 20 74 68 65 0a 73 75 62 71 75 65  uting the.subque
2b530 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ry statement. ^E
2b540 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
2b550 65 20 73 75 62 71 75 65 72 79 20 68 61 73 20 74  e subquery has t
2b560 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f  he.[collation|co
2b570 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2b580 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d  ] and [affinity]
2b590 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
2b5a0 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
2b5b0 0a 69 6e 20 74 68 65 20 73 75 62 71 75 65 72 79  .in the subquery
2b5c0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
2b5d0 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ^If there is onl
2b5e0 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  y a single table
2b5f0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
2b600 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c  the FROM.clause,
2b610 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20   then the input 
2b620 64 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65  data used by the
2b630 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2b640 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  t is the content
2b650 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74  s of the.named t
2b660 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20  able. ^If there 
2b670 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  is more than one
2b680 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2b690 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61 75 73  ry in FROM claus
2b6a0 65 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  e.then the conte
2b6b0 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  nts of all table
2b6c0 73 20 61 6e 64 2f 6f 72 20 73 75 62 71 75 65 72  s and/or subquer
2b6d0 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69  ies.are joined i
2b6e0 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nto a single dat
2b6f0 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d  aset for the sim
2b700 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2b710 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20  ment to operate 
2b720 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20  on..Exactly how 
2b730 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62  the data is comb
2b740 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20  ined depends on 
2b750 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f  the specific [jo
2b760 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61 6e 64  in-operator] and
2b770 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  .[join-constrain
2b780 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65  t] used to conne
2b790 63 74 20 74 68 65 20 74 61 62 6c 65 73 20 6f 72  ct the tables or
2b7a0 20 73 75 62 71 75 65 72 69 65 73 20 74 6f 67 65   subqueries toge
2b7b0 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f  ther...<p>All jo
2b7c0 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72  ins in SQLite ar
2b7d0 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  e based on the c
2b7e0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
2b7f0 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
2b800 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61  .right-hand data
2b810 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d  sets. ^The colum
2b820 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74 65 73  ns of the cartes
2b830 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61  ian product data
2b840 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64  set are, in .ord
2b850 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75  er, all the colu
2b860 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  mns of the left-
2b870 68 61 6e 64 20 64 61 74 61 73 65 74 20 66 6f 6c  hand dataset fol
2b880 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74 68 65  lowed by all the
2b890 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20   columns.of the 
2b8a0 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
2b8b0 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20 61 20  et. ^There is a 
2b8c0 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72 74 65  row in the carte
2b8d0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74  sian product dat
2b8e0 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79 20 63  aset.formed by c
2b8f0 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20 75 6e  ombining each un
2b900 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
2b910 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d 20 74   of a row from t
2b920 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e  he left-hand .an
2b930 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
2b940 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65  asets. ^(In othe
2b950 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2b960 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
2b970 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69  t consists of.<i
2b980 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >N<sub><small>le
2b990 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
2b9a0 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a 3c 69  </i> rows of .<i
2b9b0 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >M<sub><small>le
2b9c0 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
2b9d0 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e  </i> columns, an
2b9e0 64 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  d the right-hand
2b9f0 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e   dataset of.<i>N
2ba00 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
2ba10 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2ba20 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d  /i> rows of.<i>M
2ba30 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
2ba40 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2ba50 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65  /i> columns, the
2ba60 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
2ba70 70 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61 74  product is a.dat
2ba80 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75  aset of .<i>N<su
2ba90 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2baa0 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d 65  mall></sub>&time
2bab0 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  s;N<sub><small>r
2bac0 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
2bad0 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65 61 63  b></i>.rows, eac
2bae0 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c 69  h containing .<i
2baf0 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >M<sub><small>le
2bb00 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
2bb10 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  +M<sub><small>ri
2bb20 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
2bb30 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e  ></i> columns.)^
2bb40 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69  ..<p>^If the joi
2bb50 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 22 43  n-operator is "C
2bb60 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e  ROSS JOIN", "INN
2bb70 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2bb80 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22   or a comma.(","
2bb90 29 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e  ) and there is n
2bba0 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  o ON or USING cl
2bbb0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72  ause, then the r
2bbc0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69  esult of the joi
2bbd0 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20  n is.simply the 
2bbe0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
2bbf0 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  t of the left an
2bc00 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
2bc10 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d  asets. .If join-
2bc20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 68 61  operator does ha
2bc30 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  ve ON or USING c
2bc40 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20 61 72  lauses, those ar
2bc50 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f 72 64  e handled accord
2bc60 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f  ing to.the follo
2bc70 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e  wing bullet poin
2bc80 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  ts:..<ul>.  <li>
2bc90 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20 69   <p>^(If there i
2bca0 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 74  s an ON clause t
2bcb0 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65  hen the ON expre
2bcc0 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20  ssion is.       
2bcd0 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
2bce0 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61  ch row of the ca
2bcf0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2bd00 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f  as a .       [bo
2bd10 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2bd20 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2bd30 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72 65   which the expre
2bd40 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2bd50 74 6f 20 0a 20 20 20 20 20 20 20 74 72 75 65 20  to .       true 
2bd60 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f  are included fro
2bd70 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e  m the dataset.)^
2bd80 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20  ..  <li> <p>^If 
2bd90 74 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47  there is a USING
2bda0 20 63 6c 61 75 73 65 0a 20 20 20 20 20 20 20 74   clause.       t
2bdb0 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
2bdc0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65  column names spe
2bdd0 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73  cified must exis
2bde0 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74  t in the dataset
2bdf0 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74  s to .       bot
2be00 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  h the left and r
2be10 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ight of the join
2be20 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46 6f 72  -operator. ^(For
2be30 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61   each pair of na
2be40 6d 65 64 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d  med.       colum
2be50 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73 73 69  ns, the expressi
2be60 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e  on "lhs.X = rhs.
2be70 58 22 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  X" is evaluated 
2be80 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
2be90 20 20 20 20 20 20 20 74 68 65 20 63 61 72 74 65         the carte
2bea0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20  sian product as 
2beb0 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
2bec0 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
2bed0 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20  s for which.    
2bee0 20 20 20 61 6c 6c 20 73 75 63 68 20 65 78 70 72     all such expr
2bef0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
2bf00 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e  s to true are in
2bf10 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a  cluded from the.
2bf20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65         result se
2bf30 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
2bf40 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
2bf50 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49   result of a USI
2bf60 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20  NG clause, the. 
2bf70 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c        normal rul
2bf80 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
2bf90 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
2bfa0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20  ation sequences 
2bfb0 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  and NULL.       
2bfc0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
2bfd0 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
2bfe0 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
2bff0 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65  e dataset on the
2c000 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e  .       left-han
2c010 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
2c020 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in-operator is c
2c030 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2c040 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
2c050 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20  .       side of 
2c060 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
2c070 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
2c080 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2c090 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20  collation .     
2c0a0 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61    sequence and a
2c0b0 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e  ffinity preceden
2c0c0 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e  ce...       <p>^
2c0d0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
2c0e0 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
2c0f0 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63  ied by a USING c
2c100 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d  lause, the colum
2c110 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  n.       from th
2c120 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
2c130 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20  aset is omitted 
2c140 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20  from the joined 
2c150 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a  dataset. ^This .
2c160 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e         is the on
2c170 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
2c180 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c  tween a USING cl
2c190 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75  ause and its equ
2c1a0 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20  ivalent ON.     
2c1b0 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20    constraint... 
2c1c0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
2c1d0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
2c1e0 64 20 69 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  d is in the join
2c1f0 2d 6f 70 65 72 61 74 6f 72 20 74 68 65 6e 20 61  -operator then a
2c200 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69  n.       implici
2c210 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69  t USING clause i
2c220 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a  s added to the j
2c230 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e  oin-constraints.
2c240 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20   The implicit.  
2c250 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73       USING claus
2c260 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20  e contains each 
2c270 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
2c280 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72 20  mes that appear 
2c290 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74  in both.       t
2c2a0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2c2b0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74  t-hand input dat
2c2c0 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65  asets.)^ ^If the
2c2d0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
2c2e0 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75  hand.       inpu
2c2f0 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74 75  t datasets featu
2c300 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c  re no common col
2c310 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20  umn names, then 
2c320 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
2c330 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e  ord.       has n
2c340 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20  o effect on the 
2c350 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a  results of the j
2c360 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72  oin. ^A USING or
2c370 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20   ON clause may. 
2c380 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64        not be add
2c390 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61  ed to a join tha
2c3a0 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
2c3b0 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e  NATURAL keyword.
2c3c0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
2c3d0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
2c3e0 6f 72 20 69 73 20 61 20 22 4c 45 46 54 20 4a 4f  or is a "LEFT JO
2c3f0 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55 54  IN" or "LEFT OUT
2c400 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a 20  ER JOIN", then. 
2c410 20 20 20 20 20 20 61 66 74 65 72 0a 20 20 20 20        after.    
2c420 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49     the ON or USI
2c430 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61  NG filtering cla
2c440 75 73 65 73 20 68 61 76 65 20 62 65 65 6e 20 61  uses have been a
2c450 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61  pplied, an extra
2c460 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20   row is .       
2c470 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74  added to the out
2c480 70 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77  put for each row
2c490 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
2c4a0 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74   left-hand input
2c4b0 20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74   .       dataset
2c4c0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
2c4d0 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20  s to no rows at 
2c4e0 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  all in the compo
2c4f0 73 69 74 65 0a 20 20 20 20 20 20 20 64 61 74 61  site.       data
2c500 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20  set (if any).)^ 
2c510 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77 73 20  ^The added rows 
2c520 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c  contain NULL val
2c530 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
2c540 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74 20 77  ns.       that w
2c550 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  ould normally co
2c560 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70  ntain values cop
2c570 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67  ied from the rig
2c580 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20  ht-hand input.  
2c590 20 20 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a       dataset.  .
2c5a0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e  </ul>..<p>^(When
2c5b0 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74   more than two t
2c5c0 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64  ables are joined
2c5d0 20 74 6f 67 65 74 68 65 72 20 61 73 20 70 61 72   together as par
2c5e0 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  t of a FROM clau
2c5f0 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65  se,.the join ope
2c600 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63  rations are proc
2c610 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66  essed in order f
2c620 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
2c630 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72  t. In other .wor
2c640 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ds, the FROM cla
2c650 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  use (A join-op-1
2c660 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20   B join-op-2 C) 
2c670 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a  is computed as .
2c680 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29  ((A join-op-1 B)
2c690 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e   join-op-2 C).)^
2c6a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2c6b0 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72  nt crossjoin {tr
2c6c0 65 61 74 73 20 74 68 65 20 43 52 4f 53 53 20 4a  eats the CROSS J
2c6d0 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70 65  OIN operator spe
2c6e0 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70  cially}</tcl>.<p
2c6f0 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53  ><b>Side note: S
2c700 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2c710 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f  of CROSS JOIN.</
2c720 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20  b>.^There is no 
2c730 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2c740 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f  en the "INNER JO
2c750 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
2c760 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f  "," join.operato
2c770 72 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f 6d  rs. They are com
2c780 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68 61  pletely intercha
2c790 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c 69 74  ngeable in SQLit
2c7a0 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53 20  e..^(The "CROSS 
2c7b0 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61  JOIN" join opera
2c7c0 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65  tor produces the
2c7d0 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73 20   same result as 
2c7e0 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e  the ."INNER JOIN
2c7f0 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c  ", "JOIN" and ",
2c800 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62  " operators)^, b
2c810 75 74 20 69 73 20 0a 5b 43 52 4f 53 53 20 4a 4f  ut is .[CROSS JO
2c820 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66 66 65  IN|handled diffe
2c830 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71 75  rently by the qu
2c840 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d 0a 69  ery optimizer].i
2c850 6e 20 74 68 61 74 20 69 74 20 70 72 65 76 65 6e  n that it preven
2c860 74 73 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  ts the query opt
2c870 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72  imizer from reor
2c880 64 65 72 69 6e 67 0a 74 68 65 20 74 61 62 6c 65  dering.the table
2c890 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20  s in the join.  
2c8a0 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70  An application p
2c8b0 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20 75 73  rogrammer can us
2c8c0 65 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e  e the CROSS JOIN
2c8d0 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20 64 69   .operator to di
2c8e0 72 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65  rectly influence
2c8f0 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74   the algorithm t
2c900 68 61 74 20 69 73 20 63 68 6f 73 65 6e 20 74 6f  hat is chosen to
2c910 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53   implement.the S
2c920 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2c930 20 20 41 76 6f 69 64 20 75 73 69 6e 67 20 43 52    Avoid using CR
2c940 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65 70 74 20  OSS JOIN except 
2c950 69 6e 20 73 70 65 63 69 66 69 63 20 73 69 74 75  in specific situ
2c960 61 74 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61  ations .where ma
2c970 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  nual control of 
2c980 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
2c990 7a 65 72 20 69 73 20 64 65 73 69 72 65 64 2e 20  zer is desired. 
2c9a0 20 41 76 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f   Avoid using.CRO
2c9b0 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e  SS JOIN early in
2c9c0 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74   the development
2c9d0 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69   of an applicati
2c9e0 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f 20 69  on as doing so i
2c9f0 73 0a 61 20 3c 61 20 68 72 65 66 3d 22 68 74 74  s.a <a href="htt
2ca00 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77  p://c2.com/cgi/w
2ca10 69 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f 70 74  iki?PrematureOpt
2ca20 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61  imization">prema
2ca30 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f  ture.optimizatio
2ca40 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70 65 63  n</a>.  The spec
2ca50 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20  ial handling of 
2ca60 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e  CROSS JOIN is an
2ca70 20 53 51 4c 69 74 65 2d 73 70 65 63 69 66 69 63   SQLite-specific
2ca80 0a 66 65 61 74 75 72 65 20 61 6e 64 20 69 73 20  .feature and is 
2ca90 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20 73 74  not a part of st
2caa0 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20 20 20  andard SQL..    
2cab0 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61     ..<tcl>hd_fra
2cac0 67 6d 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73  gment whereclaus
2cad0 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
2cae0 6b 65 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20  keywords {WHERE 
2caf0 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  clause}</tcl>.<p
2cb00 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61  ><b>2. WHERE cla
2cb10 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f  use filtering.</
2cb20 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48  b>..<p>^(If a WH
2cb30 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70  ERE clause is sp
2cb40 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45  ecified, the WHE
2cb50 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  RE expression is
2cb60 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a   evaluated for .
2cb70 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
2cb80 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61 20  input data as a 
2cb90 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
2cba0 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
2cbb0 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48  for which the.WH
2cbc0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
2cbd0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2cbe0 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c  to true are incl
2cbf0 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
2cc00 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e  taset before.con
2cc10 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f 77 73  tinuing.)^  Rows
2cc20 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
2cc30 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 69 66  om the result if
2cc40 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2cc50 65 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65  e.evaluates to e
2cc60 69 74 68 65 72 20 66 61 6c 73 65 20 6f 72 20 4e  ither false or N
2cc70 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a  ULL...<p>For a J
2cc80 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a 4f 49  OIN or INNER JOI
2cc90 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49 4e 2c  N or CROSS JOIN,
2cca0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66   there is no dif
2ccb0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2ccc0 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78  .a constraint ex
2ccd0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2cce0 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 6e 64  WHERE clause and
2ccf0 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e 20 63   one in the ON c
2cd00 6c 61 75 73 65 2e 20 20 48 6f 77 65 76 65 72 2c  lause.  However,
2cd10 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f 49 4e  .for a LEFT JOIN
2cd20 20 6f 72 20 4c 45 46 54 20 4f 55 54 45 52 20 4a   or LEFT OUTER J
2cd30 4f 49 4e 2c 20 74 68 65 20 64 69 66 66 65 72 65  OIN, the differe
2cd40 6e 63 65 20 69 73 20 76 65 72 79 20 69 6d 70 6f  nce is very impo
2cd50 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20 4c 45  rtant.  .In a LE
2cd60 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65 78 74  FT JOIN,.the ext
2cd70 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f 72 20  ra NULL row for 
2cd80 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 74  the right-hand t
2cd90 61 62 6c 65 20 69 73 20 61 64 64 65 64 20 61 66  able is added af
2cda0 74 65 72 20 4f 4e 20 63 6c 61 75 73 65 20 70 72  ter ON clause pr
2cdb0 6f 63 65 73 73 69 6e 67 0a 62 75 74 20 62 65 66  ocessing.but bef
2cdc0 6f 72 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  ore WHERE clause
2cdd0 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 41 20   processing.  A 
2cde0 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20 74 68  constraint of th
2cdf0 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78 3d 72  e form "left.x=r
2ce00 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e  ight.y".in an ON
2ce10 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 74 68 65   clause will the
2ce20 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74 68 72  refore allow thr
2ce30 6f 75 67 68 20 74 68 65 20 61 64 64 65 64 20 61  ough the added a
2ce40 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f 66 20  ll-NULL rows of 
2ce50 74 68 65 0a 72 69 67 68 74 20 74 61 62 6c 65 2e  the.right table.
2ce60 20 20 42 75 74 20 69 66 20 74 68 61 74 20 73 61    But if that sa
2ce70 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  me constraint is
2ce80 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2ce90 61 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e 0a 22  ause a NULL in."
2cea0 72 69 67 68 74 2e 79 22 20 77 69 6c 6c 20 70 72  right.y" will pr
2ceb0 65 76 65 6e 74 20 74 68 65 20 65 78 70 72 65 73  event the expres
2cec0 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72 69 67  sion "left.x=rig
2ced0 68 74 2e 79 22 20 66 72 6f 6d 20 62 65 69 6e 67  ht.y" from being
2cee0 20 74 72 75 65 2c 20 61 6e 64 0a 74 68 75 73 20   true, and.thus 
2cef0 65 78 63 6c 75 64 65 20 74 68 61 74 20 72 6f 77  exclude that row
2cf00 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 70 75 74   from the output
2cf10 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65  ...<p><b>3. Gene
2cf20 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 65  ration of the se
2cf30 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2cf40 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2cf50 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65 74  agment resultset
2cf60 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2cf70 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d  eywords {result-
2cf80 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  set expressions}
2cf90 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c   {GROUP BY}</tcl
2cfa0 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69  >..<p>Once the i
2cfb0 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20 74  nput data from t
2cfc0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 68  he FROM clause h
2cfd0 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65 64  as been filtered
2cfe0 20 62 79 20 74 68 65 0a 57 48 45 52 45 20 63 6c   by the.WHERE cl
2cff0 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
2d000 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73 65  (if any), the se
2d010 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2d020 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
2d030 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c 63  .SELECT are calc
2d040 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79 20  ulated. Exactly 
2d050 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65  how this is done
2d060 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65 74   depends on whet
2d070 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a  her the simple .
2d080 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67 67  SELECT is an agg
2d090 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67  regate or non-ag
2d0a0 67 72 65 67 61 74 65 20 71 75 65 72 79 2c 20 61  gregate query, a
2d0b0 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
2d0c0 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c 61  t a GROUP.BY cla
2d0d0 75 73 65 20 77 61 73 20 73 70 65 63 69 66 69 65  use was specifie
2d0e0 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74  d...<p> The list
2d0f0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
2d100 62 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c 45  between the SELE
2d110 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77  CT and FROM keyw
2d120 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73  ords is known as
2d130 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72  .the result expr
2d140 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49  ession list.  ^I
2d150 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  f a result expre
2d160 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70 65  ssion is the spe
2d170 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a  cial expression.
2d180 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c  "*" then all col
2d190 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70 75  umns in the inpu
2d1a0 74 20 64 61 74 61 20 61 72 65 20 73 75 62 73 74  t data are subst
2d1b0 69 74 75 74 65 64 20 66 6f 72 20 74 68 61 74 20  ituted for that 
2d1c0 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  one expression..
2d1d0 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73 73  ^(If the express
2d1e0 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61 73  ion is the alias
2d1f0 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20 73   of a table or s
2d200 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
2d210 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f  ROM clause.follo
2d220 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65 6e  wed by ".*" then
2d230 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f   all columns fro
2d240 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  m the named tabl
2d250 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 61 72  e or subquery ar
2d260 65 0a 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e.substituted fo
2d270 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78 70  r the single exp
2d280 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20  ression.)^ ^(It 
2d290 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  is an error to u
2d2a0 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69  se a "*" or."ali
2d2b0 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
2d2c0 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
2d2d0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 65 73  other than a res
2d2e0 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2d2f0 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61  ist.)^.^(It is a
2d300 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  lso an error to 
2d310 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c  use a "*" or "al
2d320 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
2d330 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45  n in a simple SE
2d340 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20  LECT.query that 
2d350 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
2d360 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a  FROM clause.)^..
2d370 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  <p> ^(The number
2d380 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
2d390 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
2d3a0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
2d3b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  ECT statement.is
2d3c0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75   equal to the nu
2d3d0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
2d3e0 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2d3f0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2d400 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75  t after.substitu
2d410 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c  tion of * and al
2d420 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e  ias.* expression
2d430 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74  s.)^ Each result
2d440 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74   row is calculat
2d450 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67  ed by.evaluating
2d460 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
2d470 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2d480 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77  xpression list w
2d490 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61  ith respect to a
2d4a0 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69  .single row of i
2d4b0 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f  nput data or, fo
2d4c0 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  r aggregate quer
2d4d0 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63  ies, with respec
2d4e0 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20  t to a group.of 
2d4f0 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  rows...<ul>.  <l
2d500 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c  i><p>^If the SEL
2d510 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2d520 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67   <b>a non-aggreg
2d530 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74  ate query</b>, t
2d540 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78  hen .    each ex
2d550 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2d560 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2d570 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61  n list is evalua
2d580 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
2d590 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61   in.    the data
2d5a0 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20  set filtered by 
2d5b0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2d5c0 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  ...  <li><p>^If 
2d5d0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2d5e0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
2d5f0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
2d600 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20  thout a GROUP.  
2d610 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
2d620 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65   then each aggre
2d630 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
2d640 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2d650 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
2d660 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20  ted once across 
2d670 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73  the entire datas
2d680 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67  et. ^Each non-ag
2d690 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2d6a0 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65  on.    in the re
2d6b0 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c  sult-set is eval
2d6c0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61  uated once for a
2d6d0 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
2d6e0 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20  lected row of.  
2d6f0 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e    the dataset. ^
2d700 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61  The same arbitra
2d710 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
2d720 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61  w is used for ea
2d730 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65  ch.    non-aggre
2d740 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  gate expression.
2d750 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74   ^Or, if the dat
2d760 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65  aset contains ze
2d770 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20  ro rows, then . 
2d780 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72     each non-aggr
2d790 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2d7a0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
2d7b0 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73  ainst a row cons
2d7c0 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72  isting.    entir
2d7d0 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75  ely of NULL valu
2d7e0 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20  es...   <p>^The 
2d7f0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
2d800 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72  sult-set data cr
2d810 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74  eated by evaluat
2d820 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74  ing the aggregat
2d830 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67  e.    and non-ag
2d840 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2d850 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2d860 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20  t-set forms the 
2d870 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20  result of an.   
2d880 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2d890 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2d8a0 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20   BY clause. ^An 
2d8b0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2d8c0 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52  without a.    GR
2d8d0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c  OUP BY clause al
2d8e0 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61  ways returns exa
2d8f0 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20  ctly one row of 
2d900 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68  data, even if th
2d910 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f  ere are.    zero
2d920 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64   rows of input d
2d930 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ata...  <li><p>^
2d940 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  (If the SELECT s
2d950 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2d960 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2d970 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20  y with a GROUP. 
2d980 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
2d990 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74  , then each of t
2d9a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  he expressions s
2d9b0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
2d9c0 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55   of the.    GROU
2d9d0 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65  P BY clause is e
2d9e0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
2d9f0 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74  h row of the dat
2da00 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20  aset. Each row. 
2da10 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67     is then assig
2da20 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22  ned to a "group"
2da30 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
2da40 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20  sults; rows for 
2da50 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65  which.    the re
2da60 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
2da70 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59  ing the GROUP BY
2da80 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
2da90 20 74 68 65 20 73 61 6d 65 20 67 65 74 0a 20 20   the same get.  
2daa0 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68    assigned to th
2dab0 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20  e same group.)^ 
2dac0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2dad0 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f  s of grouping ro
2dae0 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61  ws, NULL .    va
2daf0 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
2db00 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20  red equal. ^The 
2db10 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  usual rules for 
2db20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63  [collation|selec
2db30 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61  ting a.    colla
2db40 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77  tion sequence] w
2db50 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d  ith which to com
2db60 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73  pare text values
2db70 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c   apply when eval
2db80 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65  uating.    expre
2db90 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55  ssions in a GROU
2dba0 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54  P BY clause.  ^T
2dbb0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
2dbc0 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n the GROUP BY c
2dbd0 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d  lause.    do <em
2dbe0 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74  >not</em> have t
2dbf0 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73  o be expressions
2dc00 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
2dc10 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65  the result. ^The
2dc20 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73  .    expressions
2dc30 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63   in a GROUP BY c
2dc40 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65  lause may not be
2dc50 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
2dc60 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e  ssions...    <p>
2dc70 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c  ^(If a HAVING cl
2dc80 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
2dc90 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  d, it is evaluat
2dca0 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
2dcb0 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72   group .    of r
2dcc0 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  ows as a [boolea
2dcd0 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  n expression]. I
2dce0 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
2dcf0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20  evaluating the. 
2dd00 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65     HAVING clause
2dd10 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67   is false, the g
2dd20 72 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65  roup is discarde
2dd30 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56  d.)^ ^If the HAV
2dd40 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20  ING clause is.  
2dd50 20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65    an aggregate e
2dd60 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2dd70 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73   evaluated acros
2dd80 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  s all rows in th
2dd90 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20  e group. ^If.   
2dda0 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
2ddb0 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67   is a non-aggreg
2ddc0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2ddd0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
2dde0 77 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20  with respect.   
2ddf0 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69   to an arbitrari
2de00 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
2de10 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20  from the group. 
2de20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70   ^The HAVING exp
2de30 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20  ression may.    
2de40 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c  refer to values,
2de50 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20   even aggregate 
2de60 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20  functions, that 
2de70 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
2de80 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20  esult.</p>..    
2de90 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73  <p>^Each express
2dea0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2deb0 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76  t-set is then ev
2dec0 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
2ded0 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20   each.    group 
2dee0 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65  of rows. ^If the
2def0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2df00 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
2df10 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20  ession, it is . 
2df20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72     evaluated acr
2df30 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
2df40 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65  the group. ^Othe
2df50 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61  rwise, it is eva
2df60 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20  luated against. 
2df70 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69     a single arbi
2df80 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72  trarily chosen r
2df90 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ow from within t
2dfa0 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68  he group. ^If th
2dfb0 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20  ere is more.    
2dfc0 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67  than one non-agg
2dfd0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2dfe0 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
2dff0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75  set, then all su
2e000 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ch.    expressio
2e010 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
2e020 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f   for the same ro
2e030 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  w...    <p>^Each
2e040 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20   group of input 
2e050 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e  dataset rows con
2e060 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c  tributes a singl
2e070 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20  e row to the .  
2e080 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20    set of result 
2e090 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74  rows. ^Subject t
2e0a0 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f  o filtering asso
2e0b0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
2e0c0 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79  DISTINCT.    key
2e0d0 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  word, the number
2e0e0 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2e0f0 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74  d by an aggregat
2e100 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
2e110 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75  ROUP.    BY clau
2e120 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  se is the same a
2e130 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2e140 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70  groups of rows p
2e150 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79  roduced by apply
2e160 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55  ing.    the GROU
2e170 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20  P BY and HAVING 
2e180 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66  clauses to the f
2e190 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61  iltered input da
2e1a0 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74  taset..</ul>..<t
2e1b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
2e1c0 61 72 65 61 67 67 20 7b 62 61 72 65 20 61 67 67  areagg {bare agg
2e1d0 72 65 67 61 74 65 20 74 65 72 6d 73 7d 3c 2f 74  regate terms}</t
2e1e0 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e  cl>.<p><b>Side n
2e1f0 6f 74 65 3a 20 42 61 72 65 20 63 6f 6c 75 6d 6e  ote: Bare column
2e200 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  s in an aggregat
2e210 65 20 71 75 65 72 69 65 73 2e 3c 2f 62 3e 0a 54  e queries.</b>.T
2e220 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 69 73  he usual case is
2e230 20 74 68 61 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e   that all column
2e240 20 6e 61 6d 65 73 20 69 6e 20 61 6e 20 61 67 67   names in an agg
2e250 72 65 67 61 74 65 20 71 75 65 72 79 20 61 72 65  regate query are
2e260 20 65 69 74 68 65 72 0a 61 72 67 75 6d 65 6e 74   either.argument
2e270 73 20 74 6f 20 5b 61 67 67 66 75 6e 63 7c 61 67  s to [aggfunc|ag
2e280 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2e290 73 5d 20 6f 72 20 65 6c 73 65 20 61 70 70 65 61  s] or else appea
2e2a0 72 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42  r in the GROUP B
2e2b0 59 20 63 6c 61 75 73 65 2e 0a 41 20 72 65 73 75  Y clause..A resu
2e2c0 6c 74 20 63 6f 6c 75 6d 6e 20 77 68 69 63 68 20  lt column which 
2e2d0 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6c 75 6d  contains a colum
2e2e0 6e 20 6e 61 6d 65 20 74 68 61 74 20 69 73 20 6e  n name that is n
2e2f0 6f 74 20 77 69 74 68 69 6e 20 61 6e 0a 61 67 67  ot within an.agg
2e300 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
2e310 61 6e 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  and that does no
2e320 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
2e330 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2e340 28 69 66 0a 6f 6e 65 20 65 78 69 73 74 73 29 20  (if.one exists) 
2e350 69 73 20 63 61 6c 6c 65 64 20 61 20 22 62 61 72  is called a "bar
2e360 65 22 20 63 6f 6c 75 6d 6e 2e 0a 45 78 61 6d 70  e" column..Examp
2e370 6c 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  le:.<blockquote>
2e380 3c 70 72 65 3e 0a 53 45 4c 45 43 54 20 61 2c 20  <pre>.SELECT a, 
2e390 62 2c 20 73 75 6d 28 63 29 20 46 52 4f 4d 20 74  b, sum(c) FROM t
2e3a0 61 62 31 20 47 52 4f 55 50 20 42 59 20 61 3b 0a  ab1 GROUP BY a;.
2e3b0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
2e3c0 74 65 3e 0a 3c 70 3e 49 6e 20 74 68 65 20 71 75  te>.<p>In the qu
2e3d0 65 72 79 20 61 62 6f 76 65 2c 20 74 68 65 20 22  ery above, the "
2e3e0 61 22 20 63 6f 6c 75 6d 6e 20 69 73 20 70 61 72  a" column is par
2e3f0 74 20 6f 66 20 74 68 65 20 47 52 4f 55 50 20 42  t of the GROUP B
2e400 59 20 63 6c 61 75 73 65 0a 61 6e 64 20 73 6f 20  Y clause.and so 
2e410 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2e420 6f 75 74 70 75 74 20 63 6f 6e 74 61 69 6e 73 20  output contains 
2e430 6f 6e 65 20 6f 66 20 74 68 65 20 64 69 73 74 69  one of the disti
2e440 6e 63 74 20 76 61 6c 75 65 73 20 66 6f 72 0a 22  nct values for."
2e450 61 22 2e 20 20 54 68 65 20 22 63 22 20 63 6f 6c  a".  The "c" col
2e460 75 6d 6e 20 69 73 20 63 6f 6e 74 61 69 6e 65 64  umn is contained
2e470 20 77 69 74 68 69 6e 20 74 68 65 20 5b 73 75 6d   within the [sum
2e480 28 29 5d 20 61 67 67 72 65 67 61 74 65 20 66 75  ()] aggregate fu
2e490 6e 63 74 69 6f 6e 0a 61 6e 64 20 73 6f 20 74 68  nction.and so th
2e4a0 61 74 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  at output column
2e4b0 20 69 73 20 74 68 65 20 73 75 6d 20 6f 66 20 61   is the sum of a
2e4c0 6c 6c 20 22 63 22 20 76 61 6c 75 65 73 20 69 6e  ll "c" values in
2e4d0 20 72 6f 77 73 20 74 68 61 74 0a 68 61 76 65 20   rows that.have 
2e4e0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
2e4f0 6f 72 20 22 61 22 2e 20 20 42 75 74 20 77 68 61  or "a".  But wha
2e500 74 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20  t is the result 
2e510 6f 66 20 74 68 65 20 62 61 72 65 20 0a 63 6f 6c  of the bare .col
2e520 75 6d 6e 20 22 62 22 3f 20 54 68 65 20 61 6e 73  umn "b"? The ans
2e530 77 65 72 20 69 73 20 74 68 61 74 20 74 68 65 20  wer is that the 
2e540 22 62 22 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  "b" result will 
2e550 62 65 20 74 68 65 0a 76 61 6c 75 65 20 66 6f 72  be the.value for
2e560 20 22 62 22 20 69 6e 20 6f 6e 65 20 6f 66 20 74   "b" in one of t
2e570 68 65 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68  he input rows th
2e580 61 74 20 66 6f 72 6d 20 74 68 65 20 61 67 67 72  at form the aggr
2e590 65 67 61 74 65 2e 0a 54 68 65 20 70 72 6f 62 6c  egate..The probl
2e5a0 65 6d 20 69 73 20 74 68 61 74 20 79 6f 75 20 75  em is that you u
2e5b0 73 75 61 6c 6c 79 20 64 6f 20 6e 6f 74 20 6b 6e  sually do not kn
2e5c0 6f 77 20 77 68 69 63 68 20 69 6e 70 75 74 20 72  ow which input r
2e5d0 6f 77 20 69 73 20 75 73 65 64 0a 74 6f 20 63 6f  ow is used.to co
2e5e0 6d 70 75 74 65 20 22 62 22 2c 20 61 6e 64 20 73  mpute "b", and s
2e5f0 6f 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20  o in many cases 
2e600 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 22 62  the value for "b
2e610 22 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  " is undefined..
2e620 3c 2f 70 3e 0a 3c 70 3e 0a 53 70 65 63 69 61 6c  </p>.<p>.Special
2e630 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 63 63 75   processing occu
2e640 72 73 20 6f 63 63 75 72 73 20 77 68 65 6e 20 74  rs occurs when t
2e650 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
2e660 63 74 69 6f 6e 20 69 73 20 0a 65 69 74 68 65 72  ction is .either
2e670 20 5b 6d 61 78 41 67 67 46 75 6e 63 7c 6d 69 6e   [maxAggFunc|min
2e680 28 29 5d 20 6f 72 20 5b 6d 69 6e 41 67 67 46 75  ()] or [minAggFu
2e690 6e 63 7c 6d 61 78 28 29 5d 2e 20 20 45 78 61 6d  nc|max()].  Exam
2e6a0 70 6c 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ple:.<blockquote
2e6b0 3e 3c 70 72 65 3e 0a 53 45 4c 45 43 54 20 61 2c  ><pre>.SELECT a,
2e6c0 20 62 2c 20 6d 61 78 28 63 29 20 46 52 4f 4d 20   b, max(c) FROM 
2e6d0 74 61 62 31 20 47 52 4f 55 50 20 42 59 20 61 3b  tab1 GROUP BY a;
2e6e0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
2e6f0 6f 74 65 3e 0a 57 68 65 6e 20 74 68 65 20 5b 6d  ote>.When the [m
2e700 61 78 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d  axAggFunc|min()]
2e710 20 6f 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c   or [minAggFunc|
2e720 6d 61 78 28 29 5d 20 61 67 67 72 65 67 61 74 65  max()] aggregate
2e730 20 66 75 6e 63 74 69 6f 6e 73 20 0a 61 72 65 20   functions .are 
2e740 75 73 65 64 20 69 6e 20 61 6e 20 61 67 67 72 65  used in an aggre
2e750 67 61 74 65 20 71 75 65 72 79 2c 20 61 6c 6c 20  gate query, all 
2e760 62 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  bare columns in 
2e770 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 0a  the result set .
2e780 74 61 6b 65 20 76 61 6c 75 65 73 20 66 72 6f 6d  take values from
2e790 20 74 68 65 20 69 6e 70 75 74 0a 72 6f 77 20 77   the input.row w
2e7a0 68 69 63 68 20 61 6c 73 6f 20 63 6f 6e 74 61 69  hich also contai
2e7b0 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ns the minimum o
2e7c0 72 20 6d 61 78 69 6d 75 6d 2e 20 20 53 6f 20 69  r maximum.  So i
2e7d0 6e 20 74 68 65 20 71 75 65 72 79 0a 61 62 6f 76  n the query.abov
2e7e0 65 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  e, the value of 
2e7f0 74 68 65 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69  the "b" column i
2e800 6e 20 74 68 65 20 6f 75 74 70 75 74 20 77 69 6c  n the output wil
2e810 6c 20 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f  l be the value o
2e820 66 0a 74 68 65 20 22 62 22 20 63 6f 6c 75 6d 6e  f.the "b" column
2e830 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 72 6f   in the input ro
2e840 77 20 74 68 61 74 20 68 61 73 20 74 68 65 20 6c  w that has the l
2e850 61 72 67 65 73 74 20 22 63 22 20 76 61 6c 75 65  argest "c" value
2e860 2e 0a 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c  ..There is still
2e870 20 61 6e 20 61 6d 62 69 67 75 69 74 79 20 69 66   an ambiguity if
2e880 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20   two or more of 
2e890 74 68 65 20 69 6e 70 75 74 20 72 6f 77 73 20 68  the input rows h
2e8a0 61 76 65 20 74 68 65 0a 73 61 6d 65 20 6d 69 6e  ave the.same min
2e8b0 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75 6d 20  imum or maximum 
2e8c0 76 61 6c 75 65 20 6f 72 20 69 66 20 74 68 65 20  value or if the 
2e8d0 71 75 65 72 79 20 63 6f 6e 74 61 69 6e 73 20 6d  query contains m
2e8e0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 0a 6d 69 6e  ore than one.min
2e8f0 28 29 20 61 6e 64 2f 6f 72 20 6d 61 78 28 29 20  () and/or max() 
2e900 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
2e910 6f 6e 2e 20 4f 6e 6c 79 20 74 68 65 20 62 75 69  on. Only the bui
2e920 6c 74 2d 69 6e 20 5b 6d 69 6e 41 67 67 46 75 6e  lt-in [minAggFun
2e930 63 7c 6d 69 6e 28 29 5d 20 0a 61 6e 64 20 5b 6d  c|min()] .and [m
2e940 61 78 41 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d  axAggFunc|max()]
2e950 20 66 75 6e 63 74 69 6f 6e 73 20 77 6f 72 6b 20   functions work 
2e960 74 68 69 73 20 77 61 79 2e 0a 3c 2f 70 3e 0a 0a  this way..</p>..
2e970 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c  <p><b>4. Removal
2e980 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f   of duplicate ro
2e990 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f  ws (DISTINCT pro
2e9a0 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
2e9b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64  cl>hd_fragment d
2e9c0 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74  istinct</tcl>.<t
2e9d0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
2e9e0 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a  DISTINCT}</tcl>.
2e9f0 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20  .<p>^One of the 
2ea00 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20  ALL or DISTINCT 
2ea10 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c  keywords may fol
2ea20 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b  low the SELECT k
2ea30 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d  eyword in a .sim
2ea40 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2ea50 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69  ment. ^If the si
2ea60 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2ea70 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65   SELECT ALL, the
2ea80 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74  n the.entire set
2ea90 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
2eaa0 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  are returned by 
2eab0 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20  the SELECT. ^If 
2eac0 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44  neither ALL or.D
2ead0 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73  ISTINCT are pres
2eae0 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ent, then the be
2eaf0 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66 20  havior is as if 
2eb00 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69  ALL were specifi
2eb10 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d  ed. .^If the sim
2eb20 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
2eb30 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c  SELECT DISTINCT,
2eb40 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20   then duplicate 
2eb50 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
2eb60 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66  .from the set of
2eb70 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66   result rows bef
2eb80 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e  ore it is return
2eb90 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ed. ^For the pur
2eba0 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69  poses of.detecti
2ebb0 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  ng duplicate row
2ebc0 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75  s, two NULL valu
2ebd0 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
2ebe0 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e  d to be equal. ^
2ebf0 54 68 65 0a 5b 68 6f 77 20 63 6f 6c 6c 61 74 69  The.[how collati
2ec00 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  on is determined
2ec10 7c 75 73 75 61 6c 20 72 75 6c 65 73 5d 20 61 70  |usual rules] ap
2ec20 70 6c 79 20 66 6f 72 20 73 65 6c 65 63 74 69 6e  ply for selectin
2ec30 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 0a 73 65  g a collation.se
2ec40 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72  quence to compar
2ec50 65 20 74 65 78 74 20 76 61 6c 75 65 73 2e 0a 0a  e text values...
2ec60 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e  <tcl>.hd_fragmen
2ec70 74 20 63 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70  t compound {comp
2ec80 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f  ound select} {co
2ec90 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 20 7b 63  mpound query} {c
2eca0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20  ompound SELECT} 
2ecb0 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  {compound SELECT
2ecc0 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f  s}.</tcl>.<h3>Co
2ecd0 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74 20 53 74  mpound Select St
2ece0 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c  atements</h3>..<
2ecf0 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73  p>Two or more [s
2ed00 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 73 74  imple SELECT] st
2ed10 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65 20  atements may be 
2ed20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65 74 68  connected togeth
2ed30 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d  er to form.a com
2ed40 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75 73 69  pound SELECT usi
2ed50 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e  ng the UNION, UN
2ed60 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45  ION ALL, INTERSE
2ed70 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f 70 65  CT or EXCEPT ope
2ed80 72 61 74 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20  rator,.as shown 
2ed90 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
2eda0 20 64 69 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e   diagram:..<tcl>
2edb0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
2edc0 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64  Diagram compound
2edd0 2d 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74  -select-stmt.</t
2ede0 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f  cl>..<p>^In a co
2edf0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
2ee00 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
2ee10 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
2ee20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65 20  return the same 
2ee30 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c  .number of resul
2ee40 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74  t columns. ^As t
2ee50 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66  he components of
2ee60 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
2ee70 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c  CT must.be simpl
2ee80 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2ee90 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f  nts, they may no
2eea0 74 20 63 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52  t contain [ORDER
2eeb0 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20   BY] or [LIMIT] 
2eec0 63 6c 61 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52  clauses..^[ORDER
2eed0 20 42 59 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d   BY] and [LIMIT]
2eee0 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c   clauses may onl
2eef0 79 20 6f 63 63 75 72 20 61 74 20 74 68 65 20 65  y occur at the e
2ef00 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69 72 65  nd of the entire
2ef10 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
2ef20 2c 20 61 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20  , and then only 
2ef30 69 66 20 74 68 65 20 66 69 6e 61 6c 20 65 6c 65  if the final ele
2ef40 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  ment of the comp
2ef50 6f 75 6e 64 20 69 73 20 6e 6f 74 20 61 20 5b 56  ound is not a [V
2ef60 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a  ALUES] clause...
2ef70 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53  <p>^A compound S
2ef80 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75 73  ELECT created us
2ef90 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70  ing UNION ALL op
2efa0 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 61  erator returns a
2efb0 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
2efc0 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
2efd0 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 55  he left of the U
2efe0 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
2eff0 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 72  r, and all the r
2f000 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
2f010 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74  ECT to the right
2f020 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e 49   of it. ^The UNI
2f030 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b  ON operator work
2f040 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  s the same way a
2f050 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63  s.UNION ALL, exc
2f060 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63 61  ept that duplica
2f070 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te rows are remo
2f080 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  ved from the fin
2f090 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e  al result set..^
2f0a0 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70  The INTERSECT op
2f0b0 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74  erator returns t
2f0c0 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20  he intersection 
2f0d0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
2f0e0 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72  f the left and.r
2f0f0 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20 5e  ight SELECTs.  ^
2f100 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72 61  The EXCEPT opera
2f110 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
2f120 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20 72  subset of rows r
2f130 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 6c  eturned by the.l
2f140 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74 20  eft SELECT that 
2f150 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74  are not also ret
2f160 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69 67  urned by the rig
2f170 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e 20  ht-hand SELECT. 
2f180 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73 20  ^Duplicate.rows 
2f190 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
2f1a0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2f1b0 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45 58  INTERSECT and EX
2f1c0 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20 62  CEPT operators b
2f1d0 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c 74  efore the.result
2f1e0 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65 64   set is returned
2f1f0 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70  ...<p>^For the p
2f200 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
2f210 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74 65  mining duplicate
2f220 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72 65   rows for the re
2f230 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e  sults of compoun
2f240 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  d.SELECT operato
2f250 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  rs, NULL values 
2f260 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65  are considered e
2f270 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55  qual to other NU
2f280 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64 69  LL values and.di
2f290 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20  stinct from all 
2f2a0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  non-NULL values.
2f2b0 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20   ^The collation 
2f2c0 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f  sequence used to
2f2d0 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74 65   compare .two te
2f2e0 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65 74  xt values is det
2f2f0 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74 68  ermined as if th
2f300 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
2f310 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
2f320 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61 74  hand.SELECT stat
2f330 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65 20  ements were the 
2f340 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2f350 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20  and operands of 
2f360 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f  the equals (=).o
2f370 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74 20  perator, except 
2f380 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72 65  that greater pre
2f390 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20 61  cedence is not a
2f3a0 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c  ssigned to a col
2f3b0 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65  lation .sequence
2f3c0 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20   specified with 
2f3d0 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c  the postfix COLL
2f3e0 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e  ATE operator. ^N
2f3f0 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e 73  o affinity.trans
2f400 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20 61  formations are a
2f410 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76 61  pplied to any va
2f420 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61 72  lues when compar
2f430 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72 74  ing rows as part
2f440 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53   of a.compound S
2f450 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68  ELECT. ..<p>^(Wh
2f460 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  en three or more
2f470 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20   simple SELECTs 
2f480 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  are connected in
2f490 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  to a compound SE
2f4a0 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75 70  LECT,.they group
2f4b0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
2f4c0 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f  ght. In other wo
2f4d0 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42 22  rds, if "A", "B"
2f4e0 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c 6c   and "C" are all
2f4f0 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
2f500 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70  tatements, (A op
2f510 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f 63   B op C) is proc
2f520 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70 20  essed as ((A op 
2f530 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70  B) op C).)^..</p
2f540 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2f550 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72 64  ent orderby {ord
2f560 65 72 20 62 79 7d 20 7b 4f 52 44 45 52 20 42 59  er by} {ORDER BY
2f570 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
2f580 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 3c  ORDER BY clause<
2f590 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45  /h3>..<p>If a SE
2f5a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
2f5b0 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f 72 65  hat returns more
2f5c0 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f   than one row do
2f5d0 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f  es not have an.O
2f5e0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
2f5f0 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
2f600 63 68 20 74 68 65 20 72 6f 77 73 20 61 72 65 20  ch the rows are 
2f610 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
2f620 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20  fined..Or, if a 
2f630 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2f640 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20 4f 52   does have an OR
2f650 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
2f660 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  hen the list of.
2f670 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74 74 61  expressions atta
2f680 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52 44 45  ched to the ORDE
2f690 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65 20 74  R BY determine t
2f6a0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
2f6b0 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74 75 72  h rows.are retur
2f6c0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
2f6d0 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 20 5b 63 6f 6d  ..<p>.^In a [com
2f6e0 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 73 74  pound SELECT] st
2f6f0 61 74 65 6d 65 6e 74 2c 20 6f 6e 6c 79 20 74 68  atement, only th
2f700 65 20 6c 61 73 74 20 6f 72 20 72 69 67 68 74 2d  e last or right-
2f710 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c  most [simple SEL
2f720 45 43 54 5d 0a 6d 61 79 20 68 61 76 65 20 61 6e  ECT].may have an
2f730 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2f740 2e 20 5e 54 68 61 74 20 4f 52 44 45 52 20 42 59  . ^That ORDER BY
2f750 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 61 70 70   clause will app
2f760 6c 79 20 61 63 72 6f 73 73 20 61 6c 6c 20 65 6c  ly across all el
2f770 65 6d 65 6e 74 73 20 6f 66 0a 74 68 65 20 63 6f  ements of.the co
2f780 6d 70 6f 75 6e 64 2e 20 5e 49 66 20 74 68 65 20  mpound. ^If the 
2f790 72 69 67 68 74 2d 6d 6f 73 74 20 65 6c 65 6d 65  right-most eleme
2f7a0 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
2f7b0 64 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20 5b  d SELECT] is a [
2f7c0 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2c 0a  VALUES] clause,.
2f7d0 74 68 65 6e 20 6e 6f 20 4f 52 44 45 52 20 42 59  then no ORDER BY
2f7e0 20 63 6c 61 75 73 65 20 69 73 20 61 6c 6c 6f 77   clause is allow
2f7f0 65 64 20 6f 6e 20 74 68 61 74 20 73 74 61 74 65  ed on that state
2f800 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f 77 73  ment....<p>^Rows
2f810 20 61 72 65 20 66 69 72 73 74 20 73 6f 72 74 65   are first sorte
2f820 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72  d based on the r
2f830 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c 75 61  esults of.evalua
2f840 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
2f850 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  st expression in
2f860 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 6c 69   the ORDER BY li
2f870 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20 61 72  st, then ties ar
2f880 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76 61 6c  e broken.by eval
2f890 75 61 74 69 6e 67 20 74 68 65 20 73 65 63 6f 6e  uating the secon
2f8a0 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  d left-most expr
2f8b0 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e  ession and so on
2f8c0 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77  . The order in w
2f8d0 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20 66 6f  hich.two rows fo
2f8e0 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52 44 45  r which all ORDE
2f8f0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73  R BY expressions
2f900 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65 71 75   evaluate to equ
2f910 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a 72 65  al values are.re
2f920 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69  turned is undefi
2f930 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44 45 52  ned. ^Each ORDER
2f940 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 6d   BY expression m
2f950 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
2f960 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e 65   followed.by one
2f970 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73   of the keywords
2f980 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20 76 61   ASC (smaller va
2f990 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e 65  lues are returne
2f9a0 64 20 66 69 72 73 74 29 20 6f 72 20 44 45 53 43  d first) or DESC
2f9b0 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65 73 20   (larger.values 
2f9c0 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72  are returned fir
2f9d0 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68 65 72  st). ^If neither
2f9e0 20 41 53 43 20 6f 72 20 44 45 53 43 20 61 72 65   ASC or DESC are
2f9f0 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f 77 73   specified, rows
2fa00 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e 20 61  .are sorted in a
2fa10 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c 6c 65  scending (smalle
2fa20 72 20 76 61 6c 75 65 73 20 66 69 72 73 74 29 20  r values first) 
2fa30 6f 72 64 65 72 20 62 79 20 64 65 66 61 75 6c 74  order by default
2fa40 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44 45 52  ...<p>Each ORDER
2fa50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2fa60 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20 66  s processed as f
2fa70 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
2fa80 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  >.<li><p>^If the
2fa90 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2faa0 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  sion is a consta
2fab0 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68 65  nt integer K the
2fac0 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69 6f 6e  n the.expression
2fad0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 61   is considered a
2fae0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
2faf0 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  K-th column of t
2fb00 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 28 63  he result set.(c
2fb10 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d 62 65  olumns are numbe
2fb20 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  red from left to
2fb30 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67 20   right starting 
2fb40 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70  with 1)...<li><p
2fb50 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2fb60 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2fb70 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  an identifier th
2fb80 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
2fb90 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66 20 6f  o.the alias of o
2fba0 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  ne of the output
2fbb0 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74   columns, then t
2fbc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
2fbd0 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e 20 61   considered.an a
2fbe0 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20 63 6f  lias for that co
2fbf0 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f  lumn...<li><p>^O
2fc00 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
2fc10 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2fc20 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74 68 65  sion is any othe
2fc30 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  r expression, it
2fc40 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64 20 61   .is evaluated a
2fc50 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  nd the returned 
2fc60 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 6f 72  value used to or
2fc70 64 65 72 20 74 68 65 20 6f 75 74 70 75 74 20 72  der the output r
2fc80 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c  ows. ^If.the SEL
2fc90 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2fca0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2fcb0 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45 52 20  , then an ORDER 
2fcc0 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61  BY may contain a
2fcd0 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65 78 70  ny.arbitrary exp
2fce0 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77 65 76  ressions. ^Howev
2fcf0 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  er, if the SELEC
2fd00 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20  T is a compound 
2fd10 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f 52 44  SELECT, then.ORD
2fd20 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2fd30 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  s that are not a
2fd40 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70 75 74  liases to output
2fd50 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 62 65   columns must be
2fd60 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73 61 6d   exactly.the sam
2fd70 65 20 61 73 20 61 6e 20 65 78 70 72 65 73 73 69  e as an expressi
2fd80 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20 6f 75  on used as an ou
2fd90 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f  tput column..</o
2fda0 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20  l>..<p>^For the 
2fdb0 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f 72 74  purposes of sort
2fdc0 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75 65 73  ing rows, values
2fdd0 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e   are compared in
2fde0 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 61 73   the same way.as
2fdf0 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73 6f 6e   for [comparison
2fe00 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e 20 54   expressions]. T
2fe10 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
2fe20 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
2fe30 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74 20 76  mpare.two text v
2fe40 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69  alues is determi
2fe50 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ned as follows:.
2fe60 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ol>.  <li><p>^
2fe70 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
2fe80 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 73  expression is as
2fe90 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69  signed a collati
2fea0 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e  on sequence usin
2feb0 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69 78 20  g.  the postfix 
2fec0 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
2fed0 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73 70 65  r], then the spe
2fee0 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  cified collation
2fef0 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20 20 75   sequence is.  u
2ff00 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  sed..  <li><p>^O
2ff10 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
2ff20 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2ff30 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69 61 73  sion is an alias
2ff40 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
2ff50 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62 65 65  n.  that has bee
2ff60 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c  n assigned a col
2ff70 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2ff80 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66 69  using the postfi
2ff90 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20 6f 70  x .  [COLLATE op
2ffa0 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68  erator], then th
2ffb0 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
2ffc0 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20 74 6f  ence assigned to
2ffd0 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20 20 65   the aliased.  e
2ffe0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
2fff0 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68  d..  <li><p>^Oth
30000 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f  erwise, if the O
30010 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
30020 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20 6f  on is a column o
30030 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a 20 20  r an alias of.  
30040 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
30050 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c 20  at is a column, 
30060 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
30070 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
30080 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20 63 6f  nce for.  the co
30090 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20 0a 20  lumn is used. . 
300a0 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
300b0 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52 59 5d  se, the [BINARY]
300c0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
300d0 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c 2f 6f  nce is used..</o
300e0 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d  l>..<p>In a [com
300f0 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 73 74  pound SELECT] st
30100 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44  atement, all ORD
30110 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
30120 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61 73  s are handled.as
30130 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e 65   aliases for one
30140 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
30150 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f  olumns of the co
30160 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66 20 61 6e 20  mpound..^(If an 
30170 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
30180 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e  ion is not an in
30190 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65  teger alias, the
301a0 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65  n SQLite searche
301b0 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  s.the left-most 
301c0 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f  SELECT in the co
301d0 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73  mpound for a res
301e0 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  ult column that 
301f0 6d 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74  matches either.t
30200 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69  he second or thi
30210 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20  rd rules above. 
30220 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  If a match is fo
30230 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20  und, the search 
30240 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78  stops and.the ex
30250 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64  pression is hand
30260 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20  led as an alias 
30270 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63  for the result c
30280 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61  olumn that it ha
30290 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61  s been.matched a
302a0 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73  gainst. Otherwis
302b0 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45  e, the next SELE
302c0 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  CT to the right 
302d0 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f  is tried, and so
302e0 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61   on.)^.^If no ma
302f0 74 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f  tching expressio
30300 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69  n can be found i
30310 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  n the result col
30320 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73  umns of any.cons
30330 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20  tituent SELECT, 
30340 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20  it is an error. 
30350 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68  ^Each term of th
30360 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
30370 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73  e is.processed s
30380 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61  eparately and ma
30390 79 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61  y be matched aga
303a0 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75  inst result colu
303b0 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65  mns from differe
303c0 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nt.SELECT statem
303d0 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70  ents in the comp
303e0 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ound.</p>..<tcl>
303f0 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6d 69  hd_fragment limi
30400 74 6f 66 66 73 65 74 20 7b 4c 49 4d 49 54 7d 20  toffset {LIMIT} 
30410 7b 4f 46 46 53 45 54 7d 3c 2f 74 63 6c 3e 0a 3c  {OFFSET}</tcl>.<
30420 68 33 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  h3>The LIMIT cla
30430 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  use</h3>..<p>^Th
30440 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69  e LIMIT clause i
30450 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20  s used to place 
30460 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
30470 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
30480 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79  rows.returned by
30490 20 74 68 65 20 65 6e 74 69 72 65 20 53 45 4c 45   the entire SELE
304a0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  CT statement...<
304b0 70 3e 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e  p>^In a [compoun
304c0 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c 79 20  d SELECT], only 
304d0 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69 67 68  the.last or righ
304e0 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
304f0 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e 74 61  ELECT] may conta
30500 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  in a LIMIT claus
30510 65 2e 20 20 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70  e.  .^In a [comp
30520 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 0a 74  ound SELECT], .t
30530 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
30540 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65 20 65  applies to the e
30550 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 2c 20  ntire compound, 
30560 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66 69 6e  not just the fin
30570 61 6c 20 53 45 4c 45 43 54 2e 0a 5e 49 66 20 74  al SELECT..^If t
30580 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  he right-most [s
30590 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 69 73  imple SELECT] is
305a0 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61 75 73   a [VALUES claus
305b0 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d 49 54  e] then no LIMIT
305c0 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c 6f 77   clause.is allow
305d0 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63 61  ed...<p>^Any sca
305e0 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  lar expression m
305f0 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
30600 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  e .LIMIT clause,
30610 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74 20 65   so long as it e
30620 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e 20 69  valuates to an i
30630 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61 6c 75  nteger or a valu
30640 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f  e that can be.lo
30650 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
30660 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
30670 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72 65 73  . ^If the expres
30680 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
30690 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20  o a NULL .value 
306a0 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c  or any other val
306b0 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
306c0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
306d0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
306e0 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69  eger, an.error i
306f0 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  s returned. ^If 
30700 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
30710 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
30720 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c  o a negative val
30730 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65 20 69  ue,.then there i
30740 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64  s no upper bound
30750 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
30760 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2e  f rows returned.
30770 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
30780 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e 73 20  .SELECT returns 
30790 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73  the first N rows
307a0 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
307b0 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e  et only, where N
307c0 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a 74 68   is the value.th
307d0 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  at the LIMIT exp
307e0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
307f0 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68  s to. ^Or, if th
30800 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
30810 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20  nt would.return 
30820 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f 77 73  less than N rows
30830 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d 49 54   without a LIMIT
30840 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
30850 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c 74 20  e entire result 
30860 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65 64 2e  set is.returned.
30870 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70 72 65   ..<p>^The expre
30880 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64 20 74  ssion attached t
30890 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f  o the optional O
308a0 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 61  FFSET clause tha
308b0 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c  t may follow a.L
308c0 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75 73 74  IMIT clause must
308d0 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65 20 74   also evaluate t
308e0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72  o an integer, or
308f0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61   a value that ca
30900 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20  n be.losslessly 
30910 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
30920 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61 6e 20  integer. ^If an 
30930 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 61  expression has a
30940 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
30950 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20  .then the first 
30960 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69 74 74  M rows are omitt
30970 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
30980 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65 64 20  lt set returned 
30990 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a 73 74  by the SELECT.st
309a0 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20  atement and the 
309b0 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72 65 20  next N rows are 
309c0 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72 65 20  returned, where 
309d0 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68 65 20  M and N are the 
309e0 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68 65 20  values that.the 
309f0 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d 49 54  OFFSET and LIMIT
30a00 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75 61 74   clauses evaluat
30a10 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69 76 65  e to, respective
30a20 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  ly. ^Or, if the 
30a30 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72 65 74  SELECT.would ret
30a40 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b  urn less than M+
30a50 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64 69 64  N rows if it did
30a60 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49 4d 49   not have a LIMI
30a70 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  T clause, then t
30a80 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77 73 20  he.first M rows 
30a90 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20  are skipped and 
30aa0 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f  the remaining ro
30ab0 77 73 20 28 69 66 20 61 6e 79 29 20 61 72 65 20  ws (if any) are 
30ac0 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68  returned. ^If th
30ad0 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e.OFFSET clause 
30ae0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
30af0 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74  egative value, t
30b00 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 74  he results are t
30b10 68 65 20 73 61 6d 65 20 61 73 20 69 66 20 69 74  he same as if it
30b20 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64 20 74  .had evaluated t
30b30 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73  o zero...<p>^Ins
30b40 74 65 61 64 20 6f 66 20 61 20 73 65 70 61 72 61  tead of a separa
30b50 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  te OFFSET clause
30b60 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  , the LIMIT clau
30b70 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 20 74  se may specify t
30b80 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  wo.scalar expres
30b90 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65 64 20  sions separated 
30ba0 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20  by a comma. ^In 
30bb0 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 66  this case, the f
30bc0 69 72 73 74 20 65 78 70 72 65 73 73 69 6f 6e 0a  irst expression.
30bd0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 4f  is used as the O
30be0 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
30bf0 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20   and the second 
30c00 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  as the LIMIT exp
30c10 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73  ression..This is
30c20 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69 74 69   counter-intuiti
30c30 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73 69 6e  ve, as when usin
30c40 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61  g the OFFSET cla
30c50 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64 20 6f  use the second o
30c60 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72 65 73  f.the two expres
30c70 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f 46 46  sions is the OFF
30c80 53 45 54 20 61 6e 64 20 74 68 65 20 66 69 72 73  SET and the firs
30c90 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a 54 68  t the LIMIT. .Th
30ca0 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66 20 74  is reversal of t
30cb0 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20 6c 69  he offset and li
30cc0 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e  mit is intention
30cd0 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65  al.- it maximize
30ce0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
30cf0 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20 64  with other SQL d
30d00 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e  atabase systems.
30d10 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61 76 6f  .However, to avo
30d20 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 70 72  id confusion, pr
30d30 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 73 74  ogrammers are st
30d40 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61 67 65  rongly encourage
30d50 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66 6f 72  d to use.the for
30d60 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  m of the LIMIT c
30d70 6c 61 75 73 65 20 74 68 61 74 20 75 73 65 73 20  lause that uses 
30d80 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b 65 79  the "OFFSET" key
30d90 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64 0a 75  word and avoid.u
30da0 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63 6c 61  sing a LIMIT cla
30db0 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d 6d 61  use with a comma
30dc0 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66 73 65  -separated offse
30dd0 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
30de0 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56 41 4c  ment values {VAL
30df0 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41 4c 55  UES clause} VALU
30e00 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  ES</tcl>.<h3>The
30e10 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 3c 2f   VALUES clause</
30e20 68 33 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 68  h3>..<p>^(The ph
30e30 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c 69 3e  rase "VALUES(<i>
30e40 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20  expr-list</i>)" 
30e50 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 74  means the same t
30e60 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43 54 20  hing.as "SELECT 
30e70 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e  <i>expr-list</i>
30e80 22 2e 29 5e 20 20 5e 28 54 68 65 20 70 68 72 61  ".)^  ^(The phra
30e90 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65 78  se."VALUES(<i>ex
30ea0 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e  pr-list-1</i>),.
30eb0 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ..,(<i>expr-list
30ec0 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  -N</i>)" means t
30ed0 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20 61 73  he same.thing as
30ee0 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
30ef0 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f  -list-1</i> UNIO
30f00 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20  N ALL ... UNION 
30f10 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78  ALL.SELECT <i>ex
30f20 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 29  pr-list-N</i>".)
30f30 5e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20 61 72  ^  Both forms ar
30f40 65 20 74 68 65 20 73 61 6d 65 2c 20 65 78 63 65  e the same, exce
30f50 70 74 20 74 68 61 74 0a 74 68 65 20 6e 75 6d 62  pt that.the numb
30f60 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61  er of SELECT sta
30f70 74 65 6d 65 6e 74 73 20 69 6e 20 61 20 63 6f 6d  tements in a com
30f80 70 6f 75 6e 64 20 69 73 20 6c 69 6d 69 74 65 64  pound is limited
30f90 20 62 79 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49   by.[SQLITE_LIMI
30fa0 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  T_COMPOUND_SELEC
30fb0 54 5d 20 77 68 65 72 65 61 73 20 74 68 65 20 6e  T] whereas the n
30fc0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
30fd0 20 61 0a 56 41 4c 55 45 53 20 63 6c 61 75 73 65   a.VALUES clause
30fe0 20 68 61 73 20 6e 6f 20 61 72 62 69 74 72 61 72   has no arbitrar
30ff0 79 20 6c 69 6d 69 74 2e 0a 0a 3c 70 3e 54 68 65  y limit...<p>The
31000 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65 73 74  re are some rest
31010 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  rictions on the 
31020 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45 53 20  use of a VALUES 
31030 63 6c 61 75 73 65 20 74 68 61 74 20 61 72 65 0a  clause that are.
31040 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65  not shown on the
31050 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73   syntax diagrams
31060 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  :..<ul>.<li><p>.
31070 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  ^A VALUES clause
31080 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f   cannot be follo
31090 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42 59  wed by [ORDER BY
310a0 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56  ]...<li><p>.^A V
310b0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61 6e  ALUES clause can
310c0 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  not be followed 
310d0 62 79 20 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f 75 6c  by [LIMIT]..</ul
310e0 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54 48  >...<h3>The WITH
310f0 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   Clause</h3>..<p
31100 3e 5e 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  >^SELECT stateme
31110 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f  nts may be optio
31120 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62  nally preceded b
31130 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48  y a single.[WITH
31140 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20 64 65   clause] that de
31150 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  fines one or mor
31160 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  e [common table 
31170 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72  expressions].for
31180 20 75 73 65 20 77 69 74 68 69 6e 20 74 68 65 20   use within the 
31190 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
311a0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
311b0 65 6e 74 20 74 61 62 66 75 6e 63 31 20 7b 74 61  ent tabfunc1 {ta
311c0 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74  ble-valued funct
311d0 69 6f 6e 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ions in the FROM
311e0 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c   clause}</tcl>.<
311f0 68 33 3e 54 61 62 6c 65 2d 76 61 6c 75 65 64 20  h3>Table-valued 
31200 46 75 6e 63 74 69 6f 6e 73 20 49 6e 20 54 68 65  Functions In The
31210 20 46 52 4f 4d 20 43 6c 61 75 73 65 3c 2f 68 33   FROM Clause</h3
31220 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
31230 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 6f 6e   table] that con
31240 74 61 69 6e 73 20 5b 68 69 64 64 65 6e 20 63 6f  tains [hidden co
31250 6c 75 6d 6e 73 5d 20 63 61 6e 20 62 65 20 75 73  lumns] can be us
31260 65 64 20 6c 69 6b 65 0a 61 20 5b 74 61 62 6c 65  ed like.a [table
31270 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
31280 5d 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  ] in the FROM cl
31290 61 75 73 65 2e 20 20 54 68 65 20 61 72 67 75 6d  ause.  The argum
312a0 65 6e 74 73 20 74 6f 20 74 68 65 0a 74 61 62 6c  ents to the.tabl
312b0 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f  e-valued functio
312c0 6e 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 72 61  n become constra
312d0 69 6e 74 73 20 6f 6e 20 74 68 65 20 48 49 44 44  ints on the HIDD
312e0 45 4e 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  EN columns of.th
312f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
31300 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66    Additional inf
31310 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  ormation can be 
31320 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 5b 74 61  found in the.[ta
31330 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74  ble-valued funct
31340 69 6f 6e 73 7c 76 69 72 74 75 61 6c 20 74 61 62  ions|virtual tab
31350 6c 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  le documentation
31360 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ]...<tcl>.######
31370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
313a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
313b0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
313c0 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b   UPDATE update {
313d0 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d  UPDATE *UPDATEs}
313e0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
313f0 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
31400 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
31410 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
31420 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
31430 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
31440 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
31450 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
31460 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
31470 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
31480 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
31490 68 65 20 0a 5b 71 75 61 6c 69 66 69 65 64 2d 74  he .[qualified-t
314a0 61 62 6c 65 2d 6e 61 6d 65 5d 20 73 70 65 63 69  able-name] speci
314b0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
314c0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
314d0 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ment...<p>^If th
314e0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
314f0 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  nt does not have
31500 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
31510 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
31520 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66  .table are modif
31530 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41 54  ied by the UPDAT
31540 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  E. ^Otherwise, t
31550 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63 74  he UPDATE affect
31560 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77  s only those.row
31570 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
31580 57 48 45 52 45 20 63 6c 61 75 73 65 0a 5b 62 6f  WHERE clause.[bo
31590 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
315a0 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  |boolean express
315b0 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49  ion is true]. ^I
315c0 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f  t is not an erro
315d0 72 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63  r if the.WHERE c
315e0 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65  lause does not e
315f0 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20  valuate to true 
31600 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74  for any row in t
31610 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20  he table - this 
31620 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20  just.means that 
31630 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
31640 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72  ment affects zer
31650 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20  o rows...<p>The 
31660 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61  modifications ma
31670 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61  de to each row a
31680 66 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50  ffected by an UP
31690 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
316a0 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re.determined by
316b0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73   the list of ass
316c0 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69  ignments followi
316d0 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f  ng the SET keywo
316e0 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d  rd. Each.assignm
316f0 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  ent specifies a 
31700 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
31710 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74 6f 20  ame</yyterm> to 
31720 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
31730 0a 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64  .equals sign and
31740 20 61 20 73 63 61 6c 61 72 20 65 78 70 72 65 73   a scalar expres
31750 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67 68  sion to the righ
31760 74 2e 20 0a 5e 46 6f 72 20 65 61 63 68 20 61 66  t. .^For each af
31770 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20  fected row, the 
31780 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72  named columns.ar
31790 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  e set to the val
317a0 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61  ues found by eva
317b0 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
317c0 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72  esponding scalar
317d0 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e   .expressions. ^
317e0 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  If a single colu
317f0 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20  mn-name appears 
31800 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69  more than once i
31810 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73  n the list of.as
31820 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73  signment express
31830 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68  ions, all but th
31840 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75  e rightmost occu
31850 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65  rrence is ignore
31860 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74  d. ^Columns.that
31870 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
31880 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  n the list of as
31890 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65  signments are le
318a0 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e  ft unmodified. ^
318b0 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65  The scalar.expre
318c0 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72  ssions may refer
318d0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   to columns of t
318e0 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64  he row being upd
318f0 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63  ated. ^In this c
31900 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65  ase all.scalar e
31910 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
31920 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
31930 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
31940 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 42 65  are made...<p>Be
31950 67 69 6e 6e 69 6e 67 20 69 6e 20 53 51 4c 69 74  ginning in SQLit
31960 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e  e [version 3.15.
31970 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 35  0] ([dateof:3.15
31980 2e 30 5d 29 2c 20 61 6e 20 61 73 73 69 67 6e 6d  .0]), an assignm
31990 65 6e 74 20 69 6e 0a 74 68 65 20 53 45 54 20 63  ent in.the SET c
319a0 6c 61 75 73 65 20 63 61 6e 20 62 65 20 61 20 0a  lause can be a .
319b0 5b 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69 73  [column-name-lis
319c0 74 7c 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  t|parenthesized 
319d0 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 6e  list of column n
319e0 61 6d 65 73 5d 20 6f 6e 20 74 68 65 20 6c 65 66  ames] on the lef
319f0 74 20 61 6e 64 20 61 0a 5b 72 6f 77 20 76 61 6c  t and a.[row val
31a00 75 65 5d 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ue] of the same 
31a10 73 69 7a 65 20 6f 6e 20 74 68 65 20 72 69 67 68  size on the righ
31a20 74 2e 0a 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  t....<p>^The opt
31a30 69 6f 6e 61 6c 20 22 4f 52 20 3c 69 3e 61 63 74  ional "OR <i>act
31a40 69 6f 6e 3c 2f 69 3e 22 20 63 6f 6e 66 6c 69 63  ion</i>" conflic
31a50 74 20 63 6c 61 75 73 65 20 74 68 61 74 20 66 6f  t clause that fo
31a60 6c 6c 6f 77 73 20 74 68 65 0a 55 50 44 41 54 45  llows the.UPDATE
31a70 20 6b 65 79 77 6f 72 64 20 61 6c 6c 6f 77 73 20   keyword allows 
31a80 74 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69  the user to nomi
31a90 6e 61 74 65 20 61 20 73 70 65 63 69 66 69 63 0a  nate a specific.
31aa0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
31ab0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
31ac0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
31ad0 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
31ae0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a  UPDATE command..
31af0 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 65 63  Refer to the sec
31b00 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f  tion entitled [O
31b10 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
31b20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
31b30 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73  mation...<h3>Res
31b40 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44  trictions on UPD
31b50 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ATE Statements W
31b60 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49  ithin CREATE TRI
31b70 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  GGER</h3>..<p>Th
31b80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69  e following addi
31b90 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65  tional syntax re
31ba0 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79  strictions apply
31bb0 20 74 6f 20 55 50 44 41 54 45 20 73 74 61 74 65   to UPDATE state
31bc0 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72  ments that.occur
31bd0 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
31be0 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52   of a [CREATE TR
31bf0 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
31c00 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  .  ..<ul>.  <li>
31c10 3c 70 3e 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e  <p>^The <yyterm>
31c20 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
31c30 72 6d 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  rm> specified as
31c40 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41   part of an UPDA
31c50 54 45 20 0a 20 20 20 20 20 20 73 74 61 74 65 6d  TE .      statem
31c60 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20  ent within.     
31c70 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20   a trigger body 
31c80 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66  must be unqualif
31c90 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20  ied. ^(In other 
31ca0 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20  words, the.     
31cb0 20 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c   <i>schema-name<
31cc0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
31cd0 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
31ce0 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41  name of the UPDA
31cf0 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20  TE is.      not 
31d00 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74  allowed within t
31d10 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65  riggers.)^ ^Unle
31d20 73 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  ss the table to 
31d30 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
31d40 72 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63  r.      is attac
31d50 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45  hed is in the TE
31d60 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
31d70 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
31d80 61 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20  ated by the.    
31d90 20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61    trigger progra
31da0 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e  m must reside in
31db0 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
31dc0 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
31dd0 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f  e table.      to
31de0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
31df0 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
31e00 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
31e10 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
31e20 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69  .      unqualifi
31e30 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
31e40 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
31e50 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
31e60 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20  n the same way. 
31e70 20 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f       as it is fo
31e80 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
31e90 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
31ea0 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
31eb0 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20  TEMP database,. 
31ec0 20 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61       then the ma
31ed0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
31ee0 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
31ef0 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
31f00 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
31f10 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20     attached)... 
31f20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
31f30 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
31f40 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
31f50 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
31f60 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20  on UPDATE.      
31f70 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
31f80 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
31f90 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
31fa0 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
31fb0 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50  Y clauses for UP
31fc0 44 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f  DATE are unsuppo
31fd0 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20  rted within.    
31fe0 20 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61    triggers, rega
31ff0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f  rdless of the co
32000 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
32010 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
32020 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  SQLite..</ul>..<
32030 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  h3>Optional LIMI
32040 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43  T and ORDER BY C
32050 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  lauses</h3>..<p>
32060 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62  ^(If SQLite is b
32070 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53  uilt with the [S
32080 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
32090 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
320a0 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
320b0 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73  ption then the s
320c0 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44  yntax of the UPD
320d0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
320e0 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f   extended.with o
320f0 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
32100 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
32110 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  es)^ as follows:
32120 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
32130 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
32140 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
32150 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  l>..<p>^If an UP
32160 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
32170 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  as a LIMIT claus
32180 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  e, the maximum n
32190 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
321a0 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74  at.will be updat
321b0 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65  ed is found by e
321c0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63  valuating the ac
321d0 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65  companying expre
321e0 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e  ssion and castin
321f0 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  g.it to an integ
32200 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67  er value. ^A neg
32210 61 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69  ative value is i
32220 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
32230 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49  o limit"...<p>^I
32240 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
32250 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
32260 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65   to non-negative
32270 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20   value <i>N</i> 
32280 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73  and the.UPDATE s
32290 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20  tatement has an 
322a0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
322b0 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
322c0 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64  hat would be upd
322d0 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65  ated in.the abse
322e0 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
322f0 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
32300 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
32310 74 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64  the ORDER BY and
32320 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c   the.first <i>N<
32330 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49  /i> updated. ^(I
32340 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
32350 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20  tement also has 
32360 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
32370 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  ,.then it is sim
32380 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
32390 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20   and cast to an 
323a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
323b0 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70  f the OFFSET.exp
323c0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
323d0 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74  s to a non-negat
323e0 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f  ive value <i>M</
323f0 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  i>, then the fir
32400 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73  st <i>M</i>.rows
32410 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64   are skipped and
32420 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c   the following <
32430 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64  i>N</i> rows upd
32440 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a  ated instead.)^.
32450 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41  .<p>^If the UPDA
32460 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
32470 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
32480 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
32490 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
324a0 20 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20   updated in the 
324b0 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
324c0 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
324d0 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
324e0 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
324f0 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
32500 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
32510 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
32520 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68  determine .which
32530 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70   are actually up
32540 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  dated...<p>^(The
32550 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
32560 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   on an UPDATE st
32570 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
32580 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
32590 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c  e which.rows fal
325a0 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l within the LIM
325b0 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  IT. The order in
325c0 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
325d0 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69  modified is arbi
325e0 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
325f0 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
32600 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
32610 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  se.)^..<tcl>.###
32620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32660 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
32670 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
32680 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73  m VACUUM..Recurs
32690 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
326a0 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74   vacuum-stmt.</t
326b0 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56  cl>..<p>.  The V
326c0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65  ACUUM command re
326d0 62 75 69 6c 64 73 20 74 68 65 20 64 61 74 61 62  builds the datab
326e0 61 73 65 20 66 69 6c 65 2c 20 72 65 70 61 63 6b  ase file, repack
326f0 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 20 6d 69  ing it into a mi
32700 6e 69 6d 61 6c 0a 20 20 61 6d 6f 75 6e 74 20 6f  nimal.  amount o
32710 66 20 64 69 73 6b 20 73 70 61 63 65 2e 20 54 68  f disk space. Th
32720 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
32730 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20 61 70  .  reasons an ap
32740 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68 74 20  plication might 
32750 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20  do this:..<ul>. 
32760 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73   <li> <p> ^Unles
32770 73 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e  s SQLite is runn
32780 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76 61 63  ing in "auto_vac
32790 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20  uum=FULL" mode, 
327a0 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20 20 20  when a large.   
327b0 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61    amount of data
327c0 20 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d   is deleted from
327d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
327e0 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62 65 68  le it leaves beh
327f0 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20 20 73  ind empty.     s
32800 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65 22 20  pace, or "free" 
32810 64 61 74 61 62 61 73 65 20 70 61 67 65 73 2e 20  database pages. 
32820 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 64  This means the d
32830 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
32840 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72 67 65  ht.     be large
32850 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20  r than strictly 
32860 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e  necessary. ^Runn
32870 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20 72 65  ing VACUUM to re
32880 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20 20 20  build the .     
32890 64 61 74 61 62 61 73 65 20 72 65 63 6c 61 69 6d  database reclaim
328a0 73 20 74 68 69 73 20 73 70 61 63 65 20 61 6e 64  s this space and
328b0 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
328c0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
328d0 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20  e file...  <li> 
328e0 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20 69 6e  <p> ^Frequent in
328f0 73 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c 20  serts, updates, 
32900 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20  and deletes can 
32910 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61  cause the databa
32920 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74 6f 20  se file.     to 
32930 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65  become fragmente
32940 64 20 2d 20 77 68 65 72 65 20 64 61 74 61 20 66  d - where data f
32950 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  or a single tabl
32960 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 73 63  e or index is sc
32970 61 74 74 65 72 65 64 20 0a 20 20 20 20 20 61 72  attered .     ar
32980 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62 61 73  ound the databas
32990 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67  e file. ^Running
329a0 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65 73 20   VACUUM ensures 
329b0 74 68 61 74 20 65 61 63 68 20 74 61 62 6c 65 20  that each table 
329c0 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78 20 69  and.     index i
329d0 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72 65 64  s largely stored
329e0 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77 69   contiguously wi
329f0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
32a00 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65  e file. ^In some
32a10 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56 41 43  .     cases, VAC
32a20 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65 64  UUM may also red
32a30 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
32a40 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c  f partially fill
32a50 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20 20 20  ed pages in.    
32a60 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72   the database, r
32a70 65 64 75 63 69 6e 67 20 74 68 65 20 73 69 7a 65  educing the size
32a80 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
32a90 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a   file further...
32aa0 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d    <li> <p> ^Norm
32ab0 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61  ally, the databa
32ac0 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61  se [page_size] a
32ad0 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
32ae0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  t the database. 
32af0 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75      supports [au
32b00 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20  to_vacuum] must 
32b10 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65  be configured be
32b20 66 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73  fore the databas
32b30 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61  e file is.     a
32b40 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e  ctually created.
32b50 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20   ^However, when 
32b60 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  not in [write-ah
32b70 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74  ead log] mode, t
32b80 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73  he .     [page_s
32b90 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74  ize] and/or [aut
32ba0 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72  o_vacuum] proper
32bb0 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74  ties of an exist
32bc0 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d 61 79  ing database may
32bd0 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64   be.     changed
32be0 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70   by using the [p
32bf0 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c  age_size pragma|
32c00 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f  page_size]  and/
32c10 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76  or .     [auto_v
32c20 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74  acuum|pragma aut
32c30 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61  o_vacuum] pragma
32c40 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64  s and then immed
32c50 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67  iately VACUUMing
32c60 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61  .     the databa
32c70 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72  se. ^When in [wr
32c80 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
32c90 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61  ode, only the [a
32ca0 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20  uto_vacuum].    
32cb0 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74   support propert
32cc0 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64  y can be changed
32cd0 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c   using VACUUM..<
32ce0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 42 79 20 64 65 66  /ul>..<p>^By def
32cf0 61 75 6c 74 2c 20 56 41 43 55 55 4d 20 6f 6e 6c  ault, VACUUM onl
32d00 79 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 6f 6e 20  y works only on 
32d10 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
32d20 65 2e 0a 5e 5b 41 54 54 41 43 48 7c 41 74 74 61  e..^[ATTACH|Atta
32d30 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5d 20  ched databases] 
32d40 63 61 6e 20 62 65 20 76 61 63 75 75 6d 65 64 20  can be vacuumed 
32d50 62 79 20 61 70 70 65 6e 64 69 6e 67 20 74 68 65  by appending the
32d60 20 61 70 70 72 6f 70 72 69 61 74 65 0a 3c 79 79   appropriate.<yy
32d70 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
32d80 3c 2f 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65  </yyterm> to the
32d90 20 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e   VACUUM statemen
32da0 74 2e 0a 0a 3c 70 3e 3c 62 3e 43 6f 6d 70 61 74  t...<p><b>Compat
32db0 69 62 69 6c 69 74 79 20 57 61 72 6e 69 6e 67 3a  ibility Warning:
32dc0 3c 2f 62 3e 20 54 68 65 20 61 62 69 6c 69 74 79  </b> The ability
32dd0 20 74 6f 20 76 61 63 75 75 6d 20 61 74 74 61 63   to vacuum attac
32de0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 77 61  hed databases wa
32df0 73 0a 61 64 64 65 64 20 69 6e 20 5b 76 65 72 73  s.added in [vers
32e00 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61  ion 3.15.0] ([da
32e10 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2e 20 20  teof:3.15.0]).  
32e20 50 72 69 6f 72 20 74 6f 20 74 68 61 74 2c 20 61  Prior to that, a
32e30 20 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61   .<yyterm>schema
32e40 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61  -name</yyterm> a
32e50 64 64 65 64 20 74 6f 20 74 68 65 0a 56 41 43 55  dded to the.VACU
32e60 55 4d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  UM statement wou
32e70 6c 64 20 62 65 20 73 69 6c 65 6e 74 6c 79 20 69  ld be silently i
32e80 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 22  gnored and the "
32e90 6d 61 69 6e 22 20 73 63 68 65 6d 61 20 77 6f 75  main" schema wou
32ea0 6c 64 20 62 65 0a 76 61 63 75 75 6d 65 64 2e 3c  ld be.vacuumed.<
32eb0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  /p>..<p>^The VAC
32ec0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  UUM command work
32ed0 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65  s by copying the
32ee0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
32ef0 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61   database into.a
32f00 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
32f10 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65  ase file and the
32f20 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
32f30 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20  e original with 
32f40 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66  the .contents of
32f50 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
32f60 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77  ile. ^When overw
32f70 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
32f80 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a  nal, a rollback.
32f90 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74  journal or [writ
32fa0 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c  e-ahead log] WAL
32fb0 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75   file is used ju
32fc0 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  st as it would b
32fd0 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20  e for any.other 
32fe0 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63  database transac
32ff0 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e  tion. ^This mean
33000 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55  s that when VACU
33010 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  UMing a database
33020 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77  , .as much as tw
33030 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ice the size of 
33040 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
33050 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65  abase file is re
33060 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64  quired in free.d
33070 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e  isk space...<p>^
33080 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
33090 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68  nd may change th
330a0 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44  e [ROWID | ROWID
330b0 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  s] of entries in
330c0 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74   any.tables that
330d0 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20   do not have an 
330e0 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45  explicit [INTEGE
330f0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
33100 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55  </p>..<p>^A VACU
33110 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  UM will fail if 
33120 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e  there is an open
33130 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72   transaction, or
33140 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e   if there are on
33150 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65  e or.more active
33160 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
33170 77 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a  when it is run..
33180 0a 3c 70 3e 5e 28 41 6e 20 61 6c 74 65 72 6e 61  .<p>^(An alterna
33190 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68  tive to using th
331a0 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
331b0 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63   to.reclaim spac
331c0 65 20 61 66 74 65 72 20 64 61 74 61 20 68 61 73  e after data has
331d0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73   been deleted is
331e0 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64   auto-vacuum mod
331f0 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  e, enabled using
33200 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75  .the [auto_vacuu
33210 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68  m] pragma.)^ ^Wh
33220 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  en [auto_vacuum]
33230 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   is enabled for 
33240 61 20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20  a database.free 
33250 70 61 67 65 73 20 6d 61 79 20 62 65 20 72 65 63  pages may be rec
33260 6c 61 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c  laimed after del
33270 65 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73  eting data, caus
33280 69 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20  ing the file to 
33290 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20  shrink,.without 
332a0 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65  rebuilding the e
332b0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 75  ntire database u
332c0 73 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 5e 48  sing VACUUM.  ^H
332d0 6f 77 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61  owever, using.[a
332e0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20  uto_vacuum] can 
332f0 6c 65 61 64 20 74 6f 20 65 78 74 72 61 20 64 61  lead to extra da
33300 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 61 67  tabase file frag
33310 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 6e 64  mentation.  ^And
33320 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64   [auto_vacuum].d
33330 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20  oes not compact 
33340 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64  partially filled
33350 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61   pages of the da
33360 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d  tabase as VACUUM
33370 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c   does...</p>...<
33380 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
33390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
333a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
333b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
333c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
333d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44  ###.Section {IND
333e0 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64  EXED BY} indexed
333f0 62 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d  by {{INDEXED BY}
33400 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a   {NOT INDEXED}}.
33410 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  .</tcl>.<p>^The 
33420 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
33430 65 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53 51  e forces the [SQ
33440 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  Lite query plann
33450 65 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61 72  er] to use a.par
33460 74 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e  ticular named in
33470 64 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45  dex on a [DELETE
33480 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20  ], [SELECT], or 
33490 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
334a0 6e 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20  nt..The INDEXED 
334b0 42 59 20 70 68 72 61 73 65 20 69 73 20 61 6e 20  BY phrase is an 
334c0 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
334d0 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74   and.is not port
334e0 61 62 6c 65 20 74 6f 20 6f 74 68 65 72 20 53 51  able to other SQ
334f0 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
33500 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52  es.</p>..<tcl>.R
33510 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
33520 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d  agram qualified-
33530 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c  table-name.</tcl
33540 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45  >..<p>^The "INDE
33550 58 45 44 20 42 59 20 3c 79 79 74 65 72 6d 3e 69  XED BY <yyterm>i
33560 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  ndex-name</yyter
33570 6d 3e 22 20 70 68 72 61 73 65 20 73 70 65 63 69  m>" phrase speci
33580 66 69 65 73 20 0a 74 68 61 74 20 74 68 65 20 6e  fies .that the n
33590 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20  amed index.must 
335a0 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72  be used in order
335b0 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75   to look up valu
335c0 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64  es on the preced
335d0 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 3c  ing table..^If <
335e0 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d  yyterm>index-nam
335f0 65 3c 2f 79 79 74 65 72 6d 3e 20 64 6f 65 73 20  e</yyterm> does 
33600 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e  not exist or can
33610 6e 6f 74 20 62 65 20 75 73 65 64 20 0a 66 6f 72  not be used .for
33620 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e   the query, then
33630 20 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e   the preparation
33640 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
33650 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54  ement fails..^(T
33660 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22  he "NOT INDEXED"
33670 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
33680 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20  s that no index 
33690 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68  shall be used wh
336a0 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65  en.accessing the
336b0 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65   preceding table
336c0 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c  , including impl
336d0 69 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61  ied indices crea
336e0 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64  te by.UNIQUE and
336f0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
33700 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76  straints.  Howev
33710 65 72 2c 20 74 68 65 20 5b 72 6f 77 69 64 5d 0a  er, the [rowid].
33720 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65  can still be use
33730 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74  d to look up ent
33740 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22  ries even when "
33750 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20  NOT INDEXED" is 
33760 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e  specified.)^</p>
33770 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61  ..<p>Some SQL da
33780 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70  tabase engines p
33790 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64  rovide non-stand
337a0 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61  ard "hint" mecha
337b0 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20  nisms which.can 
337c0 62 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20  be used to give 
337d0 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
337e0 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20  zer clues about 
337f0 77 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20  what indices it 
33800 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61  should.use for a
33810 20 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74   particular stat
33820 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45  ement.  The INDE
33830 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53  X BY clause of S
33840 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f  QLite is .<em>no
33850 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67  t</em> a hinting
33860 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69   mechanism and i
33870 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20  t should not be 
33880 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54  used as such..^T
33890 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
338a0 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69  ause does not gi
338b0 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ve the optimizer
338c0 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69   hints about whi
338d0 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b  ch index.to use;
338e0 20 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70   it gives the op
338f0 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72  timizer a requir
33900 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69  ement of which i
33910 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66  ndex to use..^If
33920 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
33930 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74  izer is unable t
33940 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  o use the index 
33950 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
33960 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65  .INDEX BY clause
33970 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79  , then the query
33980 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
33990 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
339a0 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  p>The INDEXED BY
339b0 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e   clause is <em>n
339c0 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64  ot</em> intended
339d0 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69   for use in tuni
339e0 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e  ng.the performan
339f0 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20  ce of a query.  
33a00 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68  The intent of th
33a10 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
33a20 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20  use is.to raise 
33a30 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72  a run-time error
33a40 20 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61   if a schema cha
33a50 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f  nge, such as dro
33a60 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e  pping or.creatin
33a70 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73  g an index, caus
33a80 65 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  es the query pla
33a90 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e  n for a time-sen
33aa0 73 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20  sitive query.to 
33ab0 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44  change.  The IND
33ac0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
33ad0 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65  s designed to he
33ae0 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69  lp detect.undesi
33af0 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e  rable query plan
33b00 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20   changes during 
33b10 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69  regression testi
33b20 6e 67 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 20  ng..Application 
33b30 0a 64 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .developers are 
33b40 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
33b50 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
33b60 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
33b70 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
33b80 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
33b90 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
33ba0 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
33bb0 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
33bc0 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
33bd0 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
33be0 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
33bf0 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
33c00 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
33c10 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
33c20 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
33c30 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c  ..<h3>See Also:<
33c40 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  /h3>..<ol>.<li><
33c50 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61  p>The [query pla
33c60 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20  nner checklist] 
33c70 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73 20  describes steps 
33c80 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  that application
33c90 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75  .developers shou
33ca0 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  ld following to 
33cb0 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65  help resolve que
33cc0 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c  ry planner probl
33cd0 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20  ems..Notice the 
33ce0 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66 20  that the use of 
33cf0 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61 20  INDEXED BY is a 
33d00 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20  last resort, to 
33d10 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65  be used only.whe
33d20 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73  n all other meas
33d30 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a  ures fail.</p>..
33d40 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e  <li><p>[upluscon
33d50 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 22  trol|The unary "
33d60 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e  +" operator].can
33d70 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 71   be used to disq
33d80 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20  ualify terms in 
33d90 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
33da0 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64   from use by ind
33db0 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73  ices..Careful us
33dc0 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e  e of unary + can
33dd0 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20   sometimes help 
33de0 70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65 72  prevent the quer
33df0 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63  y planner from.c
33e00 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69  hoosing a poor i
33e10 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72 65 73  ndex without res
33e20 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75  tricting it to u
33e30 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69  sing one specifi
33e40 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c  c index..Careful
33e50 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e   placement of un
33e60 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20  ary + operators 
33e70 69 73 20 61 20 62 65 74 74 65 72 20 6d 65 74 68  is a better meth
33e80 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69  od for controlli
33e90 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65  ng .which indice
33ea0 73 20 61 72 65 20 75 73 65 64 20 62 79 20 61 20  s are used by a 
33eb0 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e  query.</p>..<li>
33ec0 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  <p>The [sqlite3_
33ed0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43  stmt_status()] C
33ee0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74  /C++ interface t
33ef0 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
33f00 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  .[SQLITE_STMTSTA
33f10 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
33f20 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53  P] and [SQLITE_S
33f30 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20  TMTSTATUS_SORT] 
33f40 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65  verbs.can be use
33f50 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72  d to detect at r
33f60 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20  un-time when an 
33f70 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
33f80 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65   not.making effe
33f90 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64  ctive use of ind
33fa0 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c  ices.  Many appl
33fb0 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65  ications may pre
33fc0 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b  fer to.use the [
33fd0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
33fe0 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
33ff0 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78   to detect index
34000 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74   misuse.rather t
34010 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20  han the INDEXED 
34020 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69  BY phrase descri
34030 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f  bed here.</p>.</
34040 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ol>..<tcl>.#####
34050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34090 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73  ########.# A lis
340a0 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20  t of keywords.  
340b0 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72  A asterisk occur
340c0 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77  s after the keyw
340d0 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a  ord if it is on.
340e0 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c  # the fallback l
340f0 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f  ist..#.set keywo
34100 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b  rd_list [lsort {
34110 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54  .   ABORT.   ACT
34120 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46  ION.   ADD.   AF
34130 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c  TER.   ALL.   AL
34140 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20  TER.   ANALYZE. 
34150 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41    AND.   AS.   A
34160 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20  SC.   ATTACH.   
34170 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
34180 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e   BEFORE.   BEGIN
34190 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42  .   BETWEEN.   B
341a0 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20  Y.   CASCADE.   
341b0 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20  CASE.   CAST.   
341c0 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45  CHECK.   COLLATE
341d0 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f  .   COLUMN.   CO
341e0 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54  MMIT.   CONFLICT
341f0 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20  .   CONSTRAINT. 
34200 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53    CREATE.   CROS
34210 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54  S.   CURRENT_DAT
34220 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
34230 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
34240 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41  ESTAMP.   DATABA
34250 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20  SE.   DEFAULT.  
34260 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46   DEFERRED.   DEF
34270 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54  ERRABLE.   DELET
34280 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54  E.   DESC.   DET
34290 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a  ACH.   DISTINCT.
342a0 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20     DROP.   END. 
342b0 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20    EACH.   ELSE. 
342c0 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
342d0 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a  PT.   EXCLUSIVE.
342e0 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
342f0 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20  LAIN.   FAIL.   
34300 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20  FOR.   FOREIGN. 
34310 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20    FROM.   FULL. 
34320 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a    GLOB.   GROUP.
34330 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a     HAVING.   IF.
34340 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d     IGNORE.   IMM
34350 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20  EDIATE.   IN.   
34360 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
34370 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20  .   INITIALLY.  
34380 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
34390 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49  .   INSTEAD.   I
343a0 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f  NTERSECT.   INTO
343b0 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c  .   IS.   ISNULL
343c0 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a  .   JOIN.   KEY.
343d0 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a     LEFT.   LIKE.
343e0 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43     LIMIT.   MATC
343f0 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20  H.   NATURAL.   
34400 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  NO.   NOT.   NOT
34410 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
34420 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20  OF.   OFFSET.   
34430 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
34440 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c  R.   OUTER.   PL
34450 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20  AN.   PRAGMA.   
34460 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59  PRIMARY.   QUERY
34470 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 43  .   RAISE.   REC
34480 55 52 53 49 56 45 0a 20 20 20 52 45 46 45 52 45  URSIVE.   REFERE
34490 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20  NCES.   REGEXP. 
344a0 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c    REINDEX.   REL
344b0 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20  EASE.   RENAME. 
344c0 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53    REPLACE.   RES
344d0 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20  TRICT.   RIGHT. 
344e0 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
344f0 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20  W.   SAVEPOINT. 
34500 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a    SELECT.   SET.
34510 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50     TABLE.   TEMP
34520 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20  .   TEMPORARY.  
34530 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54   THEN.   TO.   T
34540 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52  RANSACTION.   TR
34550 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20  IGGER.   UNION. 
34560 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41    UNIQUE.   UPDA
34570 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56  TE.   USING.   V
34580 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a  ACUUM.   VALUES.
34590 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55     VIEW.   VIRTU
345a0 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57 49  AL.   WITH.   WI
345b0 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20 20  THOUT.   WHEN.  
345c0 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75   WHERE.}]..hd_pu
345d0 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22  ts {<DIV class="
345e0 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53  pdf_section">}.S
345f0 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b  ection {SQLite K
34600 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64  eywords} keyword
34610 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64  s {{*SQL keyword
34620 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d  } {SQL keywords}
34630 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56  }.hd_puts {</DIV
34640 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  >}.</tcl>..<p>Th
34650 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73  e SQL standard s
34660 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20  pecifies a huge 
34670 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72  number of keywor
34680 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74  ds which may not
34690 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20  .be used as the 
346a0 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c  names of tables,
346b0 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e   indices, column
346c0 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73  s, databases, us
346d0 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74  er-defined.funct
346e0 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
346f0 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
34700 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20  modules, or any 
34710 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65  other named obje
34720 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20  ct..The list of 
34730 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c  keywords is so l
34740 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f  ong that few peo
34750 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72  ple can remember
34760 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d   them all..For m
34770 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f  ost SQL code, yo
34780 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73  ur safest bet is
34790 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e   to never use an
347a0 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  y English langua
347b0 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e  ge.word as the n
347c0 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65  ame of a user-de
347d0 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70  fined object.</p
347e0 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e  >..<p>If you wan
347f0 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f  t to use a keywo
34800 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f  rd as a name, yo
34810 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20  u need to quote 
34820 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66  it.  There.are f
34830 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74  our ways of quot
34840 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
34850 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
34860 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
34870 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
34880 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
34890 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
348a0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
348b0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
348c0 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
348d0 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69  quotes is a stri
348e0 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
348f0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
34900 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
34910 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
34920 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
34930 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  >^A keyword in d
34940 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
34950 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
34960 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
34970 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
34980 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
34990 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
349a0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
349b0 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
349c0 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
349d0 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
349e0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
349f0 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
34a00 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
34a10 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
34a20 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
34a30 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
34a40 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
34a50 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
34a60 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
34a70 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
34a80 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
34a90 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
34aa0 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
34ab0 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
34ac0 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
34ad0 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
34ae0 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65  ed in grave acce
34af0 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20  nts (ASCII code 
34b00 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20  96) is .        
34b10 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
34b20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
34b30 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
34b40 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
34b50 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
34b60 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69  d by MySQL and i
34b70 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
34b80 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
34b90 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
34ba0 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  /td></tr>.</tabl
34bb0 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
34bc0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65  .</p>..<p>For re
34bd0 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f  silience when co
34be0 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69  nfronted with hi
34bf0 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61  storical SQL sta
34c00 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a  tements, SQLite.
34c10 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62  will sometimes b
34c20 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20  end the quoting 
34c30 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e  rules above:</p>
34c40 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
34c50 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  f a keyword in s
34c60 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ingle.quotes (ex
34c70 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f  : <b>'key'</b> o
34c80 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29  r <b>'glob'</b>)
34c90 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
34ca0 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69  ntext where.an i
34cb0 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c  dentifier is all
34cc0 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61  owed but where a
34cd0 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
34ce0 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20  is not allowed, 
34cf0 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69  then.the token i
34d00 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
34d10 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  be an identifier
34d20 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74   instead of a st
34d30 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f  ring literal..</
34d40 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
34d50 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
34d60 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28   double.quotes (
34d70 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e  ex: <b>"key"</b>
34d80 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62   or <b>"glob"</b
34d90 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
34da0 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74  context where.it
34db0 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c   cannot be resol
34dc0 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69  ved to an identi
34dd0 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61  fier but where a
34de0 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a   string literal.
34df0 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  is allowed, then
34e00 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e   the token is un
34e10 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
34e20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
34e30 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64  instead.of an id
34e40 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c  entifier.</p></l
34e50 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f  i>.</ul>..<p>Pro
34e60 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75  grammers are cau
34e70 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73  tioned not to us
34e80 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74  e the two except
34e90 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69  ions described i
34ea0 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  n.the previous b
34eb0 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68  ullets.  We emph
34ec0 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20  asize that they 
34ed0 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68  exist only so th
34ee0 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66  at old.and ill-f
34ef0 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ormed SQL statem
34f00 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f  ents will run co
34f10 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65  rrectly.  Future
34f20 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
34f30 69 74 65 20 6d 69 67 68 74 20 72 61 69 73 65 20  ite might raise 
34f40 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f  errors instead o
34f50 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20  f accepting the 
34f60 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d  malformed.statem
34f70 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20  ents covered by 
34f80 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  the exceptions a
34f90 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bove.</p>..<p>.S
34fa0 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
34fb0 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
34fc0 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
34fd0 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66  t takes on new f
34fe0 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
34ff0 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65  revent your code
35000 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b   from being brok
35010 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68  en by future enh
35020 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73  ancements, you s
35030 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71  hould.normally q
35040 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66  uote any identif
35050 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
35060 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
35070 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
35080 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
35090 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
350a0 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73  list below shows
350b0 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65   all possible ke
350c0 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61  ywords used by a
350d0 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69  ny build of.SQLi
350e0 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  te regardless of
350f0 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f   [compile-time o
35100 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20  ptions].  .Most 
35110 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69  reasonable confi
35120 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f  gurations use mo
35130 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  st or all of the
35140 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74  se keywords,.but
35150 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d   some keywords m
35160 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68  ay be omitted wh
35170 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  en SQL language 
35180 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73  features are.dis
35190 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c  abled..^(Regardl
351a0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
351b0 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
351c0 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
351d0 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
351e0 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
351f0 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
35200 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
35210 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
35220 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
35230 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
35240 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
35250 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
35260 6f 6c 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78  ol>.<tcl>.set lx
35270 20 7b 7d 0a 66 6f 72 65 61 63 68 20 77 6f 72 64   {}.foreach word
35280 20 5b 6c 73 6f 72 74 20 24 6b 65 79 77 6f 72 64   [lsort $keyword
35290 5f 6c 69 73 74 5d 20 7b 0a 20 20 68 64 5f 70 75  _list] {.  hd_pu
352a0 74 73 6e 6c 20 22 3c 6c 69 3e 24 77 6f 72 64 3c  tsnl "<li>$word<
352b0 2f 6c 69 3e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e  /li>".}.hd_putsn
352c0 6c 20 22 3c 2f 6f 6c 3e 29 5e 22 0a 3c 2f 74 63  l "</ol>)^".</tc
352d0 6c 3e 0a                                         l>.