Documentation Source Text

Hex Artifact Content
Login

Artifact 1ebfa7a79b9d9f1433cbb2995850e059ce7e4008:


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 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 63 68  AME TO syntax ch
0f60: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f70: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f80: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f90: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0fa0: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0fb0: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fc0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fd0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fe0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0ff0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
1000: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
1010: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1020: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  same database.</
1030: 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68 65 20  p>..<p> ^If the 
1040: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
1050: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
1060: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
1070: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
1080: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1090: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
10a0: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
10b0: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
10c0: 65 72 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77  ere are.any view
10d0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72   definitions, or
10e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63   statements exec
10f0: 75 74 65 64 20 62 79 20 74 72 69 67 67 65 72 73  uted by triggers
1100: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74   that refer to.t
1110: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1120: 65 6e 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72  enamed, these ar
1130: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
1140: 6c 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20  lly modified to 
1150: 75 73 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c  use the new.tabl
1160: 65 20 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20  e name. If this 
1170: 69 73 20 72 65 71 75 69 72 65 64 2c 20 74 68 65  is required, the
1180: 20 74 72 69 67 67 65 72 73 20 6f 72 20 76 69 65   triggers or vie
1190: 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75  w definitions mu
11a0: 73 74 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e  st be.dropped an
11b0: 64 20 72 65 63 72 65 61 74 65 64 20 74 6f 20 75  d recreated to u
11c0: 73 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  se the new table
11d0: 20 6e 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c   name by hand..<
11e0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11f0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  ><table border="
1200: 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
1210: 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 0a 3c 65  10">.<tr><td>.<e
1220: 6d 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65  m>Important Note
1230: 3a 3c 2f 65 6d 3e 0a 54 68 65 20 27 41 4c 54 45  :</em>.The 'ALTE
1240: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 52 45 4e 41  R TABLE ... RENA
1250: 4d 45 20 54 4f 20 2e 2e 2e 27 20 63 6f 6d 6d 61  ME TO ...' comma
1260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 75 70 64 61  nd does not upda
1270: 74 65 20 61 63 74 69 6f 6e 0a 73 74 61 74 65 6d  te action.statem
1280: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1290: 67 65 72 73 20 6f 72 20 53 45 4c 45 43 54 20 73  gers or SELECT s
12a0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
12b0: 20 76 69 65 77 73 2e 0a 49 66 20 74 68 65 20 74   views..If the t
12c0: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
12d0: 65 64 20 69 73 20 72 65 66 65 72 65 6e 63 65 64  ed is referenced
12e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 72 69   from within tri
12f0: 67 67 65 72 73 20 6f 72 20 76 69 65 77 73 2c 0a  ggers or views,.
1300: 74 68 65 6e 20 74 68 6f 73 65 20 74 72 69 67 67  then those trigg
1310: 65 72 73 20 61 6e 64 20 76 69 65 77 73 20 6d 75  ers and views mu
1320: 73 74 20 62 65 20 64 72 6f 70 70 65 64 20 61 6e  st be dropped an
1330: 64 20 72 65 63 72 65 61 74 65 64 20 73 65 70 61  d recreated sepa
1340: 72 61 74 65 6c 79 0a 62 79 20 74 68 65 20 61 70  rately.by the ap
1350: 70 6c 69 63 61 74 69 6f 6e 2e 0a 3c 2f 74 64 3e  plication..</td>
1360: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  </tr></table>.</
1370: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
1380: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1390: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
13a0: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
13b0: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
13c0: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
13d0: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
13e0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
13f0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
1400: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
1410: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
1420: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
1430: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1440: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1450: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1460: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1470: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1480: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1490: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
14a0: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
14b0: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
14c0: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
14d0: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
14e0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
14f0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
1500: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
1510: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
1520: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
1530: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1540: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1550: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1560: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1570: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1580: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1590: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
15a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
15b0: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
15c0: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
15d0: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
15e0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
15f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1600: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
1610: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
1620: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
1630: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1640: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1650: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1660: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1670: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1680: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1690: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
16a0: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
16b0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
16c0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
16d0: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
16e0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
16f0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1700: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
1710: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
1720: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
1730: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1740: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1750: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1760: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1770: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1780: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1790: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
17a0: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
17b0: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
17c0: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
17d0: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
17e0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
17f0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
1800: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
1810: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
1820: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
1830: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1840: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1850: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1860: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1870: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1880: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1890: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
18a0: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
18b0: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
18c0: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
18d0: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
18e0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
18f0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
1900: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1910: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
1920: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
1930: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1940: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1950: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1960: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1970: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1980: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1990: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
19a0: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
19b0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
19c0: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
19d0: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
19e0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
19f0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
1a00: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
1a10: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
1a20: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
1a30: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1a40: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1a50: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1a60: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1a70: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1a80: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1a90: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1aa0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
1ab0: 61 67 6d 65 6e 74 20 6f 74 68 65 72 61 6c 74 65  agment otheralte
1ac0: 72 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69  r</tcl>.<h3>Maki
1ad0: 6e 67 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f  ng Other Kinds O
1ae0: 66 20 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43  f Table Schema C
1af0: 68 61 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  hanges</h3>..<p>
1b00: 20 54 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61   The only schema
1b10: 20 61 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e   altering comman
1b20: 64 73 20 64 69 72 65 63 74 6c 79 20 73 75 70 70  ds directly supp
1b30: 6f 72 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  orted by SQLite 
1b40: 61 72 65 20 74 68 65 0a 22 72 65 6e 61 6d 65 20  are the."rename 
1b50: 74 61 62 6c 65 22 20 61 6e 64 20 22 61 64 64 20  table" and "add 
1b60: 63 6f 6c 75 6d 6e 22 20 63 6f 6d 6d 61 6e 64 73  column" commands
1b70: 20 73 68 6f 77 6e 20 61 62 6f 76 65 2e 20 20 48   shown above.  H
1b80: 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61 74  owever, applicat
1b90: 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b 65 20 6f 74  ions.can make ot
1ba0: 68 65 72 20 61 72 62 69 74 72 61 72 79 20 63 68  her arbitrary ch
1bb0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 66 6f 72  anges to the for
1bc0: 6d 61 74 20 6f 66 20 61 20 74 61 62 6c 65 20 75  mat of a table u
1bd0: 73 69 6e 67 20 61 20 73 69 6d 70 6c 65 0a 73 65  sing a simple.se
1be0: 71 75 65 6e 63 65 20 6f 66 20 6f 70 65 72 61 74  quence of operat
1bf0: 69 6f 6e 73 2e 0a 54 68 65 20 73 74 65 70 73 20  ions..The steps 
1c00: 74 6f 20 6d 61 6b 65 20 61 72 62 69 74 72 61 72  to make arbitrar
1c10: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
1c20: 20 73 63 68 65 6d 61 20 64 65 73 69 67 6e 20 6f   schema design o
1c30: 66 20 73 6f 6d 65 20 74 61 62 6c 65 20 58 0a 61  f some table X.a
1c40: 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  re as follows:..
1c50: 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20  <ol>.<li><p>.If 
1c60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1c70: 74 72 61 69 6e 74 73 20 61 72 65 20 65 6e 61 62  traints are enab
1c80: 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20 74 68 65  led,.disable the
1c90: 6d 20 75 73 69 6e 67 20 5b 50 52 41 47 4d 41 20  m using [PRAGMA 
1ca0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
1cb0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1cc0: 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ys=OFF]...<li><p
1cd0: 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  >.Start a transa
1ce0: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ction...<li><p>.
1cf0: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f 72  Remember the for
1d00: 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78  mat of all index
1d10: 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  es and triggers 
1d20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d30: 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69 6e  table X..This in
1d40: 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20 62  formation will b
1d50: 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65 70  e needed in step
1d60: 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20 77   8 below.  One w
1d70: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
1d80: 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79 20  .to run a query 
1d90: 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
1da0: 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65 2c  ng:.SELECT type,
1db0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
1dc0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62  _master WHERE tb
1dd0: 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c 69  l_name='X'...<li
1de0: 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45  ><p>.Use [CREATE
1df0: 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73 74   TABLE] to const
1e00: 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c 65  ruct a new table
1e10: 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69 73   "new_X" that is
1e20: 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64 0a   in the desired.
1e30: 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20 6f  revised format o
1e40: 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b 65  f table X.  Make
1e50: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6e   sure that the n
1e60: 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65 73  ame "new_X" does
1e70: 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69 74   not collide.wit
1e80: 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 74  h any existing t
1e90: 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63 6f  able name, of co
1ea0: 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54  urse...<li><p>.T
1eb0: 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74 20  ransfer content 
1ec0: 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77 5f  from X into new_
1ed0: 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65 6d  X using a statem
1ee0: 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52 54  ent.like: INSERT
1ef0: 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c 45   INTO new_X SELE
1f00: 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a 0a  CT ... FROM X...
1f10: 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65  <li><p>.Drop the
1f20: 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20 5b   old table X:  [
1f30: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52 4f  DROP TABLE | DRO
1f40: 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69  P TABLE X]...<li
1f50: 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65 20  ><p>.Change the 
1f60: 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f  name of new_X to
1f70: 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52 20   X using: ALTER 
1f80: 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41  TABLE new_X RENA
1f90: 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70  ME TO X...<li><p
1fa0: 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49 4e  >.Use [CREATE IN
1fb0: 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54 45  DEX] and [CREATE
1fc0: 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65 63   TRIGGER] to rec
1fd0: 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65 73  onstruct indexes
1fe0: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
1ff0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 61  sociated with ta
2000: 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73 20  ble X.  Perhaps 
2010: 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d  use the old form
2020: 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  at of the trigge
2030: 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20 73  rs and.indexes s
2040: 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20 33  aved from step 3
2050: 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69 64   above as a guid
2060: 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65  e, making change
2070: 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  s as appropriate
2080: 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61 74  .for the alterat
2090: 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66 20  ion...<li><p>If 
20a0: 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72 20  any views refer 
20b0: 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61 20  to table X in a 
20c0: 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66 65  way that is affe
20d0: 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68 65  cted by the.sche
20e0: 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e 20  ma change, then 
20f0: 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77 73  drop those views
2100: 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49 45   using [DROP VIE
2110: 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  W] and recreate 
2120: 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65 76  them.with whatev
2130: 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20 6e  er changes are n
2140: 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63 6f  ecessary to acco
2150: 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68 65  mmodate the sche
2160: 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67 20  ma change.using 
2170: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a 0a  [CREATE VIEW]...
2180: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2190: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
21a0: 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61 6c  ts were original
21b0: 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e 20  ly enabled.then 
21c0: 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72 65  run [PRAGMA fore
21d0: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20 74  ign_key_check] t
21e0: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
21f0: 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65 20  e schema.change 
2200: 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61 6e  did not break an
2210: 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  y foreign key co
2220: 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c 69  nstraints....<li
2230: 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65 20  ><p>.Commit the 
2240: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72  transaction star
2250: 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a 0a  ted in step 2...
2260: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2270: 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61 69  gn keys constrai
2280: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
2290: 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65 65  lly enabled, ree
22a0: 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e 0a  nable them now..
22b0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 70 72  </ol>..<p>The pr
22c0: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
22d0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 67 65 6e 65   completely gene
22e0: 72 61 6c 20 61 6e 64 20 77 69 6c 6c 20 77 6f 72  ral and will wor
22f0: 6b 20 65 76 65 6e 20 69 66 20 74 68 65 0a 73 63  k even if the.sc
2300: 68 65 6d 61 20 63 68 61 6e 67 65 20 63 61 75 73  hema change caus
2310: 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  es the informati
2320: 6f 6e 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  on stored in the
2330: 20 74 61 62 6c 65 20 74 6f 20 63 68 61 6e 67 65   table to change
2340: 2e 0a 53 6f 20 74 68 65 20 66 75 6c 6c 20 70 72  ..So the full pr
2350: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
2360: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
2370: 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f 6c 75   dropping a colu
2380: 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74 68 65  mn,.changing the
2390: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
23a0: 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72 65 6d  s, adding or rem
23b0: 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45 20 63  oving a UNIQUE c
23c0: 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50 52 49  onstraint.or PRI
23d0: 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69 6e 67  MARY KEY, adding
23e0: 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49 47   CHECK or FOREIG
23f0: 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55 4c  N KEY or NOT NUL
2400: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 6f  L constraints,.o
2410: 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 64  r changing the d
2420: 61 74 61 74 79 70 65 20 66 6f 72 20 61 20 63 6f  atatype for a co
2430: 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d 70 6c  lumn, for exampl
2440: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 20 73  e.  However, a s
2450: 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73 74 65  impler.and faste
2460: 72 20 70 72 6f 63 65 64 75 72 65 20 63 61 6e 20  r procedure can 
2470: 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 75 73  optionally be us
2480: 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68 61 6e  ed for.some chan
2490: 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 20 61  ges that do no a
24a0: 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64 69 73  ffect the on-dis
24b0: 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61 6e 79  k content in any
24c0: 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77   way..The follow
24d0: 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72 6f 63  ing simpler proc
24e0: 65 64 75 72 65 20 69 73 20 61 70 70 72 6f 70 72  edure is appropr
24f0: 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76 69 6e  iate for removin
2500: 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49  g.CHECK or FOREI
2510: 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55  GN KEY or NOT NU
2520: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  LL constraints,.
2530: 72 65 6e 61 6d 69 6e 67 20 63 6f 6c 75 6d 6e 73  renaming columns
2540: 2c 20 6f 72 20 61 64 64 69 6e 67 20 6f 72 20 72  , or adding or r
2550: 65 6d 6f 76 69 6e 67 20 6f 72 20 63 68 61 6e 67  emoving or chang
2560: 69 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ing default valu
2570: 65 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a  es on.a column..
2580: 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74  .<ol>.<lI><p> St
2590: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
25a0: 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20  n...<li><p> Run 
25b0: 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  [PRAGMA schema_v
25c0: 65 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72  ersion] to deter
25d0: 6d 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e 74  mine the current
25e0: 20 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20   schema.version 
25f0: 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e 75  number.  This nu
2600: 6d 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65 65  mber will be nee
2610: 64 65 64 20 66 6f 72 20 73 74 65 70 20 36 20 62  ded for step 6 b
2620: 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41  elow...<li><p> A
2630: 63 74 69 76 61 74 65 20 73 63 68 65 6d 61 20 65  ctivate schema e
2640: 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50  diting using .[P
2650: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
2660: 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77  chema | PRAGMA w
2670: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
2680: 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e  N]...<li><p> Run
2690: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61   an [UPDATE] sta
26a0: 74 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67 65  tement to change
26b0: 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
26c0: 6f 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74 68  of table X.in th
26d0: 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e [sqlite_master
26e0: 20 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45   table]: .UPDATE
26f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53   sqlite_master S
2700: 45 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45  ET sql=... WHERE
2710: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e   type='table' AN
2720: 44 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c  D name='X';.<p><
2730: 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e  em>Caution:</em>
2740: 20 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e 67    Making a chang
2750: 65 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  e to the sqlite_
2760: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69 6b  master table lik
2770: 65 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64  e this will.rend
2780: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
2790: 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65  corrupt and unre
27a0: 61 64 61 62 6c 65 20 69 66 20 74 68 65 20 63 68  adable if the ch
27b0: 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20  ange contains.a 
27c0: 73 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20 49  syntax error.  I
27d0: 74 20 69 73 20 73 75 67 67 65 73 74 65 64 20 74  t is suggested t
27e0: 68 61 74 20 63 61 72 65 66 75 6c 20 74 65 73 74  hat careful test
27f0: 69 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41 54  ing of the UPDAT
2800: 45 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20 64  E.statement be d
2810: 6f 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61 74  one on a separat
2820: 65 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73 65  e blank database
2830: 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20   prior to using 
2840: 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65  it on.a database
2850: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f   containing impo
2860: 72 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69  rtant data...<li
2870: 3e 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61 6e  ><p> If the chan
2880: 67 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61 6c  ge to table X al
2890: 73 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65 72  so affects other
28a0: 20 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65 78   tables or index
28b0: 65 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20 61  es or.triggers a
28c0: 72 65 20 76 69 65 77 73 20 77 69 74 68 69 6e 20  re views within 
28d0: 73 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e  schema, then run
28e0: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
28f0: 65 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74  ents to modify.t
2900: 68 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c 65  hose other table
2910: 73 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76 69  s indexes and vi
2920: 65 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78  ews too.  For ex
2930: 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e 61  ample, if the na
2940: 6d 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63  me of.a column c
2950: 68 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45  hanges, all FORE
2960: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
2970: 6e 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20 69  nts, triggers, i
2980: 6e 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65 77  ndexes, and.view
2990: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
29a0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  that column must
29b0: 20 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70   be modified..<p
29c0: 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65  ><em>Caution:</e
29d0: 6d 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20  m>  Once again, 
29e0: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74  making changes t
29f0: 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  o the sqlite_mas
2a00: 74 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20  ter .table like 
2a10: 74 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65 72  this will render
2a20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2a30: 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64  rrupt and unread
2a40: 61 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68 61  able if the .cha
2a50: 6e 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  nge contains an 
2a60: 65 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c  error.  Carefull
2a70: 79 20 74 65 73 74 20 6f 66 20 74 68 69 73 20 65  y test of this e
2a80: 6e 74 69 72 65 20 70 72 6f 63 65 64 75 72 65 0a  ntire procedure.
2a90: 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 74 65  on a separate te
2aa0: 73 74 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  st database prio
2ab0: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2ac0: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2ad0: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2ae0: 20 64 61 74 61 20 61 6e 64 2f 6f 72 20 6d 61 6b   data and/or mak
2af0: 65 20 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20  e backup copies 
2b00: 6f 66 0a 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  of.important dat
2b10: 61 62 61 73 65 73 20 70 72 69 6f 72 20 74 6f 20  abases prior to 
2b20: 72 75 6e 6e 69 6e 67 20 74 68 69 73 20 70 72 6f  running this pro
2b30: 63 65 64 75 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e  cedure...<li><p>
2b40: 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 73   Increment the s
2b50: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
2b60: 6d 62 65 72 20 75 73 69 6e 67 0a 5b 50 52 41 47  mber using.[PRAG
2b70: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
2b80: 6e 20 7c 20 50 52 41 47 4d 41 20 73 63 68 65 6d  n | PRAGMA schem
2b90: 61 5f 76 65 72 73 69 6f 6e 3d 58 5d 20 77 68 65  a_version=X] whe
2ba0: 72 65 20 58 20 69 73 20 6f 6e 65 0a 6d 6f 72 65  re X is one.more
2bb0: 20 74 68 61 6e 20 74 68 65 20 6f 6c 64 20 73 63   than the old sc
2bc0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
2bd0: 62 65 72 20 66 6f 75 6e 64 20 69 6e 20 73 74 65  ber found in ste
2be0: 70 20 32 20 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e  p 2 above...<li>
2bf0: 3c 70 3e 20 44 69 73 61 62 6c 65 20 73 63 68 65  <p> Disable sche
2c00: 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67  ma editing using
2c10: 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62   .[PRAGMA writab
2c20: 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47  le_schema | PRAG
2c30: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
2c40: 6d 61 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ma=OFF]...<li><p
2c50: 3e 20 28 4f 70 74 69 6f 6e 61 6c 29 20 52 75 6e  > (Optional) Run
2c60: 20 5b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   [PRAGMA integri
2c70: 74 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ty_check] to ver
2c80: 69 66 79 20 74 68 61 74 20 74 68 65 0a 73 63 68  ify that the.sch
2c90: 65 6d 61 20 63 68 61 6e 67 65 73 20 64 69 64 20  ema changes did 
2ca0: 6e 6f 74 20 64 61 6d 61 67 65 20 74 68 65 20 64  not damage the d
2cb0: 61 74 61 62 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70  atabase...<li><p
2cc0: 3e 20 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61  > Commit the tra
2cd0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64  nsaction started
2ce0: 20 6f 6e 20 73 74 65 70 20 31 20 61 62 6f 76 65   on step 1 above
2cf0: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73  ..</ol>..<p>If s
2d00: 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73 69  ome future versi
2d10: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 61 64 64  on of SQLite add
2d20: 73 20 6e 65 77 20 41 4c 54 45 52 20 54 41 42 4c  s new ALTER TABL
2d30: 45 20 63 61 70 61 62 69 6c 69 74 69 65 73 2c 20  E capabilities, 
2d40: 0a 74 68 6f 73 65 20 63 61 70 61 62 69 6c 69 74  .those capabilit
2d50: 69 65 73 20 77 69 6c 6c 20 76 65 72 79 20 6c 69  ies will very li
2d60: 6b 65 6c 79 20 75 73 65 20 6f 6e 65 20 6f 66 20  kely use one of 
2d70: 74 68 65 20 74 77 6f 20 70 72 6f 63 65 64 75 72  the two procedur
2d80: 65 73 0a 6f 75 74 6c 69 6e 65 64 20 61 62 6f 76  es.outlined abov
2d90: 65 2e 0a 0a 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65  e...<tcl>.#  One
2da0: 20 6f 66 20 74 68 65 20 72 65 61 73 6f 6e 73 20   of the reasons 
2db0: 74 68 61 74 0a 23 20 53 51 4c 69 74 65 20 64 6f  that.# SQLite do
2dc0: 65 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  es not currently
2dd0: 20 73 75 70 70 6f 72 74 20 6d 6f 72 65 20 41 4c   support more AL
2de0: 54 45 52 20 54 41 42 4c 45 20 63 61 70 61 62 69  TER TABLE capabi
2df0: 6c 69 74 69 65 73 20 69 73 20 74 68 61 74 0a 23  lities is that.#
2e00: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 73   the procedure s
2e10: 68 6f 77 6e 20 61 62 6f 76 65 20 69 73 20 64 69  hown above is di
2e20: 66 66 69 63 75 6c 74 20 74 6f 20 61 75 74 6f 6d  fficult to autom
2e30: 61 74 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74  ate for an arbit
2e40: 72 61 72 79 20 73 63 68 65 6d 61 2e 0a 23 20 50  rary schema..# P
2e50: 61 72 74 69 63 75 6c 61 72 6c 79 20 74 72 6f 75  articularly trou
2e60: 62 6c 65 73 6f 6d 65 20 61 72 65 61 73 20 61 72  blesome areas ar
2e70: 65 20 69 64 65 6e 74 69 66 79 69 6e 67 20 61 6c  e identifying al
2e80: 6c 20 76 69 65 77 73 20 61 73 73 6f 63 69 61 74  l views associat
2e90: 65 64 20 77 69 74 68 0a 23 20 74 61 62 6c 65 20  ed with.# table 
2ea0: 58 20 69 6e 20 73 74 65 70 20 31 20 61 6e 64 20  X in step 1 and 
2eb0: 63 72 65 61 74 69 6e 67 20 6e 65 77 20 76 69 65  creating new vie
2ec0: 77 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  ws and triggers 
2ed0: 74 68 61 74 20 61 72 65 20 63 6f 6d 70 61 74 69  that are compati
2ee0: 62 6c 65 0a 23 20 77 69 74 68 20 74 68 65 20 61  ble.# with the a
2ef0: 6c 74 65 72 65 64 20 73 63 68 65 6d 61 20 66 6f  ltered schema fo
2f00: 72 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65  r table X in ste
2f10: 70 20 36 2e 20 20 49 74 20 69 73 20 61 20 74 72  p 6.  It is a tr
2f20: 69 63 6b 79 20 62 75 74 20 73 6f 6c 76 61 62 6c  icky but solvabl
2f30: 65 0a 23 20 70 72 6f 62 6c 65 6d 20 74 6f 20 63  e.# problem to c
2f40: 72 65 61 74 65 20 63 6f 64 65 20 74 68 61 74 20  reate code that 
2f50: 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20 74 68 65  will perform the
2f60: 20 73 74 65 70 73 20 61 62 6f 76 65 20 0a 23 20   steps above .# 
2f70: 66 6f 72 20 22 72 65 61 73 6f 6e 61 62 6c 65 22  for "reasonable"
2f80: 20 73 63 68 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c   schemas commonl
2f90: 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 61 63 74  y found in pract
2fa0: 69 63 65 2e 20 20 0a 23 20 42 75 74 20 74 68 65  ice.  .# But the
2fb0: 72 65 20 65 78 69 73 74 20 6d 61 6c 65 76 6f 6c  re exist malevol
2fc0: 65 6e 74 20 73 63 68 65 6d 61 73 20 66 6f 72 20  ent schemas for 
2fd0: 77 68 69 63 68 0a 23 20 74 68 65 73 65 20 73 74  which.# these st
2fe0: 65 70 73 20 61 72 65 20 6d 61 64 64 65 6e 69 6e  eps are maddenin
2ff0: 67 6c 79 20 64 69 66 66 69 63 75 6c 74 20 74 6f  gly difficult to
3000: 20 64 6f 20 63 6f 72 72 65 63 74 6c 79 2e 20 20   do correctly.  
3010: 52 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  Rather than crea
3020: 74 65 0a 23 20 41 4c 54 45 52 20 54 41 42 4c 45  te.# ALTER TABLE
3030: 20 66 65 61 74 75 72 65 73 20 74 68 61 74 20 77   features that w
3040: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 39 39  ork correctly 99
3050: 2e 39 25 20 6f 66 20 74 68 65 20 74 69 6d 65 20  .9% of the time 
3060: 62 75 74 20 70 6f 73 73 69 62 6c 79 0a 23 20 63  but possibly.# c
3070: 6f 72 72 75 70 74 20 74 68 65 20 73 63 68 65 6d  orrupt the schem
3080: 61 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 30  a on the other 0
3090: 2e 31 25 2c 20 74 68 65 20 53 51 4c 69 74 65 20  .1%, the SQLite 
30a0: 64 65 76 65 6c 6f 70 65 72 73 20 68 61 76 65 20  developers have 
30b0: 64 65 63 69 64 65 64 0a 23 20 74 6f 20 70 75 73  decided.# to pus
30c0: 68 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 69 6e  h the problem in
30d0: 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
30e0: 6f 6e 20 64 6f 6d 61 69 6e 2c 20 77 68 65 72 65  on domain, where
30f0: 20 69 74 20 69 73 20 6d 75 63 68 20 65 61 73 69   it is much easi
3100: 65 72 0a 23 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c  er.# to solve..<
3110: 2f 74 63 6c 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  /tcl>...<tcl>.##
3120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
3170: 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61  tion {ANALYZE} a
3180: 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a  nalyze ANALYZE..
3190: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
31a0: 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d 73  iagram analyze-s
31b0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
31c0: 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d  ^The ANALYZE com
31d0: 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74 61  mand gathers sta
31e0: 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74 61  tistics about ta
31f0: 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65 73  bles and.indices
3200: 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 20   and stores the 
3210: 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72 6d  collected inform
3220: 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e  ation.in [intern
3230: 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74 68  al tables] of th
3240: 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65  e database where
3250: 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
3260: 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73 20  izer can.access 
3270: 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
3280: 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68 65  and use it to he
3290: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 71  lp make better q
32a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68  uery planning ch
32b0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
32c0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
32d0: 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  n, all attached 
32e0: 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e  databases are.an
32f0: 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 73  alyzed.  ^If a s
3300: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 67 69  chema name is gi
3310: 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d  ven as the argum
3320: 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61  ent, then all ta
3330: 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73  bles.and indices
3340: 20 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74   in that one dat
3350: 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a  abase are analyz
3360: 65 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72  ed.  .^If the ar
3370: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
3380: 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c  e name, then onl
3390: 79 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  y that table and
33a0: 20 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73   the.indices ass
33b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
33c0: 74 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c  t table are anal
33d0: 79 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61  yzed.  ^If the a
33e0: 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e  rgument.is an in
33f0: 64 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f  dex name, then o
3400: 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64  nly that one ind
3410: 65 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c  ex is analyzed.<
3420: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65  /p>..<p> ^The de
3430: 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61  fault implementa
3440: 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20  tion stores all 
3450: 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20  statistics in a 
3460: 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d  single.table nam
3470: 65 64 20 22 5b 73 71 6c 69 74 65 5f 73 74 61 74  ed "[sqlite_stat
3480: 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c 69 74 65  1]".  ^If SQLite
3490: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
34a0: 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e  h the.[SQLITE_EN
34b0: 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 70 74 69  ABLE_STAT3] opti
34c0: 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75 74 20 74  on and without t
34d0: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
34e0: 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c  E_STAT4].option,
34f0: 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   then additional
3500: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
3510: 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64  is.collected and
3520: 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69   stored in [sqli
3530: 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20  te_stat3].. ^If 
3540: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
3550: 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  ed with the.[SQL
3560: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
3570: 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61  ] option, then a
3580: 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67  dditional histog
3590: 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c  ram data is.coll
35a0: 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  ected and stored
35b0: 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74   in [sqlite_stat
35c0: 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f  4]..Older versio
35d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
35e0: 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74  ld make use of t
35f0: 68 65 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 32  he [sqlite_stat2
3600: 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d  ] table.when com
3610: 70 69 6c 65 64 20 77 69 74 68 20 5b 53 51 4c 49  piled with [SQLI
3620: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d  TE_ENABLE_STAT2]
3630: 20 62 75 74 20 61 6c 6c 20 72 65 63 65 6e 74 20   but all recent 
3640: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
3650: 74 65 20 69 67 6e 6f 72 65 20 74 68 65 20 73 71  te ignore the sq
3660: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
3670: 2e 0a 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65  ..Future enhance
3680: 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65  ments may create
3690: 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74  .additional [int
36a0: 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d 20 77 69  ernal tables] wi
36b0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
36c0: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
36d0: 77 69 74 68 0a 66 69 6e 61 6c 20 64 69 67 69 74  with.final digit
36e0: 20 6c 61 72 67 65 72 20 74 68 61 6e 20 22 34 22   larger than "4"
36f0: 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 74  ..All of these t
3700: 61 62 6c 65 73 20 61 72 65 20 63 6f 6c 6c 65 63  ables are collec
3710: 74 69 76 65 6c 79 20 72 65 66 65 72 72 65 64 20  tively referred 
3720: 74 6f 20 61 73 20 22 73 74 61 74 69 73 74 69 63  to as "statistic
3730: 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a  s tables"..</p>.
3740: 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e  .<p> ^The conten
3750: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3760: 69 63 73 20 74 61 62 6c 65 73 20 63 61 6e 20 62  ics tables can b
3770: 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20  e queried using 
3780: 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e  [SELECT].and can
3790: 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
37a0: 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20  g the [DELETE], 
37b0: 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55  [INSERT], and [U
37c0: 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  PDATE] commands.
37d0: 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20 54 41 42  .^(The [DROP TAB
37e0: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  LE] command work
37f0: 73 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  s on statistics 
3800: 74 61 62 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c  tables.as of SQL
3810: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
3820: 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52  9.)^.^The [ALTER
3830: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
3840: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e  does not work on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65 20  es..Appropriate 
3870: 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75  care should be u
3880: 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  sed when changin
3890: 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
38a0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 0a   the statistics.
38b0: 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69  tables as invali
38c0: 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61  d content can ca
38d0: 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65  use SQLite to se
38e0: 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74  lect inefficient
38f0: 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47  .query plans.  G
3900: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e  enerally speakin
3910: 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f  g, one should no
3920: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e  t modify the con
3930: 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74  tent of.the stat
3940: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3950: 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f   any mechanism o
3960: 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69  ther than invoki
3970: 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63  ng the.ANALYZE c
3980: 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b  ommand.  .See "[
3990: 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f  Manual Control O
39a0: 66 20 51 75 65 72 79 20 50 6c 61 6e 73 20 55 73  f Query Plans Us
39b0: 69 6e 67 20 53 51 4c 49 54 45 5f 53 54 41 54 20  ing SQLITE_STAT 
39c0: 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72  Tables]" for.fur
39d0: 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ther information
39e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74  .</p>..<p> ^Stat
39f0: 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20  istics gathered 
3a00: 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e  by ANALYZE are n
3a10: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
3a20: 20 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20   updated as.the 
3a30: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64  content of the d
3a40: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e  atabase changes.
3a50: 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
3a60: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3a70: 0a 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69  .changes signifi
3a80: 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68  cantly, or if th
3a90: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
3aa0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20  a changes, then 
3ab0: 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69  one should.consi
3ac0: 64 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68  der rerunning th
3ad0: 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e ANALYZE comman
3ae0: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70  d in order to up
3af0: 64 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74  date the statist
3b00: 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68  ics.</p>..<p> Th
3b10: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
3b20: 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e 74 65 6e  loads the conten
3b30: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3b40: 69 63 73 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20  ics tables.into 
3b50: 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74 68 65 20  memory when the 
3b60: 73 63 68 65 6d 61 20 69 73 20 72 65 61 64 2e 20  schema is read. 
3b70: 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e   ^Hence, when an
3b80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61   application.cha
3b90: 6e 67 65 73 20 74 68 65 20 73 74 61 74 69 73 74  nges the statist
3ba0: 69 63 73 20 74 61 62 6c 65 73 20 64 69 72 65 63  ics tables direc
3bb0: 74 6c 79 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  tly, SQLite will
3bc0: 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74 65 6c 79   not immediately
3bd0: 0a 6e 6f 74 69 63 65 20 74 68 65 20 63 68 61 6e  .notice the chan
3be0: 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61  ges. ^An applica
3bf0: 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74  tion.can force t
3c00: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
3c10: 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
3c20: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3c30: 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41   by running.<b>A
3c40: 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61  NALYZE sqlite_ma
3c50: 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a  ster</b>. </p>..
3c60: 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  <p> ..<tcl>.####
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
3cc0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
3cd0: 41 53 45 7d 20 61 74 74 61 63 68 20 7b 61 74 74  ASE} attach {att
3ce0: 61 63 68 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a  ached *ATTACH}..
3cf0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
3d00: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
3d10: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
3d20: 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42  The ATTACH DATAB
3d30: 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64  ASE statement ad
3d40: 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  ds another datab
3d50: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65  ase .file to the
3d60: 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62 61   current [databa
3d70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20  se connection]. 
3d80: 0a 44 61 74 61 62 61 73 65 20 66 69 6c 65 73 20  .Database files 
3d90: 74 68 61 74 20 77 65 72 65 20 70 72 65 76 69 6f  that were previo
3da0: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 63 61  usly attached ca
3db0: 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 75 73 69  n be removed usi
3dc0: 6e 67 0a 74 68 65 20 5b 44 45 54 41 43 48 20 44  ng.the [DETACH D
3dd0: 41 54 41 42 41 53 45 5d 20 63 6f 6d 6d 61 6e 64  ATABASE] command
3de0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 6e  ...<p>^The filen
3df0: 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ame for the data
3e00: 62 61 73 65 20 74 6f 20 62 65 20 61 74 74 61 63  base to be attac
3e10: 68 65 64 20 69 73 20 74 68 65 20 76 61 6c 75 65  hed is the value
3e20: 20 6f 66 0a 74 68 65 20 65 78 70 72 65 73 73 69   of.the expressi
3e30: 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 62  on that occurs b
3e40: 65 66 6f 72 65 20 74 68 65 20 41 53 20 6b 65 79  efore the AS key
3e50: 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  word..^The filen
3e60: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
3e70: 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ase follows the 
3e80: 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61  same semantics a
3e90: 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61  s the.filename a
3ea0: 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69  rgument to [sqli
3eb0: 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20  te3_open()] and 
3ec0: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  [sqlite3_open_v2
3ed0: 28 29 5d 3b 20 74 68 65 0a 73 70 65 63 69 61 6c  ()]; the.special
3ee0: 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a   name "[:memory:
3ef0: 5d 22 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ]" results in an
3f00: 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61   [in-memory data
3f10: 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70  base] and an.emp
3f20: 74 79 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74  ty string result
3f30: 73 20 69 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f  s in a new tempo
3f40: 72 61 72 79 20 64 61 74 61 62 61 73 65 2e 0a 5e  rary database..^
3f50: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 61 72 67  The filename arg
3f60: 75 6d 65 6e 74 20 63 61 6e 20 62 65 20 61 20 5b  ument can be a [
3f70: 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66  URI filename] if
3f80: 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 20 70 72   URI filename pr
3f90: 6f 63 65 73 73 69 6e 67 0a 69 73 20 65 6e 61 62  ocessing.is enab
3fa0: 6c 65 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  le on the databa
3fb0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
3fc0: 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
3fd0: 76 69 6f 72 20 69 73 20 66 6f 72 0a 55 52 49 20  vior is for.URI 
3fe0: 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20 62 65 20  filenames to be 
3ff0: 64 69 73 61 62 6c 65 64 2c 20 68 6f 77 65 76 65  disabled, howeve
4000: 72 20 74 68 61 74 20 6d 69 67 68 74 20 63 68 61  r that might cha
4010: 6e 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20  nge in a future 
4020: 72 65 6c 65 61 73 65 0a 6f 66 20 53 51 4c 69 74  release.of SQLit
4030: 65 2c 20 73 6f 20 61 70 70 6c 69 63 61 74 69 6f  e, so applicatio
4040: 6e 20 64 65 76 65 6c 6f 70 65 72 73 20 61 72 65  n developers are
4050: 20 61 64 76 69 73 65 64 20 74 6f 20 70 6c 61 6e   advised to plan
4060: 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c   accordingly...<
4070: 70 3e 54 68 65 20 6e 61 6d 65 20 74 68 61 74 20  p>The name that 
4080: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
4090: 20 41 53 20 6b 65 79 77 6f 72 64 20 69 73 20 74   AS keyword is t
40a0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
40b0: 61 74 61 62 61 73 65 0a 75 73 65 64 20 69 6e 74  atabase.used int
40c0: 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
40d0: 65 2e 0a 5e 54 68 65 20 73 63 68 65 6d 61 2d 6e  e..^The schema-n
40e0: 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20  ames 'main' and 
40f0: 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f  .'temp' refer to
4100: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
4110: 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  se and the datab
4120: 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65  ase used for .te
4130: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
4140: 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74   ^The main and t
4150: 65 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61  emp databases ca
4160: 6e 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64  nnot be attached
4170: 20 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70   or.detached.</p
4180: 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20  >..<p> ^(Tables 
4190: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
41a0: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72  atabase can be r
41b0: 65 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67  eferred to using
41c0: 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e   the syntax .<i>
41d0: 73 63 68 65 6d 61 2d 6e 61 6d 65 2e 74 61 62 6c  schema-name.tabl
41e0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41f0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
4200: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4210: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4220: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4230: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4240: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4250: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 73 63  , then the.<i>sc
4260: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  hema-name</i> pr
4270: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
4280: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
4290: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
42a0: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
42b0: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
42c0: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
42d0: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  .<i>schema-name<
42e0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
42f0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
4300: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
4310: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
4320: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
4330: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
4340: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
4350: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
4360: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
4370: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
4380: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
4390: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
43a0: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
43b0: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
43c0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
43d0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
43e0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
43f0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
4400: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
4410: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
4420: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
4430: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
4440: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
4450: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
4460: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
4470: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
4480: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
4490: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
44a0: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
44b0: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
44c0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
44d0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
44e0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
44f0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
4500: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
4510: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
4520: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
4530: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
4540: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
4550: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
4560: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
4570: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
4580: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
4590: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
45a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
45b0: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
45c0: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
45d0: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
45e0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
45f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
4600: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
4660: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
4670: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
4680: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
4690: 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63 75 72 73  OLLBACK}..Recurs
46a0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
46b0: 20 62 65 67 69 6e 2d 73 74 6d 74 0a 52 65 63 75   begin-stmt.Recu
46c0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
46d0: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 52  am commit-stmt.R
46e0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46f0: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
4700: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
4710: 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20  ^No changes can 
4720: 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  be made to the d
4730: 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77  atabase except w
4740: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4750: 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e  ion..^Any comman
4760: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
4770: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
4780: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
4790: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
47a0: 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c  an [SELECT]) wil
47b0: 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
47c0: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
47d0: 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f  ion if.one is no
47e0: 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66  t already in eff
47f0: 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63  ect.  ^Automatic
4800: 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61  ally started tra
4810: 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f  nsactions.are co
4820: 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65  mmitted when the
4830: 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69   last query fini
4840: 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  shes..</p>..<p>.
4850: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4860: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
4870: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
4880: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
4890: 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69  ^(Such transacti
48a0: 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73  ons usually pers
48b0: 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ist until the ne
48c0: 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt.COMMIT or ROL
48d0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20  LBACK command.  
48e0: 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  But a transactio
48f0: 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c  n will also .ROL
4900: 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74  LBACK if the dat
4910: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
4920: 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  or if an error o
4930: 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f  ccurs.and the RO
4940: 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20  LLBACK conflict 
4950: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
4960: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
4970: 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63  d.)^.See the doc
4980: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
4990: 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a  e [ON CONFLICT].
49a0: 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74  clause for addit
49b0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
49c0: 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c  n about the ROLL
49d0: 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65  BACK.conflict re
49e0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
49f0: 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45  hm..</p>..<p>.^E
4a00: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69  ND TRANSACTION i
4a10: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43  s an alias for C
4a20: 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  OMMIT..</p>..<p>
4a30: 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20   ^(Transactions 
4a40: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45  created using BE
4a50: 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20  GIN...COMMIT do 
4a60: 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72  not nest.)^.^For
4a70: 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
4a80: 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53  ions, use the [S
4a90: 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52  AVEPOINT] and [R
4aa0: 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73  ELEASE] commands
4ab0: 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f  ..The "TO SAVEPO
4ac0: 49 4e 54 20 3c 79 79 74 65 72 6d 3e 6e 61 6d 65  INT <yyterm>name
4ad0: 3c 2f 79 79 74 65 72 6d 3e 22 20 63 6c 61 75 73  </yyterm>" claus
4ae0: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
4af0: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
4b00: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
4b10: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
4b20: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
4b30: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
4b40: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
4b50: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
4b60: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
4b70: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
4b80: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
4b90: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
4ba0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
4bb0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
4bc0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
4bd0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
4be0: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
4bf0: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
4c00: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
4c10: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
4c20: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
4c30: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
4c40: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
4c50: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
4c60: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
4c70: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
4c80: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
4c90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4ca0: 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64 69 61 74  ragment immediat
4cb0: 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45 44 49 41  e {BEGIN IMMEDIA
4cc0: 54 45 7d 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  TE} {BEGIN EXCLU
4cd0: 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a  SIVE}</tcl>.<p>.
4ce0: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4cf0: 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20 69  n be deferred, i
4d00: 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78 63  mmediate, or exc
4d10: 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20 64  lusive.  .^The d
4d20: 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74 69  efault transacti
4d30: 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20 64  on behavior is d
4d40: 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72 72  eferred..^Deferr
4d50: 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  ed means that no
4d60: 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75 69   locks are acqui
4d70: 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  red.on the datab
4d80: 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64 61  ase until the da
4d90: 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74 20  tabase is first 
4da0: 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75 73  accessed.  ^Thus
4db0: 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65 64   with a.deferred
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
4dd0: 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  e BEGIN statemen
4de0: 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e 6f  t itself does no
4df0: 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69 6c  thing to the.fil
4e00: 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b 73  esystem.  ^Locks
4e10: 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65  .are not acquire
4e20: 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
4e30: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
4e40: 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68 65  operation.  ^The
4e50: 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65 72   first read.oper
4e60: 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20  ation against a 
4e70: 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65 73  database creates
4e80: 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b   a [SHARED] lock
4e90: 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a 77   and the first.w
4ea0: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 63  rite operation c
4eb0: 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52 56  reates a [RESERV
4ec0: 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65 63  ED] lock.   ^Bec
4ed0: 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73 69  ause the acquisi
4ee0: 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73  tion of.locks is
4ef0: 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20   deferred until 
4f00: 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c  they are needed,
4f10: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
4f20: 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72  that another.thr
4f30: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63  ead or process c
4f40: 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 65  ould create a se
4f50: 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74 69  parate transacti
4f60: 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a  on and write to.
4f70: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66 74  the database aft
4f80: 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20  er the BEGIN on 
4f90: 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65  the current thre
4fa0: 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64 2e  ad has executed.
4fb0: 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  .^If the transac
4fc0: 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61 74  tion is immediat
4fd0: 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56 45  e, then [RESERVE
4fe0: 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63 71  D] locks.are acq
4ff0: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
5000: 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20 61  abases as soon a
5010: 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  s the BEGIN comm
5020: 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64 2c  and is.executed,
5030: 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e 67   without waiting
5040: 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61 73   for the.databas
5050: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20 5e  e to be used.  ^
5060: 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49 4d  After a BEGIN IM
5070: 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f 74 68  MEDIATE, .no oth
5080: 65 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  er [database con
5090: 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20 62 65  nection] will be
50a0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
50b0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6f  o the database o
50c0: 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d  r.do a BEGIN IMM
50d0: 45 44 49 41 54 45 20 6f 72 20 42 45 47 49 4e 20  EDIATE or BEGIN 
50e0: 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f 74 68  EXCLUSIVE.  ^Oth
50f0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61 6e  er processes can
5100: 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65 61   continue.to rea
5110: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
5120: 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20 5e  ase, however.  ^
5130: 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72 61  An exclusive tra
5140: 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73 0a  nsaction causes.
5150: 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f 63 6b  [EXCLUSIVE] lock
5160: 73 20 74 6f 20 62 65 20 61 63 71 75 69 72 65 64  s to be acquired
5170: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
5180: 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  s.  ^After a BEG
5190: 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 6e 6f  IN.EXCLUSIVE, no
51a0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
51b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65 78 63   connection] exc
51c0: 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f 75 6e  ept for [read_un
51d0: 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e 6e 65  committed].conne
51e0: 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 61  ctions will be a
51f0: 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65 20  ble to read the 
5200: 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f 20  database and no 
5210: 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  other connection
5220: 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70 74 69   without.excepti
5230: 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  on will be able 
5240: 74 6f 20 77 72 69 74 65 20 74 68 65 20 64 61 74  to write the dat
5250: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
5260: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
5270: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
5280: 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63 69 74  p>.^(An implicit
5290: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20   transaction (a 
52a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
52b0: 20 69 73 20 73 74 61 72 74 65 64 20 61 75 74 6f   is started auto
52c0: 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61  matically,.not a
52d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
52e0: 72 74 65 64 20 62 79 20 42 45 47 49 4e 29 20 69  rted by BEGIN) i
52f0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f  s committed auto
5300: 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74  matically when.t
5310: 68 65 20 6c 61 73 74 20 61 63 74 69 76 65 20 73  he last active s
5320: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
5330: 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  s.  A statement 
5340: 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74  finishes when it
5350: 73 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65  s.prepared state
5360: 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33  ment is [sqlite3
5370: 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73 65 74  _reset() | reset
5380: 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69  ] or.[sqlite3_fi
5390: 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c  nalize() | final
53a0: 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20  ized].  An open 
53b0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75  [sqlite3_blob] u
53c0: 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e  sed for.incremen
53d0: 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75  tal BLOB I/O cou
53e0: 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69  nts as an unfini
53f0: 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  shed statement. 
5400: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c   The [sqlite3_bl
5410: 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65  ob].finishes whe
5420: 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33  n it is [sqlite3
5430: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20  _blob_close() | 
5440: 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a  closed].)^.</p>.
5450: 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c 69 63  .<p>.^The explic
5460: 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  it COMMIT comman
5470: 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61 74 65  d runs immediate
5480: 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72  ly, even if ther
5490: 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20 5b 53  e are.pending [S
54a0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
54b0: 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  s.  ^However, if
54c0: 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64 69   there are pendi
54d0: 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  ng.write operati
54e0: 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49 54 20  ons, the COMMIT 
54f0: 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61 69  command.will fai
5500: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  l with an error 
5510: 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55 53  code [SQLITE_BUS
5520: 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41  Y]..</p>..<p>.^A
5530: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78 65  n attempt to exe
5540: 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68  cute COMMIT migh
5550: 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69 6e  t also result in
5560: 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59   an [SQLITE_BUSY
5570: 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69 66  ] return code.if
5580: 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72 65   an another thre
5590: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68 61  ad or process ha
55a0: 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63 6b  s a [shared lock
55b0: 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] on the databas
55c0: 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65 64  e.that prevented
55d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
55e0: 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  om being updated
55f0: 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49 54 20  .  ^When COMMIT 
5600: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
5610: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
5620: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
5630: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
5640: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
5650: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
5660: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
5670: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
5680: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 76  ..</p>..<p>.In v
5690: 65 72 79 20 6f 6c 64 20 76 65 72 73 69 6f 6e 73  ery old versions
56a0: 20 6f 66 20 53 51 4c 69 74 65 20 28 62 65 66 6f   of SQLite (befo
56b0: 72 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  re version 3.7.1
56c0: 31 20 63 69 72 63 61 20 32 30 31 32 2d 30 33 2d  1 circa 2012-03-
56d0: 32 30 29 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  20).the ROLLBACK
56e0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
56f0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 0a 5b  an error code .[
5700: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20  SQLITE_BUSY] if 
5710: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 70 65  there are any pe
5720: 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20  nding queries.  
5730: 5e 49 6e 20 6d 6f 72 65 20 72 65 63 65 6e 74 0a  ^In more recent.
5740: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5750: 74 65 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  te, the ROLLBACK
5760: 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 61 6e   will proceed an
5770: 64 20 70 65 6e 64 69 6e 67 20 73 74 61 74 65 6d  d pending statem
5780: 65 6e 74 73 0a 77 69 6c 6c 20 6f 66 74 65 6e 20  ents.will often 
5790: 62 65 20 61 62 6f 72 74 65 64 2c 20 63 61 75 73  be aborted, caus
57a0: 69 6e 67 20 74 68 65 6d 20 74 6f 20 72 65 74 75  ing them to retu
57b0: 72 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 41 42  rn an [SQLITE_AB
57c0: 4f 52 54 5d 20 6f 72 0a 5b 53 51 4c 49 54 45 5f  ORT] or.[SQLITE_
57d0: 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 5d 20  ABORT_ROLLBACK] 
57e0: 65 72 72 6f 72 2e 0a 5e 49 6e 20 53 51 4c 69 74  error..^In SQLit
57f0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 38 20  e version 3.8.8 
5800: 61 6e 64 20 6c 61 74 65 72 2c 20 61 20 70 65 6e  and later, a pen
5810: 64 69 6e 67 20 72 65 61 64 20 77 69 6c 6c 20 63  ding read will c
5820: 6f 6e 74 69 6e 75 65 20 66 75 6e 63 74 69 6f 6e  ontinue function
5830: 69 6e 67 0a 61 66 74 65 72 20 74 68 65 20 52 4f  ing.after the RO
5840: 4c 4c 42 41 43 4b 20 61 73 20 6c 6f 6e 67 20 61  LLBACK as long a
5850: 73 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 64  s the ROLLBACK d
5860: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  oes not modify t
5870: 68 65 20 64 61 74 61 62 61 73 65 0a 73 63 68 65  he database.sche
5880: 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66  ma..</p>..<p>.If
5890: 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   [PRAGMA journal
58a0: 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f  _mode] is set to
58b0: 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62   OFF (thus disab
58c0: 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63  ling the rollbac
58d0: 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20  k journal.file) 
58e0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
58f0: 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  r of the ROLLBAC
5900: 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64  K command is und
5910: 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68  efined..</p>..<h
5920: 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72  3>Response To Er
5930: 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72  rors Within A Tr
5940: 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  ansaction</h3>..
5950: 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e  <p> ^(If certain
5960: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
5970: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
5980: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
5990: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
59a0: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
59b0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
59c0: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
59d0: 72 72 6f 72 73 20 74 68 61 74 20 63 61 6e 20 63  rrors that can c
59e0: 61 75 73 65 20 61 6e 20 61 75 74 6f 6d 61 74 69  ause an automati
59f0: 63 20 72 6f 6c 6c 62 61 63 6b 20 69 6e 63 6c 75  c rollback inclu
5a00: 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  de:</p>..<ul>.<l
5a10: 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  i> [SQLITE_FULL]
5a20: 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69  : database or di
5a30: 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51  sk full.<li> [SQ
5a40: 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73  LITE_IOERR]: dis
5a50: 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e  k I/O error.<li>
5a60: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20   [SQLITE_BUSY]: 
5a70: 64 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20  database in use 
5a80: 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  by another proce
5a90: 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ss.<li> [SQLITE_
5aa0: 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d  NOMEM]: out or m
5ab0: 65 6d 6f 72 79 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  emory.</ul>)^..<
5ac0: 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74  p>.^For all of t
5ad0: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
5ae0: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
5af0: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
5b00: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
5b10: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
5b20: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
5b30: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
5b40: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
5b50: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
5b60: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
5b70: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
5b80: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f  ransaction.  ^Ho
5b90: 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e  wever, .dependin
5ba0: 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  g on the stateme
5bb0: 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  nt being evaluat
5bc0: 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74  ed and the point
5bd0: 20 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72   at which the.er
5be0: 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d  ror occurs, it m
5bf0: 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72  ight be necessar
5c00: 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  y for SQLite to 
5c10: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e  rollback and.can
5c20: 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74  cel the entire t
5c30: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e  ransaction.  ^An
5c40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
5c50: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
5c60: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
5c70: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
5c80: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
5c90: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
5ca0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
5cb0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
5cc0: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
5cd0: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
5ce0: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
5cf0: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
5d00: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
5d10: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
5d20: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
5d30: 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61   ^If the .transa
5d40: 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64  ction has alread
5d50: 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61  y been rolled ba
5d60: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
5d70: 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65  .by the error re
5d80: 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65  sponse, then the
5d90: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
5da0: 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d will fail with
5db0: 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e   an.error, but n
5dc0: 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64  o harm is caused
5dd0: 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c   by this.</p>..<
5de0: 70 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e  p>Future version
5df0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
5e00: 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20  extend the list 
5e10: 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a  of errors which.
5e20: 6d 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f  might cause auto
5e30: 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f  matic transactio
5e40: 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74  n rollback.  Fut
5e50: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
5e60: 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
5e70: 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65  nge the error re
5e80: 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74  sponse.  In part
5e90: 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63  icular, we may.c
5ea0: 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66  hoose to simplif
5eb0: 79 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  y the interface 
5ec0: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
5ed0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a  ns of SQLite by.
5ee0: 63 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f  causing the erro
5ef0: 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63  rs above to forc
5f00: 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  e an uncondition
5f10: 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e  al rollback.</p>
5f20: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
5f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f70: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
5f80: 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65  {SAVEPOINT} save
5f90: 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54  point {SAVEPOINT
5fa0: 20 52 45 4c 45 41 53 45 7d 0a 0a 52 65 63 75 72   RELEASE}..Recur
5fb0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5fc0: 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74  m savepoint-stmt
5fd0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5fe0: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
5ff0: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
6010: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
6020: 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54  ..<p> ^SAVEPOINT
6030: 73 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f  s are a method o
6040: 66 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73  f creating trans
6050: 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72  actions, similar
6060: 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20   to.[BEGIN] and 
6070: 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74  [COMMIT], except
6080: 20 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f   that the SAVEPO
6090: 49 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20  INT and RELEASE 
60a0: 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d  commands.are nam
60b0: 65 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65  ed and may be ne
60c0: 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  sted.</p>..<p> ^
60d0: 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  The SAVEPOINT co
60e0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e  mmand starts a n
60f0: 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  ew transaction w
6100: 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65  ith a name..^The
6110: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d   transaction nam
6120: 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75  es need not be u
6130: 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50  nique..^(A SAVEP
6140: 4f 49 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72  OINT can be star
6150: 74 65 64 20 65 69 74 68 65 72 20 77 69 74 68 69  ted either withi
6160: 6e 20 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a  n or outside of.
6170: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
6180: 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20  MIT].)^  ^(When 
6190: 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74  a SAVEPOINT is t
61a0: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61  he outer-most sa
61b0: 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69  vepoint.and it i
61c0: 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b  s not within a [
61d0: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
61e0: 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  ] then the behav
61f0: 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20  ior is the.same 
6200: 61 73 20 42 45 47 49 4e 20 44 45 46 45 52 52 45  as BEGIN DEFERRE
6210: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e  D TRANSACTION.)^
6220: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
6230: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6240: 64 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74  d reverts the st
6250: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
6260: 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74  ase back to what
6270: 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74  .it was just aft
6280: 65 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  er the correspon
6290: 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20  ding SAVEPOINT. 
62a0: 20 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69   ^Note that unli
62b0: 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52  ke that.plain [R
62c0: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
62d0: 20 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f   (without the TO
62e0: 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f   keyword) the RO
62f0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6300: 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65  d.does not cance
6310: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
6320: 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20  n.  ^Instead of 
6330: 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74  cancelling the t
6340: 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20  ransaction,.the 
6350: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
6360: 61 6e 64 20 72 65 73 74 61 72 74 73 20 74 68 65  and restarts the
6370: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61   transaction aga
6380: 69 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  in at the beginn
6390: 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76  ing..^All interv
63a0: 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73  ening SAVEPOINTs
63b0: 20 61 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68   are canceled, h
63c0: 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  owever.</p>..<p>
63d0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
63e0: 6d 61 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b  mand is like a [
63f0: 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41  COMMIT] for a SA
6400: 56 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45  VEPOINT..^The RE
6410: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
6420: 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69  uses all savepoi
6430: 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20  nts back to and 
6440: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d  including the .m
6450: 6f 73 74 20 72 65 63 65 6e 74 20 73 61 76 65 70  ost recent savep
6460: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
6470: 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20  hing name to be 
6480: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
6490: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74   .transaction st
64a0: 61 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41  ack.  ^The RELEA
64b0: 53 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74  SE of an inner t
64c0: 72 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20  ransaction.does 
64d0: 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 63 68  not cause any ch
64e0: 61 6e 67 65 73 20 74 6f 20 62 65 20 77 72 69 74  anges to be writ
64f0: 74 65 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ten to the datab
6500: 61 73 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72  ase file; it mer
6510: 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65  ely.removes save
6520: 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  points from the 
6530: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6540: 6b 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69  k such that it i
6550: 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73  s.no longer poss
6560: 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b  ible to ROLLBACK
6570: 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f   TO those savepo
6580: 69 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45  ints..^If a RELE
6590: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65  ASE command rele
65a0: 61 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f  ases the outermo
65b0: 73 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f  st savepoint, so
65c0: 0a 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61  .that the transa
65d0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f  ction stack beco
65e0: 6d 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20  mes empty, then 
65f0: 52 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73  RELEASE is the s
6600: 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e  ame.as [COMMIT].
6610: 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  .^The [COMMIT] c
6620: 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73  ommand may be us
6630: 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c  ed to release al
6640: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64  l savepoints and
6650: 0a 63 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e  .commit the tran
6660: 73 61 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20  saction even if 
6670: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6680: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73  was originally s
6690: 74 61 72 74 65 64 0a 62 79 20 61 20 53 41 56 45  tarted.by a SAVE
66a0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e  POINT command in
66b0: 73 74 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49  stead of a [BEGI
66c0: 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  N] command.</p>.
66d0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65  .<p>^If the save
66e0: 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20  point-name in a 
66f0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6700: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
6710: 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72  ny.savepoint cur
6720: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72  rently in the tr
6730: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
6740: 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69   then no savepoi
6750: 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64  nts are.released
6760: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  , the database i
6770: 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64  s unchanged, and
6780: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
6790: 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20  mand returns.an 
67a0: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  error.</p>..<p>^
67b0: 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e  Note that an inn
67c0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  er transaction m
67d0: 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69  ight commit (usi
67e0: 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ng the RELEASE c
67f0: 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e  ommand).but then
6800: 20 6c 61 74 65 72 20 68 61 76 65 20 69 74 73 20   later have its 
6810: 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61  work undone by a
6820: 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20   ROLLBACK in an 
6830: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
6840: 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c  n..^A power fail
6850: 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63  ure or program c
6860: 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68  rash or OS crash
6870: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
6880: 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73  outer-most.trans
6890: 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
68a0: 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20  ck, undoing all 
68b0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
68c0: 65 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69  e occurred withi
68d0: 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61  n.that outer tra
68e0: 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63  nsaction, even c
68f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6900: 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e   supposedly been
6910: 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20   "committed".by 
6920: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
6930: 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69  and.  ^Content i
6940: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63  s not actually c
6950: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20  ommitted on the 
6960: 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20  disk .until the 
6970: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
6980: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f  ction commits.</
6990: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
69a0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66   several ways of
69b0: 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20   thinking about 
69c0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
69d0: 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  and:</p>..<ul>.<
69e0: 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70  li><p>.Some peop
69f0: 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20  le view RELEASE 
6a00: 61 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  as the equivalen
6a10: 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20  t of COMMIT for 
6a20: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69  a SAVEPOINT..Thi
6a30: 73 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62  s is an acceptab
6a40: 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77  le point of view
6a50: 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20   as long as one 
6a60: 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74  remembers that t
6a70: 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69  he.changes commi
6a80: 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72  tted by an inner
6a90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
6aa0: 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f  ht later be undo
6ab0: 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b  ne by a.rollback
6ac0: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
6ad0: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c  nsaction.</p></l
6ae0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74  i>..<li><p>.Anot
6af0: 68 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45  her view of RELE
6b00: 41 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d  ASE is that it m
6b10: 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72  erges a named tr
6b20: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69  ansaction into i
6b30: 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61  ts.parent transa
6b40: 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74  ction, so that t
6b50: 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63  he named transac
6b60: 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72  tion and its par
6b70: 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73  ent become.the s
6b80: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ame transaction.
6b90: 20 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c    After RELEASE,
6ba0: 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73   the named trans
6bb0: 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  action and its p
6bc0: 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69  arent.will commi
6bd0: 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f  t or rollback to
6be0: 67 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72  gether, whatever
6bf0: 20 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20   their fate may 
6c00: 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  be..</p></li>..<
6c10: 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61  li><p>.One can a
6c20: 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76  lso think of sav
6c30: 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b  epoints as."mark
6c40: 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61  s" in the transa
6c50: 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20  ction timeline. 
6c60: 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74   In this view, t
6c70: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d  he SAVEPOINT com
6c80: 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e  mand.creates a n
6c90: 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c  ew mark, the ROL
6ca0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
6cb0: 20 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d   rewinds the tim
6cc0: 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20  eline back.to a 
6cd0: 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72  point just after
6ce0: 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c   the named mark,
6cf0: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
6d00: 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20   command.erases 
6d10: 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74  marks from the t
6d20: 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20  imeline without 
6d30: 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20  actually making 
6d40: 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74  any.changes to t
6d50: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70  he database..</p
6d60: 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a  ></li>.</ul>....
6d70: 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20  <h3>Transaction 
6d80: 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68  Nesting Rules</h
6d90: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74  3>..<p>^The last
6da0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
6db0: 72 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65  rted will be the
6dc0: 20 66 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69   first.transacti
6dd0: 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20  on committed or 
6de0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e  rolled back.</p>
6df0: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e  ..<p>^The [BEGIN
6e00: 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77  ] command only w
6e10: 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e  orks if the tran
6e20: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73  saction stack is
6e30: 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74   empty, or.in ot
6e40: 68 65 72 20 77 6f 72 64 73 20 69 66 20 74 68 65  her words if the
6e50: 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e  re are no pendin
6e60: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  g transactions. 
6e70: 20 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63   ^If the transac
6e80: 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f  tion.stack is no
6e90: 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65  t empty when the
6ea0: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
6eb0: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65   is invoked, the
6ec0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61  n the command.fa
6ed0: 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
6ee0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
6ef0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6f00: 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74   commits all out
6f10: 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63  standing transac
6f20: 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73  tions and leaves
6f30: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
6f40: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
6f50: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
6f60: 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  SE command start
6f70: 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20  s with the most 
6f80: 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20  recent addition 
6f90: 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  to the.transacti
6fa0: 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c  on stack and rel
6fb0: 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73  eases savepoints
6fc0: 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74   backwards .in t
6fd0: 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c  ime until it rel
6fe0: 65 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e  eases a savepoin
6ff0: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
7000: 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  g savepoint-name
7010: 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69  ..^Prior savepoi
7020: 6e 74 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f  nts, even savepo
7030: 69 6e 74 73 20 77 69 74 68 20 6d 61 74 63 68 69  ints with matchi
7040: 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  ng savepoint-nam
7050: 65 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65  es, are.unchange
7060: 64 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41  d..^If the RELEA
7070: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
7080: 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  s the.transactio
7090: 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d  n stack to becom
70a0: 65 20 65 6d 70 74 79 20 28 69 66 20 74 68 65 20  e empty (if the 
70b0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
70c0: 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74  releases the.out
70d0: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
70e0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63  on from the stac
70f0: 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e  k) then the tran
7100: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e  saction commits.
7110: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52  </p>..<p>^The [R
7120: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
7130: 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c   without a TO cl
7140: 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73  ause rolls backs
7150: 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e   all transaction
7160: 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  s.and leaves the
7170: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7180: 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c  ck empty.</p>..<
7190: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
71a0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54  command with a T
71b0: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
71c0: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ack transactions
71d0: 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73   going.backwards
71e0: 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f   in time back to
71f0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
7200: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
7210: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
7220: 0a 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20  .^The SAVEPOINT 
7230: 77 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e  with the matchin
7240: 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f  g name remains o
7250: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7260: 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c  n stack,.but all
7270: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
7280: 73 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20  s that occurred 
7290: 61 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50  after that SAVEP
72a0: 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64  OINT was created
72b0: 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  .are rolled back
72c0: 2e 20 20 5e 49 66 20 74 68 65 20 73 61 76 65 70  .  ^If the savep
72d0: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
72e0: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
72f0: 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63  nd does not.matc
7300: 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20  h any SAVEPOINT 
7310: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
7320: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
7330: 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69  command fails wi
7340: 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20  th an.error and 
7350: 6c 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65  leaves the state
7360: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
7370: 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a   unchanged.</p>.
7380: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
73e0: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
73f0: 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74  comment *comment
7400: 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
7410: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65  bleDiagram comme
7420: 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e  nt-syntax.</tcl>
7430: 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61  ..<p>^Comments a
7440: 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61  re not SQL comma
7450: 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63  nds, but can occ
7460: 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65  ur within the te
7470: 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65  xt of.SQL querie
7480: 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c  s passed to [sql
7490: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
74a0: 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69  )] and related i
74b0: 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d  nterfaces..^Comm
74c0: 65 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64  ents are treated
74d0: 20 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62   as whitespace b
74e0: 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43  y the parser..^C
74f0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69  omments can begi
7500: 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  n anywhere white
7510: 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f  space .can be fo
7520: 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  und, including i
7530: 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e  nside expression
7540: 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74  s that span mult
7550: 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e  iple lines..</p>
7560: 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e  ..<p>^SQL commen
7570: 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77  ts begin with tw
7580: 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d  o consecutive "-
7590: 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53  " characters (AS
75a0: 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78  CII 0x2d).and ex
75b0: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
75c0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
75d0: 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63  t newline charac
75e0: 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29  ter (ASCII 0x0a)
75f0: 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e  .or until the en
7600: 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63  d of input, whic
7610: 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73  hever comes firs
7620: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74  t.</p>..<p>^C-st
7630: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  yle comments beg
7640: 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64  in.with "/*" and
7650: 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e   extend up to an
7660: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
7670: 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63  next "*/" charac
7680: 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69  ter pair.or unti
7690: 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  l the end of inp
76a0: 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f  ut, whichever co
76b0: 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73  mes first.  ^C-s
76c0: 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61  tyle comments.ca
76d0: 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20  n span multiple 
76e0: 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  lines. </p>..<p>
76f0: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70  ^Comments can ap
7700: 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68  pear anywhere wh
7710: 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63  itespace can occ
7720: 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e  ur,.including in
7730: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
7740: 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64   and in the midd
7750: 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20  le of other SQL 
7760: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d  statements..^Com
7770: 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73  ments do not nes
7780: 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  t..</p>...<tcl>.
7790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
77e0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49  ection {CREATE I
77f0: 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65  NDEX} createinde
7800: 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58  x {{CREATE INDEX
7810: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
7820: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
7830: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  e-index-stmt.</t
7840: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
7850: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
7860: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
7870: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
7880: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
7890: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
78a0: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
78b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
78c0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
78d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
78e0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
78f0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
7900: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
7910: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 74 61 62  ized list of tab
7920: 6c 65 20 63 6f 6c 75 6d 6e 0a 6e 61 6d 65 73 20  le column.names 
7930: 61 6e 64 2f 6f 72 20 65 78 70 72 65 73 73 69 6f  and/or expressio
7940: 6e 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ns that are used
7950: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
7960: 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74 69 6f  ey..If the optio
7970: 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75 73 65  nal WHERE clause
7980: 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20 74 68   is included, th
7990: 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  en the index is 
79a0: 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e 64 65  a "[partial inde
79b0: 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  x]"..</p>..<tcl>
79c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73  hd_fragment {des
79d0: 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e  cidx} {descendin
79e0: 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63  g indices} {desc
79f0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20 7b 64  ending index} {d
7a00: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
7a10: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  s}</tcl>.<p>^Eac
7a20: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6f 72  h column name or
7a30: 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
7a40: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f  be followed by o
7a50: 6e 65 0a 6f 66 20 74 68 65 20 22 41 53 43 22 20  ne.of the "ASC" 
7a60: 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72  or "DESC" keywor
7a70: 64 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  ds to indicate s
7a80: 6f 72 74 20 6f 72 64 65 72 2e 0a 5e 54 68 65 20  ort order..^The 
7a90: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
7aa0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
7ab0: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
7ac0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7ad0: 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64 20  ile format, and 
7ae0: 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74 68  in particular th
7af0: 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  e [schema format
7b00: 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20 22   number]..^The "
7b10: 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20 66  legacy" schema f
7b20: 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72 65  ormat (1) ignore
7b30: 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64  s index.sort ord
7b40: 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65 6e  er.  ^The descen
7b50: 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65 6d  ding index schem
7b60: 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61 6b  a format (4) tak
7b70: 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f 72  es index sort or
7b80: 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74  der.into account
7b90: 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e 73  .  Only versions
7ba0: 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   of SQLite 3.3.0
7bb0: 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20 61   and later are a
7bc0: 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e  ble to understan
7bd0: 64 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e 67  d.the descending
7be0: 20 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20 46   index format. F
7bf0: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
7c00: 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  , version of SQL
7c10: 69 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e  ite between 3.3.
7c20: 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20  0.and 3.7.9 use 
7c30: 74 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d  the legacy schem
7c40: 61 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61  a format by defa
7c50: 75 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20  ult.  The newer 
7c60: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
7c70: 0a 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74  .used by default
7c80: 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e   in version 3.7.
7c90: 31 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54  10 and later..^T
7ca0: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
7cb0: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
7cc0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68  an be used to ch
7cd0: 61 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65  ange set the spe
7ce0: 63 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66  cific.behavior f
7cf0: 6f 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f  or any version o
7d00: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
7d10: 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  p>^The COLLATE c
7d20: 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  lause optionally
7d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20   following each 
7d40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20 65  column name.or e
7d50: 78 70 72 65 73 73 69 6f 6e 20 64 65 66 69 6e 65  xpression define
7d60: 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  s a.collating se
7d70: 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20  quence used for 
7d80: 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20  text entries in 
7d90: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68  that column..^Th
7da0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
7db0: 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20  ing.sequence is 
7dc0: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
7dd0: 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66  quence defined f
7de0: 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  or that column i
7df0: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
7e00: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
7e10: 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61   ^Or if no colla
7e20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e30: 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e   otherwise defin
7e40: 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e  ed,.the built-in
7e50: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
7e60: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
7e70: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
7e80: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64 65 78 65  _fragment indexe
7e90: 78 70 72 20 7b 69 6e 64 65 78 65 73 20 6f 6e 20  xpr {indexes on 
7ea0: 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63  expressions}</tc
7eb0: 6c 3e 0a 3c 70 3e 5e 45 78 70 72 65 73 73 69 6f  l>.<p>^Expressio
7ec0: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d  ns in an index m
7ed0: 61 79 20 6e 6f 74 20 72 65 66 65 72 65 6e 63 65  ay not reference
7ee0: 20 6f 74 68 65 72 20 74 61 62 6c 65 73 0a 61 6e   other tables.an
7ef0: 64 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 73 75  d may not use su
7f00: 62 71 75 65 72 69 65 73 20 6e 6f 72 20 66 75 6e  bqueries nor fun
7f10: 63 74 69 6f 6e 73 20 77 68 6f 73 65 20 72 65 73  ctions whose res
7f20: 75 6c 74 20 6d 69 67 68 74 0a 63 68 61 6e 67 65  ult might.change
7f30: 20 28 65 78 3a 20 5b 72 61 6e 64 6f 6d 28 29 5d   (ex: [random()]
7f40: 20 6f 72 20 5b 73 71 6c 69 74 65 5f 76 65 72 73   or [sqlite_vers
7f50: 69 6f 6e 28 29 5d 29 2e 0a 5e 45 78 70 72 65 73  ion()])..^Expres
7f60: 73 69 6f 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65  sions in an inde
7f70: 78 20 6d 61 79 20 6f 6e 6c 79 20 72 65 66 65 72  x may only refer
7f80: 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   to columns in t
7f90: 68 65 20 74 61 62 6c 65 0a 74 68 61 74 20 69 73  he table.that is
7fa0: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a   being indexed..
7fb0: 49 6e 64 65 78 65 73 20 6f 6e 20 65 78 70 72 65  Indexes on expre
7fc0: 73 73 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 77  ssion will not w
7fd0: 6f 72 6b 20 77 69 74 68 20 76 65 72 73 69 6f 6e  ork with version
7fe0: 73 20 6f 66 20 53 51 4c 69 74 65 20 70 72 69 6f  s of SQLite prio
7ff0: 72 0a 74 6f 20 5b 76 65 72 73 69 6f 6e 20 33 2e  r.to [version 3.
8000: 38 2e 31 32 5d 2e 0a 0a 3c 70 3e 54 68 65 72 65  8.12]...<p>There
8010: 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72   are no arbitrar
8020: 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20  y limits on the 
8030: 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65  number of indice
8040: 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74  s that can be.at
8050: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
8060: 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65  le table.  ^(The
8070: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
8080: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69  ns in an index i
8090: 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68  s .limited to th
80a0: 65 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b  e value set by.[
80b0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b  sqlite3_limit]([
80c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
80d0: 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e  UMN],...).)^</p>
80e0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
80f0: 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b 75 6e  nt uniqueidx {un
8100: 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74 63 6c  ique index}</tcl
8110: 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49  >.<p>^If the UNI
8120: 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65  QUE keyword appe
8130: 61 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41  ars between CREA
8140: 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65  TE and INDEX the
8150: 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65  n duplicate.inde
8160: 78 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f  x entries are no
8170: 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79  t allowed.  ^Any
8180: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65   attempt to inse
8190: 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65  rt a duplicate e
81a0: 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74  ntry.will result
81b0: 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e   in an error.  ^
81c0: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
81d0: 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63   of unique indic
81e0: 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c  es, all NULL val
81f0: 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72  ues.are consider
8200: 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20  ed to different 
8210: 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e  from all other N
8220: 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61  ULL values and a
8230: 72 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a  re thus unique..
8240: 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  This is one of t
8250: 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20  he two possible 
8260: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20  interpretations 
8270: 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74  of the SQL-92 st
8280: 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67  andard.(the lang
8290: 75 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e  uage in the stan
82a0: 64 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75  dard is ambiguou
82b0: 73 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e  s) and is the in
82c0: 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c  terpretation.fol
82d0: 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65  lowed by Postgre
82e0: 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65  SQL, MySQL, Fire
82f0: 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65  bird, and Oracle
8300: 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a  .  Informix and.
8310: 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65  Microsoft SQL Se
8320: 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20  rver follow the 
8330: 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61  other interpreta
8340: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e  tion of the stan
8350: 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  dard.</p>..<p>^I
8360: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  f the optional I
8370: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
8380: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61  use is present a
8390: 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78  nd another index
83a0: 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e  .with the same n
83b0: 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73  ame already exis
83c0: 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ts, then this co
83d0: 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20  mmand becomes a 
83e0: 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  no-op.</p>..<p>^
83f0: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
8400: 76 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52  ved with the [DR
8410: 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e  OP INDEX] comman
8420: 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  d.</p>...<tcl>.#
8430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8470: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
8480: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41  ction {CREATE TA
8490: 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c  BLE} {createtabl
84a0: 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  e} {{CREATE TABL
84b0: 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
84c0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
84d0: 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f  te-table-stmt.</
84e0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22 43 52  tcl>..<p>The "CR
84f0: 45 41 54 45 20 54 41 42 4c 45 22 20 63 6f 6d 6d  EATE TABLE" comm
8500: 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
8510: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
8520: 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 0a  e in an SQLite .
8530: 64 61 74 61 62 61 73 65 2e 20 41 20 43 52 45 41  database. A CREA
8540: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
8550: 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
8560: 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72 69 62 75  ollowing attribu
8570: 74 65 73 20 6f 66 20 74 68 65 0a 6e 65 77 20 74  tes of the.new t
8580: 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  able:..<ul>.  <l
8590: 69 3e 3c 70 3e 54 68 65 20 6e 61 6d 65 20 6f 66  i><p>The name of
85a0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
85b0: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64  .  <li><p> The d
85c0: 61 74 61 62 61 73 65 20 69 6e 20 77 68 69 63 68  atabase in which
85d0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
85e0: 73 20 63 72 65 61 74 65 64 2e 20 54 61 62 6c 65  s created. Table
85f0: 73 20 6d 61 79 20 62 65 20 0a 20 20 20 20 20 20  s may be .      
8600: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d  created in the m
8610: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68  ain database, th
8620: 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c  e temp database,
8630: 20 6f 72 20 69 6e 20 61 6e 79 20 61 74 74 61 63   or in any attac
8640: 68 65 64 0a 20 20 20 20 20 20 64 61 74 61 62 61  hed.      databa
8650: 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54  se...  <li><p> T
8660: 68 65 20 6e 61 6d 65 20 6f 66 20 65 61 63 68 20  he name of each 
8670: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61  column in the ta
8680: 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ble...  <li><p> 
8690: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
86a0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
86b0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
86c0: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
86d0: 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 65 78 70  ult value or exp
86e0: 72 65 73 73 69 6f 6e 20 66 6f 72 20 65 61 63 68  ression for each
86f0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
8700: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
8710: 20 41 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61   A default colla
8720: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f  tion sequence to
8730: 20 75 73 65 20 77 69 74 68 20 65 61 63 68 20 63   use with each c
8740: 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  olumn...  <li><p
8750: 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 20  > Optionally, a 
8760: 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
8770: 74 68 65 20 74 61 62 6c 65 2e 20 42 6f 74 68 20  the table. Both 
8780: 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e  single column an
8790: 64 0a 20 20 20 20 20 20 20 63 6f 6d 70 6f 73 69  d.       composi
87a0: 74 65 20 28 6d 75 6c 74 69 70 6c 65 20 63 6f 6c  te (multiple col
87b0: 75 6d 6e 29 20 70 72 69 6d 61 72 79 20 6b 65 79  umn) primary key
87c0: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
87d0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 73 65  ..  <li><p> A se
87e0: 74 20 6f 66 20 53 51 4c 20 63 6f 6e 73 74 72 61  t of SQL constra
87f0: 69 6e 74 73 20 66 6f 72 20 65 61 63 68 20 74 61  ints for each ta
8800: 62 6c 65 2e 20 53 51 4c 69 74 65 20 73 75 70 70  ble. SQLite supp
8810: 6f 72 74 73 20 55 4e 49 51 55 45 2c 20 4e 4f 54  orts UNIQUE, NOT
8820: 0a 20 20 20 20 20 20 20 4e 55 4c 4c 2c 20 43 48  .       NULL, CH
8830: 45 43 4b 20 61 6e 64 20 46 4f 52 45 49 47 4e 20  ECK and FOREIGN 
8840: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  KEY constraints.
8850: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 57 68 65 74  ..  <li><p> Whet
8860: 68 65 72 20 74 68 65 20 74 61 62 6c 65 20 69 73  her the table is
8870: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
8880: 44 5d 20 74 61 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a  D] table..</ul>.
8890: 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41 54 45  .<p>Every CREATE
88a0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
88b0: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 61 20   must specify a 
88c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e 65 77  name for the new
88d0: 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c   table..  ^(Tabl
88e0: 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  e names that beg
88f0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
8900: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  " are reserved f
8910: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  or internal use.
8920: 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72 72 6f   It.  is an erro
8930: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
8940: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77  create a table w
8950: 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20  ith a name that 
8960: 73 74 61 72 74 73 20 77 69 74 68 0a 20 20 22 73  starts with.  "s
8970: 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20  qlite_".)^..<p> 
8980: 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 73 63  ^If a <yyterm>sc
8990: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  hema-name</yyter
89a0: 6d 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  m> is specified,
89b0: 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74 68   it must be eith
89c0: 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74  er "main", .  "t
89d0: 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d  emp", or the nam
89e0: 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48 20  e of an [ATTACH 
89f0: 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68 65  DATABASE|attache
8a00: 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e  d database]. ^In
8a10: 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68 65   this case.  the
8a20: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
8a30: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61 6d  eated in the nam
8a40: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 66  ed database. ^If
8a50: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
8a60: 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65 79  TEMPORARY".  key
8a70: 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74 77  word occurs betw
8a80: 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45 22  een the "CREATE"
8a90: 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65   and "TABLE" the
8aa0: 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  n the new table 
8ab0: 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e 20  is.  created in 
8ac0: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
8ad0: 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72  e. ^It is an err
8ae0: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
8af0: 74 68 20 61 20 0a 20 20 3c 79 79 74 65 72 6d 3e  th a .  <yyterm>
8b00: 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
8b10: 65 72 6d 3e 20 61 6e 64 20 74 68 65 20 54 45 4d  erm> and the TEM
8b20: 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b  P or TEMPORARY k
8b30: 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74  eyword, unless t
8b40: 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 73 63 68  he.  <yyterm>sch
8b50: 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
8b60: 3e 20 69 73 20 22 74 65 6d 70 22 2e 20 0a 20 20  > is "temp". .  
8b70: 5e 49 66 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61  ^If no schema na
8b80: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
8b90: 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50 20 6b  and the.  TEMP k
8ba0: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
8bb0: 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74  esent then the t
8bc0: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
8bd0: 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20 64 61  in the main.  da
8be0: 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e  tabase...<p>.  ^
8bf0: 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e  It is usually an
8c00: 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70   error to attemp
8c10: 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  t to create a ne
8c20: 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64 61 74  w table in a dat
8c30: 61 62 61 73 65 20 74 68 61 74 0a 20 20 61 6c 72  abase that.  alr
8c40: 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20  eady contains a 
8c50: 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20  table, index or 
8c60: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
8c70: 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c   name. ^However,
8c80: 20 69 66 20 74 68 65 0a 20 20 22 49 46 20 4e 4f   if the.  "IF NO
8c90: 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65  T EXISTS" clause
8ca0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
8cb0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45   part of the CRE
8cc0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
8cd0: 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61 62 6c  ent and.  a tabl
8ce0: 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65  e or view of the
8cf0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
8d00: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 20 43  dy exists, the C
8d10: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d  REATE TABLE comm
8d20: 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68 61 73  and.  simply has
8d30: 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e 64 20   no effect (and 
8d40: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
8d50: 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 20 5e   is returned). ^
8d60: 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c  An error is stil
8d70: 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69 66 20  l.  returned if 
8d80: 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74  the table cannot
8d90: 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63 61   be created beca
8da0: 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69  use of an existi
8db0: 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a  ng index, even .
8dc0: 20 20 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54    if the "IF NOT
8dd0: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
8de0: 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  is specified...<
8df0: 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20  p>^It is not an 
8e00: 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74 65 20  error to create 
8e10: 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 61 73  a table that has
8e20: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
8e30: 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69 6e 67  s an .  existing
8e40: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
8e50: 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e  |trigger]...<p>^
8e60: 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76  Tables are remov
8e70: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52  ed using the [DR
8e80: 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  OP TABLE] statem
8e90: 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 74 63 6c  ent.  </p>..<tcl
8ea0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 72 65  >hd_fragment cre
8eb0: 61 74 65 74 61 62 61 73 20 7b 43 52 45 41 54 45  atetabas {CREATE
8ec0: 20 54 41 42 4c 45 20 41 53 7d 3c 2f 74 63 6c 3e   TABLE AS}</tcl>
8ed0: 0a 3c 68 33 3e 43 52 45 41 54 45 20 54 41 42 4c  .<h3>CREATE TABL
8ee0: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
8ef0: 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a  Statements</h3>.
8f00: 0a 3c 70 3e 5e 28 41 20 22 43 52 45 41 54 45 20  .<p>^(A "CREATE 
8f10: 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c  TABLE ... AS SEL
8f20: 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 20 63  ECT" statement c
8f30: 72 65 61 74 65 73 20 61 6e 64 20 70 6f 70 75 6c  reates and popul
8f40: 61 74 65 73 20 61 20 64 61 74 61 62 61 73 65 0a  ates a database.
8f50: 74 61 62 6c 65 20 62 61 73 65 64 20 6f 6e 20 74  table based on t
8f60: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
8f70: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
8f80: 2e 29 5e 20 5e 28 54 68 65 20 74 61 62 6c 65 20  .)^ ^(The table 
8f90: 68 61 73 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d  has the same.num
8fa0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61  ber of columns a
8fb0: 73 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72  s the rows retur
8fc0: 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
8fd0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  T statement. The
8fe0: 20 6e 61 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f   name of.each co
8ff0: 6c 75 6d 6e 20 69 73 20 74 68 65 20 73 61 6d 65  lumn is the same
9000: 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   as the name of 
9010: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
9020: 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
9030: 72 65 73 75 6c 74 0a 73 65 74 20 6f 66 20 74 68  result.set of th
9040: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
9050: 6e 74 2e 29 5e 20 5e 28 54 68 65 20 64 65 63 6c  nt.)^ ^(The decl
9060: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
9070: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65  h column is dete
9080: 72 6d 69 6e 65 64 0a 62 79 20 74 68 65 20 5b 65  rmined.by the [e
9090: 78 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69  xpression affini
90a0: 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ty] of the corre
90b0: 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
90c0: 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
90d0: 74 20 73 65 74 0a 6f 66 20 74 68 65 20 53 45 4c  t set.of the SEL
90e0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  ECT statement, a
90f0: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
9100: 0a 3c 63 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20  .<center><table 
9110: 62 6f 72 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e  border=1>.  <tr>
9120: 3c 74 68 3e 45 78 70 72 65 73 73 69 6f 6e 20 41  <th>Expression A
9130: 66 66 69 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f  ffinity   <th>Co
9140: 6c 75 6d 6e 20 44 65 63 6c 61 72 65 64 20 54 79  lumn Declared Ty
9150: 70 65 0a 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58  pe.  <tr><td>TEX
9160: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
9170: 20 20 20 3c 74 64 3e 22 54 45 58 54 22 0a 20 20     <td>"TEXT".  
9180: 3c 74 72 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20  <tr><td>NUMERIC 
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
91a0: 64 3e 22 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74  d>"NUM".  <tr><t
91b0: 64 3e 49 4e 54 45 47 45 52 20 20 20 20 20 20 20  d>INTEGER       
91c0: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 49 4e 54          <td>"INT
91d0: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c  ".  <tr><td>REAL
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91f0: 20 20 3c 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c    <td>"REAL".  <
9200: 74 72 3e 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20  tr><td>NONE     
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
9220: 3e 22 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e  >"" (empty strin
9230: 67 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  g).</table></cen
9240: 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74  ter>)^..<p>^(A t
9250: 61 62 6c 65 20 63 72 65 61 74 65 64 20 75 73 69  able created usi
9260: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
9270: 41 53 20 68 61 73 20 6e 6f 20 50 52 49 4d 41 52  AS has no PRIMAR
9280: 59 20 4b 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e  Y KEY and no.con
9290: 73 74 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20  straints of any 
92a0: 6b 69 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c  kind. The defaul
92b0: 74 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20  t value of each 
92c0: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20  column is NULL. 
92d0: 54 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c  The default.coll
92e0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
92f0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
9300: 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
9310: 69 73 20 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70  is BINARY.)^..<p
9320: 3e 5e 54 61 62 6c 65 73 20 63 72 65 61 74 65 64  >^Tables created
9330: 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 41   using CREATE TA
9340: 42 4c 45 20 41 53 20 61 72 65 20 69 6e 69 74 69  BLE AS are initi
9350: 61 6c 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77  ally populated w
9360: 69 74 68 20 74 68 65 0a 72 6f 77 73 20 6f 66 20  ith the.rows of 
9370: 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
9380: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
9390: 65 6d 65 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65  ement. ^Rows are
93a0: 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67   assigned contig
93b0: 75 6f 75 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67  uously.ascending
93c0: 20 5b 72 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c   [rowid] values,
93d0: 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
93e0: 2c 20 69 6e 20 74 68 65 20 5b 6f 72 64 65 72 20  , in the [order 
93f0: 62 79 7c 6f 72 64 65 72 5d 20 74 68 61 74 20 74  by|order] that t
9400: 68 65 79 0a 61 72 65 20 72 65 74 75 72 6e 65 64  hey.are returned
9410: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
9420: 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e  tatement...<tcl>
9430: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 74 61 62  hd_fragment {tab
9440: 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d  lecoldef} {colum
9450: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63  n definition} {c
9460: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
9470: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c  s}</tcl>.<h3>Col
9480: 75 6d 6e 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c  umn Definitions<
9490: 2f 68 33 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20  /h3>..<p>Unless 
94a0: 69 74 20 69 73 20 61 20 43 52 45 41 54 45 20 54  it is a CREATE T
94b0: 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45  ABLE ... AS SELE
94c0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 20  CT statement, a 
94d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 6e 63  CREATE TABLE inc
94e0: 6c 75 64 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72  ludes.one or mor
94f0: 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f  e [column-def|co
9500: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  lumn definitions
9510: 5d 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  ], optionally fo
9520: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6c 69 73 74  llowed by a list
9530: 20 6f 66 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74   of.[table-const
9540: 72 61 69 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73  raint|table cons
9550: 74 72 61 69 6e 74 73 5d 2e 20 20 45 61 63 68 20  traints].  Each 
9560: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
9570: 6e 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  n consists of th
9580: 65 0a 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e.name of the co
9590: 6c 75 6d 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79  lumn, optionally
95a0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
95b0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
95c0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68  f the column,.th
95d0: 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  en one or more o
95e0: 70 74 69 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d  ptional [column-
95f0: 63 6f 6e 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d  constraint|colum
9600: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20  n constraints]. 
9610: 49 6e 63 6c 75 64 65 64 20 69 6e 0a 74 68 65 20  Included in.the 
9620: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63  definition of "c
9630: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
9640: 73 22 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s" for the purpo
9650: 73 65 73 20 6f 66 20 74 68 65 20 70 72 65 76 69  ses of the previ
9660: 6f 75 73 0a 73 74 61 74 65 6d 65 6e 74 20 61 72  ous.statement ar
9670: 65 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e  e the COLLATE an
9680: 64 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  d DEFAULT clause
9690: 73 2c 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74  s, even though t
96a0: 68 65 73 65 20 61 72 65 20 6e 6f 74 20 72 65 61  hese are not rea
96b0: 6c 6c 79 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20  lly.constraints 
96c0: 69 6e 20 74 68 65 20 73 65 6e 73 65 20 74 68 61  in the sense tha
96d0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 72 65  t they do not re
96e0: 73 74 72 69 63 74 20 74 68 65 20 64 61 74 61 20  strict the data 
96f0: 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 6d  that the table m
9700: 61 79 0a 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20  ay.contain. The 
9710: 6f 74 68 65 72 20 63 6f 6e 73 74 72 61 69 6e 74  other constraint
9720: 73 20 2d 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48  s - NOT NULL, CH
9730: 45 43 4b 2c 20 55 4e 49 51 55 45 2c 20 50 52 49  ECK, UNIQUE, PRI
9740: 4d 41 52 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52  MARY KEY and.FOR
9750: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
9760: 69 6e 74 73 20 2d 20 69 6d 70 6f 73 65 20 72 65  ints - impose re
9770: 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
9780: 65 20 74 61 62 6c 65 73 20 64 61 74 61 2c 20 61  e tables data, a
9790: 6e 64 20 61 72 65 20 61 72 65 0a 64 65 73 63 72  nd are are.descr
97a0: 69 62 65 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73  ibed under [cons
97b0: 74 72 61 69 6e 74 73 7c 53 51 4c 20 44 61 74 61  traints|SQL Data
97c0: 20 43 6f 6e 73 74 72 61 69 6e 74 73 5d 20 62 65   Constraints] be
97d0: 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65  low...<p>^Unlike
97e0: 20 6d 6f 73 74 20 53 51 4c 20 64 61 74 61 62 61   most SQL databa
97f0: 73 65 73 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  ses, SQLite does
9800: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68   not restrict th
9810: 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 74  e type of data t
9820: 68 61 74 0a 6d 61 79 20 62 65 20 69 6e 73 65 72  hat.may be inser
9830: 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d  ted into a colum
9840: 6e 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  n based on the c
9850: 6f 6c 75 6d 6e 73 20 64 65 63 6c 61 72 65 64 20  olumns declared 
9860: 74 79 70 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53  type. Instead,.S
9870: 51 4c 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61  QLite uses [dyna
9880: 6d 69 63 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68  mic typing]. ^Th
9890: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
98a0: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75  of a column is u
98b0: 73 65 64 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65  sed to.determine
98c0: 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d 20   the [affinity] 
98d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e  of the column on
98e0: 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ly...<tcl>hd_fra
98f0: 67 6d 65 6e 74 20 64 66 6c 74 76 61 6c 20 7b 64  gment dfltval {d
9900: 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 20 76 61  efault column va
9910: 6c 75 65 7d 20 7b 64 65 66 61 75 6c 74 20 76 61  lue} {default va
9920: 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68  lue}</tcl>.<p>Th
9930: 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  e DEFAULT clause
9940: 20 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66   specifies a def
9950: 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73  ault value to us
9960: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
9970: 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20   if no.value is 
9980: 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76 69  explicitly provi
9990: 64 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20  ded by the user 
99a0: 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49  when doing an [I
99b0: 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65 72  NSERT]. ^If ther
99c0: 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74  e.is no explicit
99d0: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
99e0: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
99f0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
9a00: 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61 75   then the .defau
9a10: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  lt value of the 
9a20: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20  column is NULL. 
9a30: 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44 45  ^(An explicit DE
9a40: 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61 79  FAULT clause may
9a50: 20 73 70 65 63 69 66 79 0a 74 68 61 74 20 74 68   specify.that th
9a60: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
9a70: 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is NULL, a strin
9a80: 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c  g constant, a bl
9a90: 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73  ob constant, a.s
9aa0: 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72  igned-number, or
9ab0: 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65 78   any constant ex
9ac0: 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65  pression enclose
9ad0: 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  d in parentheses
9ae0: 2e 20 41 0a 64 65 66 61 75 6c 74 20 76 61 6c 75  . A.default valu
9af0: 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e  e may also be on
9b00: 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  e of the special
9b10: 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e   case-independen
9b20: 74 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52 45  t keywords.CURRE
9b30: 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54  NT_TIME, CURRENT
9b40: 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54  _DATE or CURRENT
9b50: 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46  _TIMESTAMP.)^ ^F
9b60: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
9b70: 6f 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20 63  of the.DEFAULT c
9b80: 6c 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65 73  lause, an expres
9b90: 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
9ba0: 65 64 20 63 6f 6e 73 74 61 6e 74 20 69 66 20 69  ed constant if i
9bb0: 74 20 64 6f 65 73 0a 63 6f 6e 74 61 69 6e 73 20  t does.contains 
9bc0: 6e 6f 20 73 75 62 2d 71 75 65 72 69 65 73 2c 20  no sub-queries, 
9bd0: 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62 6c 65 20  column or table 
9be0: 72 65 66 65 72 65 6e 63 65 73 2c 20 5b 62 6f 75  references, [bou
9bf0: 6e 64 20 70 61 72 61 6d 65 74 65 72 73 5d 2c 0a  nd parameters],.
9c00: 6f 72 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  or string litera
9c10: 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64  ls enclosed in d
9c20: 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 6e 73  ouble-quotes ins
9c30: 74 65 61 64 20 6f 66 20 73 69 6e 67 6c 65 2d 71  tead of single-q
9c40: 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63  uotes...<p>^(Eac
9c50: 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20  h time a row is 
9c60: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
9c70: 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e  e table by an IN
9c80: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74  SERT statement t
9c90: 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72  hat .does not pr
9ca0: 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76  ovide explicit v
9cb0: 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61  alues for all ta
9cc0: 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20  ble columns the 
9cd0: 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e  values stored in
9ce0: 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65  .the new row are
9cf0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
9d00: 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
9d10: 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77  ues)^, as follow
9d20: 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c  s:..<ul>.  <li><
9d30: 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c  p>^If the defaul
9d40: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  t value of the c
9d50: 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74  olumn is a const
9d60: 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20  ant NULL, text, 
9d70: 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e  blob or.    sign
9d80: 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c  ed-number value,
9d90: 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65   then that value
9da0: 20 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c   is used directl
9db0: 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  y in the new row
9dc0: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  ...  <li><p>^If 
9dd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
9de0: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e of a column is
9df0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
9e00: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74  n parentheses, t
9e10: 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72  hen.    the expr
9e20: 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
9e30: 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
9e40: 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61  h row inserted a
9e50: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20  nd the results. 
9e60: 20 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e     used in the n
9e70: 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c  ew row...  <li><
9e80: 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c  p>^If the defaul
9e90: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
9ea0: 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54  umn is CURRENT_T
9eb0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
9ec0: 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54  E or.    CURRENT
9ed0: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e  _TIMESTAMP, then
9ee0: 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20   the value used 
9ef0: 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  in the new row i
9f00: 73 20 61 20 74 65 78 74 0a 20 20 20 20 72 65 70  s a text.    rep
9f10: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
9f20: 68 65 20 63 75 72 72 65 6e 74 20 55 54 43 20 64  he current UTC d
9f30: 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e  ate and/or time.
9f40: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49   ^For CURRENT_TI
9f50: 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d  ME, the.    form
9f60: 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20  at of the value 
9f70: 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e  is "HH:MM:SS". ^
9f80: 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45  For CURRENT_DATE
9f90: 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20  , "YYYY-MM-DD". 
9fa0: 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20  ^The.    format 
9fb0: 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  for CURRENT_TIME
9fc0: 53 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d  STAMP is "YYYY-M
9fd0: 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a  M-DD HH:MM:SS"..
9fe0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  </ul>..<p>^The C
9ff0: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70  OLLATE clause sp
a000: 65 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65  ecifies the name
a010: 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67   of a [collating
a020: 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73   sequence] to us
a030: 65 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74  e as.the default
a040: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a050: 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  nce for the colu
a060: 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41  mn. ^If no COLLA
a070: 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65  TE clause is.spe
a080: 63 69 66 69 65 64 2c 20 74 68 65 20 64 65 66 61  cified, the defa
a090: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
a0a0: 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52  quence is [BINAR
a0b0: 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d  Y]...<p>^The num
a0c0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
a0d0: 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d  n a table is lim
a0e0: 69 74 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c  ited by the [SQL
a0f0: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a  ITE_MAX_COLUMN].
a100: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72  compile-time par
a110: 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c  ameter. ^A singl
a120: 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65  e row of a table
a130: 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f   cannot store mo
a140: 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f  re than.[SQLITE_
a150: 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65  MAX_LENGTH] byte
a160: 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68  s of data. ^Both
a170: 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73   of these limits
a180: 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20   can be lowered 
a190: 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67  at.runtime using
a1a0: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69   the [sqlite3_li
a1b0: 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  mit()] C/C++ int
a1c0: 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  erface.</p>..<tc
a1d0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63  l>hd_fragment {c
a1e0: 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e  onstraints} {con
a1f0: 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a  straints}</tcl>.
a200: 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e  <h3>SQL Data Con
a210: 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c  straints</h3>..<
a220: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
a230: 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b 50 52  primkeyconst {PR
a240: 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52 49 4d  IMARY KEY} {PRIM
a250: 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
a260: 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61  nt}</tcl>.<p>^Ea
a270: 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c 69  ch table in SQLi
a280: 74 65 20 6d 61 79 20 68 61 76 65 20 61 74 20 6d  te may have at m
a290: 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49 4d 41  ost one <b>PRIMA
a2a0: 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66 20  RY KEY</b>. ^If 
a2b0: 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73 20 50  the.  keywords P
a2c0: 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61  RIMARY KEY are a
a2d0: 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  dded to a column
a2e0: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65   definition, the
a2f0: 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
a300: 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61 62 6c  y.  for the tabl
a310: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  e consists of th
a320: 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e  at single column
a330: 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52 49 4d  . ^Or, if a PRIM
a340: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 0a  ARY KEY clause .
a350: 20 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61    is specified a
a360: 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74  s a [table-const
a370: 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74 68 65  raint], then the
a380: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20   primary key of 
a390: 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f 6e 73  the table.  cons
a3a0: 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69 73 74  ists of the list
a3b0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70 65 63   of columns spec
a3c0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
a3d0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
a3e0: 20 63 6c 61 75 73 65 2e 0a 20 20 5e 54 68 65 20   clause..  ^The 
a3f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a400: 73 65 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  se must contain 
a410: 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  only column name
a420: 73 20 26 6d 64 61 73 68 3b 20 74 68 65 20 75 73  s &mdash; the us
a430: 65 20 6f 66 20 0a 20 20 65 78 70 72 65 73 73 69  e of .  expressi
a440: 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65 78  ons in an [index
a450: 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20  ed-column] of a 
a460: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6e  PRIMARY KEY is n
a470: 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20  ot supported..  
a480: 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61 69  ^An error is rai
a490: 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61 6e  sed if more than
a4a0: 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59   one PRIMARY KEY
a4b0: 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73 20   clause appears 
a4c0: 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54 41  in a.  CREATE TA
a4d0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  BLE statement.  
a4e0: 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59  ^The PRIMARY KEY
a4f0: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72   is optional for
a500: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
a510: 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69 72  .  but is requir
a520: 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  ed for [WITHOUT 
a530: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a  ROWID] tables...
a540: 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61  <p>If a table ha
a550: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
a560: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e  n primary key an
a570: 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  d the declared t
a580: 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f  ype of that.  co
a590: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
a5a0: 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  " and the table 
a5b0: 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55  is not a [WITHOU
a5c0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a  T ROWID] table,.
a5d0: 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d    then the colum
a5e0: 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e  n is known as an
a5f0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
a600: 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 5b 72  Y KEY]..  See [r
a610: 6f 77 69 64 7c 62 65 6c 6f 77 5d 20 66 6f 72 20  owid|below] for 
a620: 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  a description of
a630: 20 74 68 65 20 73 70 65 63 69 61 6c 20 70 72 6f   the special pro
a640: 70 65 72 74 69 65 73 20 61 6e 64 20 62 65 68 61  perties and beha
a650: 76 69 6f 72 73 0a 20 20 61 73 73 6f 63 69 61 74  viors.  associat
a660: 65 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45  ed with an [INTE
a670: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
a680: 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20  ...<p>^Each row 
a690: 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  in a table with 
a6a0: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75  a primary key mu
a6b0: 73 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65  st have a unique
a6c0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f   combination.  o
a6d0: 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20  f values in its 
a6e0: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
a6f0: 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  mns. ^For the pu
a700: 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d  rposes of determ
a710: 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71  ining.  the uniq
a720: 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72  ueness of primar
a730: 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55  y key values, NU
a740: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
a750: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
a760: 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68  t from.  all oth
a770: 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75  er values, inclu
a780: 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73  ding other NULLs
a790: 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54  . ^If an [INSERT
a7a0: 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20  ] or [UPDATE].  
a7b0: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
a7c0: 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ts to modify the
a7d0: 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73   table content s
a7e0: 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f  o that two or mo
a7f0: 72 65 20 72 6f 77 73 0a 20 20 68 61 76 65 20 69  re rows.  have i
a800: 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61 72 79  dentical primary
a810: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 74 68 61   key values, tha
a820: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
a830: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70  t violation...<p
a840: 3e 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  > According to t
a850: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c  he SQL standard,
a860: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f   PRIMARY KEY sho
a870: 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79  uld always imply
a880: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66   NOT NULL..  Unf
a890: 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20  ortunately, due 
a8a0: 74 6f 20 61 20 62 75 67 20 69 6e 20 73 6f 6d 65  to a bug in some
a8b0: 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 2c   early versions,
a8c0: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68 65   this is not the
a8d0: 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69 74  .  case in SQLit
a8e0: 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 63  e. ^Unless the c
a8f0: 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e 54  olumn is an [INT
a900: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a910: 5d 20 6f 72 0a 20 20 74 68 65 20 74 61 62 6c 65  ] or.  the table
a920: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
a930: 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f 72 20 74  OWID] table or t
a940: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63  he column is dec
a950: 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c 4c 2c 0a  lared NOT NULL,.
a960: 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20    SQLite allows 
a970: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61  NULL values in a
a980: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
a990: 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20 63 6f 75  umn.  SQLite cou
a9a0: 6c 64 20 62 65 20 66 69 78 65 64 20 74 6f 0a 20  ld be fixed to. 
a9b0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
a9c0: 73 74 61 6e 64 61 72 64 2c 20 62 75 74 20 64 6f  standard, but do
a9d0: 69 6e 67 20 73 6f 20 6d 69 67 68 74 20 62 72 65  ing so might bre
a9e0: 61 6b 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63  ak legacy applic
a9f0: 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e 63 65 2c  ations..  Hence,
aa00: 20 69 74 20 68 61 73 20 62 65 65 6e 20 64 65 63   it has been dec
aa10: 69 64 65 64 20 74 6f 20 6d 65 72 65 6c 79 20 64  ided to merely d
aa20: 6f 63 75 6d 65 6e 74 20 74 68 65 20 66 61 63 74  ocument the fact
aa30: 20 74 68 61 74 20 53 51 4c 69 74 65 0a 20 20 61   that SQLite.  a
aa40: 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20 69 6e  llowing NULLs in
aa50: 20 6d 6f 73 74 20 50 52 49 4d 41 52 59 20 4b 45   most PRIMARY KE
aa60: 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74 63 6c  Y columns...<tcl
aa70: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69  >hd_fragment uni
aa80: 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51 55 45  queconst {UNIQUE
aa90: 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73 74 72  } {unique constr
aaa0: 61 69 6e 74 7d 20 7b 55 4e 49 51 55 45 20 63 6f  aint} {UNIQUE co
aab0: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
aac0: 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55 45 3c  <p>^A <b>UNIQUE<
aad0: 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  /b> constraint i
aae0: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 50  s similar to a P
aaf0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
ab00: 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a 20 20  raint, except.  
ab10: 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20 74 61  that a single ta
ab20: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61 6e 79  ble may have any
ab30: 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49 51 55   number of UNIQU
ab40: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 5e  E constraints. ^
ab50: 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49 51 55  For each.  UNIQU
ab60: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20  E constraint on 
ab70: 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63 68 20  the table, each 
ab80: 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  row must contain
ab90: 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e   a unique combin
aba0: 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65  ation.  of value
abb0: 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s in the columns
abc0: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
abd0: 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  he UNIQUE constr
abe0: 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20 74 68  aint. .  ^For th
abf0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e  e purposes of UN
ac00: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
ac10: 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20 20  , NULL values.  
ac20: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64  are considered d
ac30: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
ac40: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69   other values, i
ac50: 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e  ncluding other N
ac60: 55 4c 4c 73 2e 0a 20 20 5e 41 73 20 77 69 74 68  ULLs..  ^As with
ac70: 20 50 52 49 4d 41 52 59 20 4b 45 59 73 2c 20 61   PRIMARY KEYs, a
ac80: 20 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d 63   UNIQUE [table-c
ac90: 6f 6e 73 74 72 61 69 6e 74 5d 20 63 6c 61 75 73  onstraint] claus
aca0: 65 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 0a 20  e must contain. 
acb0: 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d   only column nam
acc0: 65 73 20 26 6d 64 61 73 68 3b 20 74 68 65 20 75  es &mdash; the u
acd0: 73 65 20 6f 66 20 0a 20 20 65 78 70 72 65 73 73  se of .  express
ace0: 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65  ions in an [inde
acf0: 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61  xed-column] of a
ad00: 20 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d 63   UNIQUE [table-c
ad10: 6f 6e 73 74 72 61 69 6e 74 5d 0a 20 20 69 73 20  onstraint].  is 
ad20: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
ad30: 20 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63   ..<p>^In most c
ad40: 61 73 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64  ases, UNIQUE and
ad50: 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63   PRIMARY KEY.  c
ad60: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 69  onstraints are i
ad70: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72  mplemented by cr
ad80: 65 61 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20  eating a unique 
ad90: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
ada0: 61 62 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78  abase..  (The ex
adb0: 63 65 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e  ceptions are [IN
adc0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
add0: 59 5d 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  Y] and PRIMARY K
ade0: 45 59 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f  EYs on .  [WITHO
adf0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
ae00: 2e 29 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20  .).  Hence, the 
ae10: 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61  following schema
ae20: 73 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20  s are logically 
ae30: 65 71 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c  equivalent:..  <
ae40: 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45  ol>.  <li><p>CRE
ae50: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
ae60: 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69  b UNIQUE);.  <li
ae70: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
ae80: 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59   t1(a, b PRIMARY
ae90: 20 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e   KEY);.  <li><p>
aea0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
aeb0: 61 2c 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20  a, b);<br>.     
aec0: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
aed0: 45 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74  E INDEX t1b ON t
aee0: 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c  1(b);.  </ol>..<
aef0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
af00: 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b  {ckconst} {CHECK
af10: 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  } {CHECK constra
af20: 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73  int} {CHECK cons
af30: 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c  traints}</tcl>.<
af40: 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f  p>^(A <b>CHECK</
af50: 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61  b> constraint ma
af60: 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f  y be attached to
af70: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
af80: 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66  tion or.  specif
af90: 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63  ied as a table c
afa0: 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72  onstraint. In pr
afb0: 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20  actice it makes 
afc0: 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e  no difference.)^
afd0: 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61   ^(Each.  time a
afe0: 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65   new row is inse
aff0: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
b000: 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69  ble or an existi
b010: 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61 74 65  ng row is update
b020: 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65 73 73  d,.  the express
b030: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
b040: 69 74 68 20 65 61 63 68 20 43 48 45 43 4b 20 63  ith each CHECK c
b050: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76 61  onstraint is eva
b060: 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73  luated and.  cas
b070: 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
b080: 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
b090: 20 77 61 79 20 61 73 20 61 20 5b 43 41 53 54 20   way as a [CAST 
b0a0: 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20  expression]. If 
b0b0: 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73  the .  result is
b0c0: 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76   zero (integer v
b0d0: 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76  alue 0 or real v
b0e0: 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20  alue 0.0), then 
b0f0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76  a constraint.  v
b100: 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63  iolation has occ
b110: 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65  urred.)^ ^If the
b120: 20 43 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f   CHECK expressio
b130: 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e  n evaluates to N
b140: 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74  ULL, or.  any ot
b150: 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c  her non-zero val
b160: 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20  ue, it is not a 
b170: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
b180: 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70  tion..  ^The exp
b190: 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45  ression of a CHE
b1a0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61  CK constraint ma
b1b0: 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  y not contain a 
b1c0: 73 75 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e  subquery...<tcl>
b1d0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74  hd_fragment {not
b1e0: 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20  nullconst} {NOT 
b1f0: 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20  NULL} {NOT NULL 
b200: 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c  constraint}</tcl
b210: 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e  >.<p>^A <b>NOT N
b220: 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69  ULL</b> constrai
b230: 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61  nt may only be a
b240: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
b250: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a  umn definition,.
b260: 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20    not specified 
b270: 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74  as a table const
b280: 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70  raint.  Not surp
b290: 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f  risingly, ^(a NO
b2a0: 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61  T NULL.  constra
b2b0: 69 6e 74 20 64 69 63 74 61 74 65 73 20 74 68 61  int dictates tha
b2c0: 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  t the associated
b2d0: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
b2e0: 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76  contain a NULL v
b2f0: 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69  alue..  Attempti
b300: 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f  ng to set the co
b310: 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55  lumn value to NU
b320: 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e  LL when insertin
b330: 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20  g a new row or. 
b340: 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69   updating an exi
b350: 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73  sting one causes
b360: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
b370: 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45  olation.)^..<p>E
b380: 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e  xactly how a con
b390: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
b3a0: 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74 68 20  n is dealt with 
b3b0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
b3c0: 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74   the.  [conflict
b3d0: 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69   clause|constrai
b3e0: 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
b3f0: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
b400: 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41  ]. Each .  PRIMA
b410: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20  RY KEY, UNIQUE, 
b420: 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45  NOT NULL and CHE
b430: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61  CK constraint ha
b440: 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  s a default conf
b450: 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f  lict.  resolutio
b460: 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52  n algorithm. ^PR
b470: 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55  IMARY KEY, UNIQU
b480: 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63  E and NOT NULL c
b490: 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62  onstraints may b
b4a0: 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61  e.  explicitly a
b4b0: 73 73 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c  ssigned a defaul
b4c0: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
b4d0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
b4e0: 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61  by including.  a
b4f0: 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   [conflict-claus
b500: 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66 69  e] in their defi
b510: 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66  nitions. ^Or, if
b520: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65   a constraint de
b530: 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20  finition.  does 
b540: 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63  not include a [c
b550: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
b560: 6f 72 20 69 74 20 69 73 20 61 20 43 48 45 43 4b  or it is a CHECK
b570: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65   constraint, the
b580: 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c   default.  confl
b590: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
b5a0: 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52  lgorithm is ABOR
b5b0: 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f  T. ^Different co
b5c0: 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e  nstraints within
b5d0: 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c   the.  same tabl
b5e0: 65 20 6d 61 79 20 68 61 76 65 20 64 69 66 66 65  e may have diffe
b5f0: 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e  rent default con
b600: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
b610: 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65   algorithms. See
b620: 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  .  the section t
b630: 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  itled [ON CONFLI
b640: 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
b650: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
b660: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
b670: 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52  t rowid {INTEGER
b680: 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f   PRIMARY KEY} RO
b690: 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a  WID rowid</tcl>.
b6a0: 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74  <h3>ROWIDs and t
b6b0: 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  he INTEGER PRIMA
b6c0: 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e  RY KEY</h3>..<p>
b6d0: 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54  ^Except for [WIT
b6e0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
b6f0: 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74  es, all rows wit
b700: 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65  hin SQLite table
b710: 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74 20  s.have a 64-bit 
b720: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
b730: 65 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79  ey that uniquely
b740: 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20   identifies the 
b750: 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20 74  row within its t
b760: 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67  able..This integ
b770: 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61  er is usually.ca
b780: 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64 22  lled the "rowid"
b790: 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c  . ^The rowid val
b7a0: 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  ue can be access
b7b0: 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  ed using one of 
b7c0: 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65  the special.case
b7d0: 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d  -independent nam
b7e0: 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  es "rowid", "oid
b7f0: 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20  ", or "_rowid_" 
b800: 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f  in place of a co
b810: 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61  lumn name..^If a
b820: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
b830: 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20 63  a user defined c
b840: 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77  olumn named "row
b850: 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f  id", "oid" or "_
b860: 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68  rowid_",.then th
b870: 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72  at name always r
b880: 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69 63  efers the explic
b890: 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f  itly declared co
b8a0: 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20  lumn and cannot 
b8b0: 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69  be used.to retri
b8c0: 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  eve the integer 
b8d0: 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70  rowid value...<p
b8e0: 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20  >The rowid (and 
b8f0: 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69  "oid" and "_rowi
b900: 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20  d_") is omitted 
b910: 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  in [WITHOUT ROWI
b920: 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f  D] tables..WITHO
b930: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20  UT ROWID tables 
b940: 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62  are only availab
b950: 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65  le in SQLite [ve
b960: 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64  rsion 3.8.2] and
b970: 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20   later..A table 
b980: 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57  that lacks the W
b990: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61  ITHOUT ROWID cla
b9a0: 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20  use is called a 
b9b0: 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a  "rowid table"...
b9c0: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
b9d0: 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69 73 20  rowid tables is 
b9e0: 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72  stored as a B-Tr
b9f0: 65 65 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ee structure con
ba00: 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72  taining.one entr
ba10: 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  y for each table
ba20: 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20   row, using the 
ba30: 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20 74  rowid value as t
ba40: 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61  he key. This mea
ba50: 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76 69  ns that.retrievi
ba60: 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65  ng or sorting re
ba70: 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20 69  cords by rowid i
ba80: 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e  s fast. Searchin
ba90: 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77  g for a record w
baa0: 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20 72  ith a.specific r
bab0: 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c  owid, or for all
bac0: 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f   records with ro
bad0: 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73 70  wids within a sp
bae0: 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69 73  ecified range is
baf0: 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73  .around twice as
bb00: 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c   fast as a simil
bb10: 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20 62  ar search made b
bb20: 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79  y specifying any
bb30: 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b   other PRIMARY.K
bb40: 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61  EY or indexed va
bb50: 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20  lue...<p> ^With 
bb60: 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f  one exception no
bb70: 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20  ted below, if a 
bb80: 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61 73 20  rowid table has 
bb90: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68  a primary key th
bba0: 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61  at consists.of a
bbb0: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61   single column a
bbc0: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
bbd0: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
bbe0: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
bbf0: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
bc00: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
bc10: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
bc20: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
bc30: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
bc40: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
bc50: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
bc60: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
bc70: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
bc80: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
bc90: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
bca0: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
bcb0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
bcc0: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
bcd0: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
bce0: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
bcf0: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
bd00: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
bd10: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
bd20: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
bd30: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
bd40: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
bd50: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
bd60: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
bd70: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
bd80: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
bd90: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
bda0: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
bdb0: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
bdc0: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
bdd0: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
bde0: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
bdf0: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
be00: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
be10: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
be20: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
be30: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
be40: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
be50: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
be60: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
be70: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
be80: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
be90: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
bea0: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
beb0: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
bec0: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
bed0: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
bee0: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
bef0: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
bf00: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
bf10: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
bf20: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
bf30: 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64  sult in backward
bf40: 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  s incompatibilit
bf50: 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20  ies..Hence, the 
bf60: 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f  original behavio
bf70: 72 20 68 61 73 20 62 65 65 6e 20 72 65 74 61 69  r has been retai
bf80: 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e  ned (and documen
bf90: 74 65 64 29 20 62 65 63 61 75 73 65 20 6f 64 64  ted) because odd
bfa0: 0a 62 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63  .behavior in a c
bfb0: 6f 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61  orner case is fa
bfc0: 72 20 62 65 74 74 65 72 20 74 68 61 6e 20 61 20  r better than a 
bfd0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72  compatibility br
bfe0: 65 61 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73  eak.  This means
bff0: 0a 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c  .that ^(the foll
c000: 6f 77 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c  owing three tabl
c010: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61  e declarations a
c020: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c  ll cause the col
c030: 75 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e  umn "x" to be an
c040: 0a 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72  .alias for the r
c050: 6f 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72  owid (an integer
c060: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a   primary key):..
c070: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
c080: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
c090: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c0a0: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74  Y ASC, y, z);</t
c0b0: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
c0c0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
c0d0: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
c0e0: 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c  RY KEY(x ASC));<
c0f0: 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  /tt>.<li><tt>CRE
c100: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
c110: 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
c120: 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29  MARY KEY(x DESC)
c130: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
c140: 0a 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f  .<p>But ^(the fo
c150: 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74  llowing declarat
c160: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ion does not res
c170: 75 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67  ult in "x" being
c180: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68   an alias for.th
c190: 65 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c  e rowid:.<ul>.<l
c1a0: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
c1b0: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
c1c0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c  RIMARY KEY DESC,
c1d0: 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75   y, z);</tt>.</u
c1e0: 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20  l>)^..<p>^Rowid 
c1f0: 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f  values may be mo
c200: 64 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20  dified using an 
c210: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
c220: 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79   in the same.way
c230: 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f   as any other co
c240: 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20  lumn value can, 
c250: 65 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65  either using one
c260: 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   of the built-in
c270: 20 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64   aliases.("rowid
c280: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
c290: 77 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69  wid_") or by usi
c2a0: 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61  ng an alias crea
c2b0: 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65  ted by an intege
c2c0: 72 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e  r.primary key. ^
c2d0: 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e  Similarly, an IN
c2e0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d  SERT statement m
c2f0: 61 79 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c  ay provide a val
c300: 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65  ue to use as the
c310: 0a 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20  .rowid for each 
c320: 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28  row inserted. ^(
c330: 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51  Unlike normal SQ
c340: 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e  Lite columns, an
c350: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
c360: 0a 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f  .key or rowid co
c370: 6c 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69  lumn must contai
c380: 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  n integer values
c390: 2e 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  . Integer primar
c3a0: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63  y key or rowid.c
c3b0: 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61  olumns are not a
c3c0: 62 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61  ble to hold floa
c3d0: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
c3e0: 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42  s, strings, BLOB
c3f0: 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a  s, or NULLs.)^..
c400: 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45  <p>^If an UPDATE
c410: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
c420: 70 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e  pts to set an in
c430: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
c440: 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d  y or rowid colum
c450: 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62  n.to a NULL or b
c460: 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f  lob value, or to
c470: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61   a string or rea
c480: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
c490: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
c4a0: 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y.converted to a
c4b0: 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61  n integer, a "da
c4c0: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
c4d0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
c4e0: 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  d the statement.
c4f0: 69 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20  is aborted. ^If 
c500: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
c510: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
c520: 69 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61  insert a blob va
c530: 6c 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67  lue, or a string
c540: 0a 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74  .or real value t
c550: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
c560: 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
c570: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
c580: 20 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72   into an.integer
c590: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
c5a0: 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20  rowid column, a 
c5b0: 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  "datatype mismat
c5c0: 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73  ch" error occurs
c5d0: 20 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65   and the.stateme
c5e0: 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a  nt is aborted...
c5f0: 3c 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54  <p>^If an INSERT
c600: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
c610: 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20  pts to insert a 
c620: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20  NULL value into 
c630: 61 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67  a rowid or.integ
c640: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  er primary key c
c650: 6f 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65  olumn, the syste
c660: 6d 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74  m chooses an int
c670: 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73  eger value to us
c680: 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61  e as the.rowid a
c690: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20  utomatically. A 
c6a0: 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70  detailed descrip
c6b0: 74 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73  tion of how this
c6c0: 20 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76   is done is prov
c6d0: 69 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75  ided.<a href="au
c6e0: 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61  toinc.html">sepa
c6f0: 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a  rately</a>.</p>.
c700: 0a 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e  .<p>^(The [paren
c710: 74 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72  t key] of a [for
c720: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
c730: 69 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  int] is not allo
c740: 77 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72  wed to.use the r
c750: 6f 77 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e  owid.  The paren
c760: 74 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20  t key must used 
c770: 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e  named columns on
c780: 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ly.)^</p>..<tcl>
c790: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
c7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
c7e0: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
c7f0: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
c800: 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20  rigger {{CREATE 
c810: 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72  TRIGGER}}..Recur
c820: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
c830: 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72  m create-trigger
c840: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
c850: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54 52 49  >^The CREATE TRI
c860: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69  GGER statement i
c870: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72  s used to add tr
c880: 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64  iggers to the .d
c890: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
c8a0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61  ^Triggers are da
c8b0: 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e  tabase operation
c8c0: 73 20 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f  s .that are auto
c8d0: 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72  matically perfor
c8e0: 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69  med when a speci
c8f0: 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65 76  fied database ev
c900: 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70  ent.occurs.  </p
c910: 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72  >..<p>^A trigger
c920: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
c930: 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76  d to fire whenev
c940: 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  er a [DELETE], [
c950: 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44  INSERT],.or [UPD
c960: 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63  ATE] of a.partic
c970: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
c980: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
c990: 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41  henever an [UPDA
c9a0: 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e  TE] occurs on.on
c9b0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65   one or more spe
c9c0: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f  cified columns o
c9d0: 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a  f a table.</p>..
c9e0: 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65  <p>^At this time
c9f0: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
ca00: 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52   only FOR EACH R
ca10: 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74  OW triggers, not
ca20: 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d   FOR EACH.STATEM
ca30: 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48  ENT triggers. ^H
ca40: 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20  ence explicitly 
ca50: 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45  specifying FOR E
ca60: 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f  ACH ROW is optio
ca70: 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52  nal..^FOR EACH R
ca80: 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  OW implies that 
ca90: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
caa0: 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
cab0: 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20  the trigger.may 
cac0: 62 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70  be executed (dep
cad0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48  ending on the WH
cae0: 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65  EN clause) for e
caf0: 61 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77  ach database row
cb00: 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c   being.inserted,
cb10: 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65   updated or dele
cb20: 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  ted by the state
cb30: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
cb40: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
cb50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68  .</p>..<p>^(Both
cb60: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
cb70: 20 61 6e 64 20 74 68 65 20 74 72 69 67 67 65 72   and the trigger
cb80: 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63   actions may acc
cb90: 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20  ess elements of 
cba0: 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69  .the row being i
cbb0: 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64  nserted, deleted
cbc0: 20 6f 72 20 75 70 64 61 74 65 64 20 75 73 69 6e   or updated usin
cbd0: 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20  g references of 
cbe0: 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c  the form ."NEW.<
cbf0: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
cc00: 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63  >" and "OLD.<i>c
cc10: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c  olumn-name</i>",
cc20: 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e   where.<i>column
cc30: 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65  -name</i> is the
cc40: 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d   name of a colum
cc50: 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65  n from the table
cc60: 20 74 68 61 74 20 74 68 65 20 74 72 69 67 67 65   that the trigge
cc70: 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  r.is associated 
cc80: 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e  with.)^ ^(OLD an
cc90: 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  d NEW references
cca0: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
ccb0: 64 20 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e  d in triggers on
ccc0: 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63  .events for whic
ccd0: 68 20 74 68 65 79 20 61 72 65 20 72 65 6c 65 76  h they are relev
cce0: 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ant, as follows:
ccf0: 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
cd00: 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
cd10: 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  g=10>.<tr>.<td v
cd20: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
cd30: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
cd40: 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69  120><i>INSERT</i
cd50: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
cd60: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65  n="top">NEW refe
cd70: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
cd80: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
cd90: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
cda0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
cdb0: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44  width=120><i>UPD
cdc0: 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ATE</i></td>.<td
cdd0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
cde0: 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65  W and OLD refere
cdf0: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ce00: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
ce10: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
ce20: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
ce30: 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54  dth=120><i>DELET
ce40: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
ce50: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20  align="top">OLD 
ce60: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
ce70: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
ce80: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a  </table>.</p>)^.
ce90: 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63  .<p>^If a WHEN c
cea0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
ceb0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
cec0: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a  ments specified.
ced0: 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65  are only execute
cee0: 64 20 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77  d for rows for w
cef0: 68 69 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c  hich the WHEN.cl
cf00: 61 75 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49  ause is true. ^I
cf10: 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65  f no WHEN clause
cf20: 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
cf30: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
cf40: 0a 61 72 65 20 65 78 65 63 75 74 65 64 20 66 6f  .are executed fo
cf50: 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a  r all rows.</p>.
cf60: 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20  .<p>^The BEFORE 
cf70: 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64  or AFTER keyword
cf80: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e   determines when
cf90: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
cfa0: 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65  ions.will be exe
cfb0: 63 75 74 65 64 20 72 65 6c 61 74 69 76 65 20 74  cuted relative t
cfc0: 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c  o the insertion,
cfd0: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72   modification or
cfe0: 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a   removal of the.
cff0: 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c  associated row.<
d000: 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20  /p>..<p>^An [ON 
d010: 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65  CONFLICT] clause
d020: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
d030: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
d040: 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53  [UPDATE] or [INS
d050: 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68  ERT].action with
d060: 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74  in the body of t
d070: 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77  he trigger..^How
d080: 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43  ever if an [ON C
d090: 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20  ONFLICT] clause 
d0a0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
d0b0: 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61  part of .the sta
d0c0: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
d0d0: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
d0e0: 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63  re, then conflic
d0f0: 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63  t handling.polic
d100: 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73  y of the outer s
d110: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
d120: 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c   instead.</p>..<
d130: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
d140: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44  automatically [D
d150: 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72  ROP TRIGGER | dr
d160: 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20  opped].when the 
d170: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20  table that they 
d180: 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20  are .associated 
d190: 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62  with (the <i>tab
d1a0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c  le-name</i> tabl
d1b0: 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42  e) is .[DROP TAB
d1c0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20  LE | dropped].  
d1d0: 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20  ^However if the 
d1e0: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
d1f0: 72 65 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20  reference.other 
d200: 74 61 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67  tables, the trig
d210: 67 65 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70  ger is not dropp
d220: 65 64 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69  ed or modified i
d230: 66 20 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61  f those other.ta
d240: 62 6c 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54  bles are [DROP T
d250: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20  ABLE | dropped] 
d260: 6f 72 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  or [ALTER TABLE 
d270: 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e  | modified].</p>
d280: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61  ..<p>^Triggers a
d290: 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67  re removed using
d2a0: 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47   the [DROP TRIGG
d2b0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  ER] statement.</
d2c0: 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52  p>..<h3>Syntax R
d2d0: 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55  estrictions On U
d2e0: 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61  PDATE, DELETE, a
d2f0: 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d  nd INSERT Statem
d300: 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20  ents Within.    
d310: 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  Triggers</h3>..<
d320: 70 3e 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c  p>^The [UPDATE],
d330: 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b   [DELETE], and [
d340: 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e  INSERT].statemen
d350: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
d360: 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72  rs do not suppor
d370: 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61  t.the full synta
d380: 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20  x for [UPDATE], 
d390: 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49  [DELETE], and [I
d3a0: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
d3b0: 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  s.  The followin
d3c0: 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g.restrictions a
d3d0: 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  pply:</p>..<ul>.
d3e0: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20  <li><p>.  ^(The 
d3f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
d400: 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64  e to be modified
d410: 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c   in an [UPDATE],
d420: 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49   [DELETE], or [I
d430: 4e 53 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65  NSERT].  stateme
d440: 6e 74 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e  nt must be an un
d450: 71 75 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20  qualified table 
d460: 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20  name.  In other 
d470: 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a  words, one must.
d480: 20 20 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74    use just "<i>t
d490: 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f  ablename</i>" no
d4a0: 74 20 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f  t "<i>database</
d4b0: 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62  i><b>.</b><i>tab
d4c0: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68  lename</i>".  wh
d4d0: 65 6e 20 73 70 65 63 69 66 79 69 6e 67 20 74 68  en specifying th
d4e0: 65 20 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65  e table.)^  ^The
d4f0: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
d500: 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74  ified must exist
d510: 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64   in the.  same d
d520: 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74  atabase as the t
d530: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
d540: 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
d550: 72 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20  r is attached.. 
d560: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d570: 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45  <p>.  ^The "INSE
d580: 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65  RT INTO <i>table
d590: 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c  </i> DEFAULT VAL
d5a0: 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
d5b0: 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d   [INSERT] statem
d5c0: 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70  ent.  is not sup
d5d0: 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f  ported..  </p></
d5e0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
d5f0: 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
d600: 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
d610: 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73  lauses are not s
d620: 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50  upported for [UP
d630: 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c  DATE] and.  [DEL
d640: 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ETE] statements.
d650: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
d660: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52  i><p>.  ^(The OR
d670: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
d680: 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44   clauses on [UPD
d690: 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45  ATE] and [DELETE
d6a0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  ] statements are
d6b0: 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64   not.  supported
d6c0: 2e 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  .  ORDER BY and 
d6d0: 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f  LIMIT are not no
d6e0: 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64  rmally supported
d6f0: 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72   for [UPDATE] or
d700: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61  .  [DELETE] in a
d710: 6e 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63  ny context but c
d720: 61 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f  an be enabled fo
d730: 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  r top-level stat
d740: 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74  ements.  using t
d750: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
d760: 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
d770: 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74  LIMIT] compile-t
d780: 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77  ime option.  How
d790: 65 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d  ever,.  that com
d7a0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
d7b0: 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f   only applies to
d7c0: 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41   top-level [UPDA
d7d0: 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d  TE] and [DELETE]
d7e0: 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e  .  statements, n
d7f0: 6f 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  ot [UPDATE] and 
d800: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
d810: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
d820: 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c  ers.)^.  </p></l
d830: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b  i>..<li><p>.  ^[
d840: 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70  common-table-exp
d850: 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74  ression|Common t
d860: 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 5d  able expression]
d870: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
d880: 65 64 20 66 6f 72 0a 20 20 73 74 61 74 65 6d 65  ed for.  stateme
d890: 6e 74 73 20 69 6e 73 69 64 65 20 6f 66 20 74 72  nts inside of tr
d8a0: 69 67 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  iggers..  </p></
d8b0: 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  li>.</ul>..<tcl>
d8c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74  hd_fragment inst
d8d0: 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b  ead_of_trigger {
d8e0: 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53  INSTEAD OF} {INS
d8f0: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d  TEAD OF trigger}
d900: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45  </tcl>.<h3>INSTE
d910: 41 44 20 4f 46 20 74 72 69 67 67 65 72 73 3c 2f  AD OF triggers</
d920: 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  h3>..<p>^Trigger
d930: 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  s may be created
d940: 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20   on [views], as 
d950: 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79  well as ordinary
d960: 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63   tables, by.spec
d970: 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f  ifying INSTEAD O
d980: 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  F in the CREATE 
d990: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
d9a0: 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d  t. .^If one or m
d9b0: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
d9c0: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
d9d0: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
d9e0: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
d9f0: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
da00: 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f   not an.error to
da10: 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45   execute an INSE
da20: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
da30: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
da40: 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73  n the view, .res
da50: 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73  pectively.  ^Ins
da60: 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20  tead,.executing 
da70: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
da80: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74  E or UPDATE on t
da90: 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74  he view causes t
daa0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72  he associated.tr
dab0: 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20  iggers to fire. 
dac0: 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73  ^The real tables
dad0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20   underlying the 
dae0: 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64  view are not mod
daf0: 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f  ified.(except po
db00: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
db10: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
db20: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
db30: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  p>^Note that the
db40: 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
db50: 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  s()] and [sqlite
db60: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
db70: 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f  )] interfaces.do
db80: 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45   not count INSTE
db90: 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69  AD OF trigger fi
dba0: 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b  rings, but the.[
dbb0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
dbc0: 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74  agma] does count
dbd0: 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
dbe0: 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a  ger firing.</p>.
dbf0: 0a 3c 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c  .<h3>Some Exampl
dc00: 65 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  e Triggers</h3>.
dc10: 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74  .<p>^(Assuming t
dc20: 68 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63  hat customer rec
dc30: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
dc40: 69 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72  in the "customer
dc50: 73 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68  s" table, and.th
dc60: 61 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73  at order records
dc70: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
dc80: 68 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c  he "orders" tabl
dc90: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
dca0: 0a 55 50 44 41 54 45 20 74 72 69 67 67 65 72 0a  .UPDATE trigger.
dcb0: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c  ensures that all
dcc0: 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65   associated orde
dcd0: 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65  rs are redirecte
dce0: 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65  d when a custome
dcf0: 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72  r changes.his or
dd00: 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70   her address:</p
dd10: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
dd20: 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {.CREATE TRIGGER
dd30: 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72   update_customer
dd40: 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20  _address UPDATE 
dd50: 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75  OF address ON cu
dd60: 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e  stomers .  BEGIN
dd70: 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65  .    UPDATE orde
dd80: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
dd90: 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45   new.address WHE
dda0: 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65  RE customer_name
ddb0: 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45   = old.name;.  E
ddc0: 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ND;.}</tcl>..<p>
ddd0: 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65  With this trigge
dde0: 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65  r installed, exe
ddf0: 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65  cuting the state
de00: 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment:</p>..<tcl>
de10: 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45  Example {.UPDATE
de20: 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61   customers SET a
de30: 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e  ddress = '1 Main
de40: 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65   St.' WHERE name
de50: 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b   = 'Jack Jones';
de60: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75  .}</tcl>..<p>cau
de70: 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ses the followin
de80: 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69  g to be automati
de90: 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c  cally executed:<
dea0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
deb0: 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72  e {.UPDATE order
dec0: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
ded0: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
dee0: 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65  RE customer_name
def0: 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b   = 'Jack Jones';
df00: 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46  .}</tcl>)^..<p>F
df10: 6f 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66  or an example of
df20: 20 61 6e 20 49 4e 53 54 45 41 44 20 4f 46 20 74   an INSTEAD OF t
df30: 72 69 67 67 65 72 2c 20 63 6f 6e 73 69 64 65 72  rigger, consider
df40: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
df50: 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61  chema:..<tcl>Exa
df60: 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 41  mple {.CREATE TA
df70: 42 4c 45 20 63 75 73 74 6f 6d 65 72 28 0a 20 20  BLE customer(.  
df80: 63 75 73 74 5f 69 64 20 49 4e 54 45 47 45 52 20  cust_id INTEGER 
df90: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63  PRIMARY KEY,.  c
dfa0: 75 73 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20  ust_name TEXT,. 
dfb0: 20 63 75 73 74 5f 61 64 64 72 20 54 45 58 54 0a   cust_addr TEXT.
dfc0: 29 3b 0a 43 52 45 41 54 45 20 56 49 45 57 20 63  );.CREATE VIEW c
dfd0: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
dfe0: 41 53 0a 20 20 20 53 45 4c 45 43 54 20 63 75 73  AS.   SELECT cus
dff0: 74 5f 69 64 2c 20 63 75 73 74 5f 61 64 64 72 20  t_id, cust_addr 
e000: 46 52 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43  FROM customer;.C
e010: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 63 75  REATE TRIGGER cu
e020: 73 74 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53  st_addr_chng.INS
e030: 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f  TEAD OF UPDATE O
e040: 46 20 63 75 73 74 5f 61 64 64 72 20 4f 4e 20 63  F cust_addr ON c
e050: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a  ustomer_address.
e060: 42 45 47 49 4e 0a 20 20 55 50 44 41 54 45 20 63  BEGIN.  UPDATE c
e070: 75 73 74 6f 6d 65 72 20 53 45 54 20 63 75 73 74  ustomer SET cust
e080: 5f 61 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61  _addr=NEW.cust_a
e090: 64 64 72 0a 20 20 20 57 48 45 52 45 20 63 75 73  ddr.   WHERE cus
e0a0: 74 5f 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64  t_id=NEW.cust_id
e0b0: 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a  ;.END;.}</tcl>..
e0c0: 3c 70 3e 57 69 74 68 20 74 68 65 20 73 63 68 65  <p>With the sche
e0d0: 6d 61 20 61 62 6f 76 65 2c 20 61 20 73 74 61 74  ma above, a stat
e0e0: 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  ement of the for
e0f0: 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  m:</p>..<tcl>Exa
e100: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
e110: 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 53  stomer_address S
e120: 45 54 20 63 75 73 74 5f 61 64 64 72 3d 24 6e 65  ET cust_addr=$ne
e130: 77 5f 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w_address WHERE 
e140: 63 75 73 74 5f 69 64 3d 24 63 75 73 74 5f 69 64  cust_id=$cust_id
e150: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61  ;.}</tcl>..<p>Ca
e160: 75 73 65 73 20 74 68 65 20 63 75 73 74 6f 6d 65  uses the custome
e170: 72 2e 63 75 73 74 5f 61 64 64 72 20 66 69 65 6c  r.cust_addr fiel
e180: 64 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20  d to be updated 
e190: 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 0a 63  for a specific.c
e1a0: 75 73 74 6f 6d 65 72 20 65 6e 74 72 79 20 74 68  ustomer entry th
e1b0: 61 74 20 68 61 73 20 63 75 73 74 6f 6d 65 72 2e  at has customer.
e1c0: 63 75 73 74 5f 69 64 20 65 71 75 61 6c 20 74 6f  cust_id equal to
e1d0: 20 74 68 65 20 24 63 75 73 74 5f 69 64 20 70 61   the $cust_id pa
e1e0: 72 61 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f  rameter..Note ho
e1f0: 77 20 74 68 65 20 76 61 6c 75 65 73 20 61 73 73  w the values ass
e200: 69 67 6e 65 64 20 74 6f 20 74 68 65 20 76 69 65  igned to the vie
e210: 77 20 61 72 65 20 6d 61 64 65 20 61 76 61 69 6c  w are made avail
e220: 61 62 6c 65 20 61 73 20 66 69 65 6c 64 0a 69 6e  able as field.in
e230: 20 74 68 65 20 73 70 65 63 69 61 6c 20 22 4e 45   the special "NE
e240: 57 22 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20  W" table within 
e250: 74 68 65 20 74 72 69 67 67 65 72 20 62 6f 64 79  the trigger body
e260: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
e270: 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65  ragment undef_be
e280: 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20  fore {undefined 
e290: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 62  BEFORE trigger b
e2a0: 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  ehavior}</tcl>.<
e2b0: 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54  h3>Cautions On T
e2c0: 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45  he Use Of BEFORE
e2d0: 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a   triggers</h3>..
e2e0: 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55  <p>If a BEFORE U
e2f0: 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20  PDATE or BEFORE 
e300: 44 45 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d  DELETE trigger m
e310: 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74  odifies or delet
e320: 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61  es a row.that wa
e330: 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75  s to have been u
e340: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
e350: 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  d, then the resu
e360: 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73 65 71  lt of the subseq
e370: 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64  uent.update or d
e380: 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  elete operation 
e390: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46  is undefined.  F
e3a0: 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61  urthermore, if a
e3b0: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a   BEFORE trigger.
e3c0: 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65  modifies or dele
e3d0: 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20  tes a row, then 
e3e0: 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20  it is undefined 
e3f0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41  whether or not A
e400: 46 54 45 52 20 74 72 69 67 67 65 72 73 0a 74 68  FTER triggers.th
e410: 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74  at would have ot
e420: 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74  herwise run on t
e430: 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69  hose rows will i
e440: 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e  n fact run..</p>
e450: 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f  ..<p>The value o
e460: 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75  f NEW.rowid is u
e470: 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45  ndefined in a BE
e480: 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69 67  FORE INSERT trig
e490: 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65  ger in which.the
e4a0: 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78   rowid is not ex
e4b0: 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20  plicitly set to 
e4c0: 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a  an integer.</p>.
e4d0: 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74  .<p>Because of t
e4e0: 68 65 20 62 65 68 61 76 69 6f 72 73 20 64 65 73  he behaviors des
e4f0: 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72  cribed above, pr
e500: 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e  ogrammers are en
e510: 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66  couraged to.pref
e520: 65 72 20 41 46 54 45 52 20 74 72 69 67 67 65 72  er AFTER trigger
e530: 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72  s over BEFORE tr
e540: 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  iggers.</p>..<tc
e550: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 61  l>hd_fragment ra
e560: 69 73 65 20 7b 52 41 49 53 45 20 66 75 6e 63 74  ise {RAISE funct
e570: 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
e580: 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
e590: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41  ion</h3>..<p>^(A
e5a0: 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e   special SQL fun
e5b0: 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61  ction RAISE() ma
e5c0: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e  y be used within
e5d0: 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
e5e0: 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66  am,)^.with the f
e5f0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c  ollowing syntax<
e600: 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  /p> ..<tcl>Bubbl
e610: 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66  eDiagram raise-f
e620: 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c  unction</tcl>..<
e630: 70 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20  p>^(When one of 
e640: 52 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e  RAISE(ROLLBACK,.
e650: 2e 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54  ..), RAISE(ABORT
e660: 2c 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46  ,...) or RAISE(F
e670: 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c  AIL,...).is call
e680: 65 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65  ed during trigge
e690: 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74  r-program.execut
e6a0: 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69  ion, the specifi
e6b0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
e6c0: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
e6d0: 65 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72  erformed.the cur
e6e0: 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69  rent query termi
e6f0: 6e 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f  nates.)^.An erro
e700: 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54  r code of [SQLIT
e710: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73  E_CONSTRAINT] is
e720: 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
e730: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c   application,.al
e740: 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65  ong with the spe
e750: 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73  cified error mes
e760: 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  sage.</p>..<p>^W
e770: 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45  hen RAISE(IGNORE
e780: 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  ) is called, the
e790: 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68   remainder of th
e7a0: 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65  e current trigge
e7b0: 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73  r program,.the s
e7c0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61  tatement that ca
e7d0: 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72  used the trigger
e7e0: 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63   program to exec
e7f0: 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73  ute and any subs
e800: 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70  equent.trigger p
e810: 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75  rograms that wou
e820: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ld have been exe
e830: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
e840: 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73  ned. ^No databas
e850: 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f  e.changes are ro
e860: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
e870: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
e880: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
e890: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f  igger program.to
e8a0: 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65   execute is itse
e8b0: 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69  lf part of a tri
e8c0: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68  gger program, th
e8d0: 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20  en that trigger 
e8e0: 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20  program.resumes 
e8f0: 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65  execution at the
e900: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
e910: 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70  e next step..</p
e920: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
e930: 65 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45  ent temptrig {TE
e940: 4d 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e  MP triggers on n
e950: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c  on-TEMP tables}<
e960: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54  /tcl>.<h3>TEMP T
e970: 72 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54  riggers on Non-T
e980: 45 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a  EMP Tables</h3>.
e990: 0a 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20  .<p>^(A trigger 
e9a0: 6e 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20  normally exists 
e9b0: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
e9c0: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
e9d0: 65 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68  e named.after th
e9e0: 65 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69  e "ON" keyword i
e9f0: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
ea00: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
ea10: 20 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70   Except, it is.p
ea20: 6f 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74  ossible to creat
ea30: 65 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52  e a TEMP TRIGGER
ea40: 20 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61   on a table in a
ea50: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e  nother database.
ea60: 29 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67  )^  .Such a trig
ea70: 67 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69  ger will only fi
ea80: 72 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a  re when changes.
ea90: 61 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20  are made to the 
eaa0: 74 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20  target table by 
eab0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
eac0: 74 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65  that defined the
ead0: 20 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20   trigger..Other 
eae0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  applications tha
eaf0: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
eb00: 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62  abase will not b
eb10: 65 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68  e able to see th
eb20: 65 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61  e.TEMP trigger a
eb30: 6e 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20  nd hence cannot 
eb40: 72 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e  run the trigger.
eb50: 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65  </p>..<p>When de
eb60: 66 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72  fining a TEMP tr
eb70: 69 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54  igger on a non-T
eb80: 45 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73  EMP table, it is
eb90: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70   important to.sp
eba0: 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61  ecify the databa
ebb0: 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e  se holding the n
ebc0: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20  on-TEMP table.  
ebd0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20  For example,.in 
ebe0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
ebf0: 61 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69  atement, it is i
ec00: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20  mportant to say 
ec10: 22 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74  "main.tab1" inst
ec20: 65 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62  ead.of just "tab
ec30: 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  1":</p>..<blockq
ec40: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
ec50: 45 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65  E TEMP TRIGGER e
ec60: 78 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20  x1 AFTER INSERT 
ec70: 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74  ON <b>main.</b>t
ec80: 61 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f  ab1 BEGIN ....</
ec90: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
eca0: 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f  >..<p>Failure to
ecb0: 20 73 70 65 63 69 66 79 20 74 68 65 20 73 63 68   specify the sch
ecc0: 65 6d 61 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20  ema name on the 
ecd0: 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75  target table cou
ece0: 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65  ld result.in the
ecf0: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65   TEMP trigger be
ed00: 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74  ing reattached t
ed10: 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  o a table with t
ed20: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a  he same name in.
ed30: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
ed40: 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63   whenever any sc
ed50: 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75  hema change occu
ed60: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs.</p>..<tcl>.#
ed70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
edc0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
edd0: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
ede0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
edf0: 20 76 69 65 77 20 56 49 45 57 20 2a 76 69 65 77   view VIEW *view
ee00: 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
ee10: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
ee20: 65 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63  e-view-stmt.</tc
ee30: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
ee40: 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20  TE VIEW command 
ee50: 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74  assigns a name t
ee60: 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64  o a pre-packaged
ee70: 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65   .[SELECT] state
ee80: 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65  ment. .^Once the
ee90: 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64   view is created
eea0: 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64  , it can be used
eeb0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
eec0: 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b  use.of another [
eed0: 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65  SELECT] in place
eee0: 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
eef0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
ef00: 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45  he "TEMP" or "TE
ef10: 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64  MPORARY" keyword
ef20: 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
ef30: 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20  en "CREATE".and 
ef40: 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20  "VIEW" then the 
ef50: 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65  view that is cre
ef60: 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73  ated is only vis
ef70: 69 62 6c 65 20 74 6f 20 74 68 65 0a 5b 64 61 74  ible to the.[dat
ef80: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ef90: 5d 20 74 68 61 74 20 63 72 65 61 74 65 64 20 69  ] that created i
efa0: 74 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74  t and is automat
efb0: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77  ically deleted w
efc0: 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65  hen.the database
efd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
efe0: 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  losed.</p>..<p> 
eff0: 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 73 63  ^If a <yyterm>sc
f000: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  hema-name</yyter
f010: 6d 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  m> is specified,
f020: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 0a   then the view .
f030: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  is created in th
f040: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
f050: 62 61 73 65 2e 0a 5e 49 74 20 69 73 20 61 6e 20  base..^It is an 
f060: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
f070: 20 62 6f 74 68 20 61 20 3c 79 79 74 65 72 6d 3e   both a <yyterm>
f080: 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
f090: 65 72 6d 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d  erm>.and the TEM
f0a0: 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56  P keyword on a V
f0b0: 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  IEW, unless the 
f0c0: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
f0d0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 0a 69 73  ame</yyterm> .is
f0e0: 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20   "temp"..^If no 
f0f0: 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73  schema name is s
f100: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68  pecified, and th
f110: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69  e TEMP keyword i
f120: 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74  s not present,.t
f130: 68 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74  he VIEW is creat
f140: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ed in the main d
f150: 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  atabase.</p>..<p
f160: 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45  >^You cannot [DE
f170: 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LETE], [INSERT],
f180: 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76   or [UPDATE] a v
f190: 69 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65  iew.  ^Views are
f1a0: 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53   read-only .in S
f1b0: 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72  QLite.  ^However
f1c0: 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20  , in many cases 
f1d0: 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b  you can use an.[
f1e0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
f1f0: 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20  er] on the view 
f200: 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74  to accomplish .t
f210: 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20  he same thing.  
f220: 5e 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76  ^Views are remov
f230: 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52  ed .with the [DR
f240: 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64  OP VIEW] command
f250: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20  .</p>..<p>^If a 
f260: 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
f270: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73  ame</yyterm> lis
f280: 74 20 66 6f 6c 6c 6f 77 73 20 0a 74 68 65 20 3c  t follows .the <
f290: 79 79 74 65 72 6d 3e 76 69 65 77 2d 6e 61 6d 65  yyterm>view-name
f2a0: 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20  </yyterm>, then 
f2b0: 74 68 61 74 20 6c 69 73 74 20 64 65 74 65 72 6d  that list determ
f2c0: 69 6e 65 73 0a 74 68 65 20 6e 61 6d 65 73 20 6f  ines.the names o
f2d0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 66 6f  f the columns fo
f2e0: 72 20 74 68 65 20 76 69 65 77 2e 20 20 5e 49 66  r the view.  ^If
f2f0: 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c   the <yyterm>col
f300: 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
f310: 3e 0a 6c 69 73 74 20 69 73 20 6f 6d 69 74 74 65  >.list is omitte
f320: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 61 6d 65  d, then the name
f330: 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
f340: 20 69 6e 20 74 68 65 20 76 69 65 77 20 61 72 65   in the view are
f350: 20 64 65 72 69 76 65 64 0a 66 72 6f 6d 20 74 68   derived.from th
f360: 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 72  e names of the r
f370: 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
f380: 73 20 69 6e 20 74 68 65 20 5b 73 65 6c 65 63 74  s in the [select
f390: 2d 73 74 6d 74 5d 2e 0a 4e 6f 74 65 20 74 68 61  -stmt]..Note tha
f3a0: 74 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f  t the <yyterm>co
f3b0: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
f3c0: 6d 3e 20 6c 69 73 74 20 73 79 6e 74 61 78 20 69  m> list syntax i
f3d0: 73 20 6f 6e 6c 79 0a 73 75 70 70 6f 72 74 65 64  s only.supported
f3e0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
f3f0: 6f 6e 73 20 33 2e 38 2e 31 32 20 61 6e 64 20 6c  ons 3.8.12 and l
f400: 61 74 65 72 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ater...<tcl>.###
f410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f450: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
f460: 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54  ion {CREATE VIRT
f470: 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  UAL TABLE} {crea
f480: 74 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45  tevtab} {{CREATE
f490: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d   VIRTUAL TABLE}}
f4a0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
f4b0: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
f4c0: 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74  virtual-table-st
f4d0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20  mt.</tcl>..<p>A 
f4e0: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
f4f0: 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20  is an interface 
f500: 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73  to an external s
f510: 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74  torage or comput
f520: 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61  ation.engine tha
f530: 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  t appears to be 
f540: 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73  a table but does
f550: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74   not actually st
f560: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ore information.
f570: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
f580: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  file.</p>..<p>In
f590: 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61   general, you ca
f5a0: 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69  n do anything wi
f5b0: 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61  th a [virtual ta
f5c0: 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65  ble] that can be
f5d0: 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72   done.with an or
f5e0: 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78  dinary table, ex
f5f0: 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63  cept that ^you c
f600: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64  annot create ind
f610: 69 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73  ices or triggers
f620: 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61   on a.virtual ta
f630: 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74  ble.  ^Some virt
f640: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
f650: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
f660: 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61  impose additiona
f670: 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20  l.restrictions. 
f680: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61   For example, ma
f690: 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ny virtual table
f6a0: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e  s are read-only.
f6b0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 3c 79 79  </p>..<p>The <yy
f6c0: 74 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65  term>module-name
f6d0: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 74 68 65  </yyterm> is the
f6e0: 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65   name of an obje
f6f0: 63 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  ct that implemen
f700: 74 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74  ts.the virtual t
f710: 61 62 6c 65 2e 20 20 5e 54 68 65 20 3c 79 79 74  able.  ^The <yyt
f720: 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c  erm>module-name<
f730: 2f 79 79 74 65 72 6d 3e 20 6d 75 73 74 20 62 65  /yyterm> must be
f740: 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68   registered with
f750: 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61  .the SQLite data
f760: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
f770: 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63  using.[sqlite3_c
f780: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20  reate_module()] 
f790: 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  or [sqlite3_crea
f7a0: 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a  te_module_v2()].
f7b0: 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67  prior to issuing
f7c0: 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
f7d0: 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
f7e0: 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65  ent..^The module
f7f0: 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d   takes zero or m
f800: 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  ore comma-separa
f810: 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e  ted arguments..^
f820: 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61  The arguments ca
f830: 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20  n be just about 
f840: 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67  any text as long
f850: 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e   as it has balan
f860: 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e  ced.parentheses.
f870: 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73    The argument s
f880: 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63 69  yntax is suffici
f890: 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68  ently general th
f8a0: 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73  at the.arguments
f8b0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
f8c0: 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d  appear as [colum
f8d0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69  n definitions] i
f8e0: 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a  n a traditional.
f8f0: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
f900: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c  tatement.  .^SQL
f910: 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d  ite passes the m
f920: 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20  odule arguments 
f930: 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20  directly.to the 
f940: 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78  [xCreate] and [x
f950: 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73  Connect] methods
f960: 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   of the module i
f970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69  mplementation.wi
f980: 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70  thout any interp
f990: 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73  retation.  It is
f9a0: 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c   the responsibil
f9b0: 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ity.of the modul
f9c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
f9d0: 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e   to parse and in
f9e0: 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20  terpret its own 
f9f0: 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  arguments.</p>..
fa00: 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61  <p>^A virtual ta
fa10: 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64  ble is destroyed
fa20: 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e   using the ordin
fa30: 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d  ary.[DROP TABLE]
fa40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
fa50: 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49  re is no.DROP VI
fa60: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
fa70: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
fa80: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20  .Section DELETE 
fae0: 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a  delete {DELETE *
faf0: 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72 73  DELETEs}..Recurs
fb00: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
fb10: 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f 74   delete-stmt.</t
fb20: 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45  cl>..<p>The DELE
fb30: 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76  TE command remov
fb40: 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d 20  es records from 
fb50: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
fb60: 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20 5b  fied by the.   [
fb70: 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
fb80: 6e 61 6d 65 5d 2e 0a 0a 3c 70 3e 5e 49 66 20 74  name]...<p>^If t
fb90: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
fba0: 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20  is not present, 
fbb0: 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e 20 74  all records in t
fbc0: 68 65 20 74 61 62 6c 65 20 61 72 65 20 64 65 6c  he table are del
fbd0: 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61 20 57  eted..   ^If a W
fbe0: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
fbf0: 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e  upplied, then on
fc00: 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20 66 6f  ly those rows fo
fc10: 72 20 77 68 69 63 68 20 74 68 65 0a 20 20 20 57  r which the.   W
fc20: 48 45 52 45 20 63 6c 61 75 73 65 20 5b 62 6f 6f  HERE clause [boo
fc30: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
fc40: 20 69 73 20 74 72 75 65 20 61 72 65 20 64 65 6c   is true are del
fc50: 65 74 65 64 2e 0a 20 20 20 5e 52 6f 77 73 20 66  eted..   ^Rows f
fc60: 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70  or which the exp
fc70: 72 65 73 73 69 6f 6e 20 69 73 20 66 61 6c 73 65  ression is false
fc80: 20 6f 72 20 4e 55 4c 4c 20 61 72 65 20 72 65 74   or NULL are ret
fc90: 61 69 6e 65 64 2e 0a 0a 3c 68 33 3e 52 65 73 74  ained...<h3>Rest
fca0: 72 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45  rictions on DELE
fcb0: 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  TE Statements Wi
fcc0: 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47  thin CREATE TRIG
fcd0: 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  GER</h3>..<p>The
fce0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72   following restr
fcf0: 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
fd00: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
fd10: 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69  ts that occur wi
fd20: 74 68 69 6e 20 74 68 65 0a 20 20 20 62 6f 64 79  thin the.   body
fd30: 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52   of a [CREATE TR
fd40: 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
fd50: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
fd60: 3e 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61  >^The <yyterm>ta
fd70: 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
fd80: 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  > specified as p
fd90: 61 72 74 20 6f 66 20 61 20 0a 20 20 20 20 44 45  art of a .    DE
fda0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77  LETE statement w
fdb0: 69 74 68 69 6e 0a 20 20 20 20 61 20 74 72 69 67  ithin.    a trig
fdc0: 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65  ger body must be
fdd0: 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 20 5e   unqualified.  ^
fde0: 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
fdf0: 20 74 68 65 0a 20 20 20 20 3c 69 3e 73 63 68 65   the.    <i>sche
fe00: 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
fe10: 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
fe20: 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20  e table name is 
fe30: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20  not allowed .   
fe40: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
fe50: 2e 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  .)^ ^If the tabl
fe60: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  e to which the t
fe70: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
fe80: 65 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e  ed is.    not in
fe90: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
fea0: 73 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20  se, then DELETE 
feb0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
fec0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20  n the trigger.  
fed0: 20 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72    body must oper
fee0: 61 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69  ate on tables wi
fef0: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  thin the same da
ff00: 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49  tabase as it. ^I
ff10: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20  f the table.    
ff20: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
ff30: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
ff40: 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
ff50: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
ff60: 68 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69  he.    unqualifi
ff70: 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
ff80: 61 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74  able being delet
ff90: 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
ffa0: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
ffb0: 73 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20  s.    it is for 
ffc0: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
ffd0: 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
ffe0: 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
fff0: 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
10000 6e 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64  n.    the main d
10010 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e  atabase, then an
10020 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y other database
10030 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  s in the order t
10040 68 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74  hey were.    att
10050 61 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c  ached)..    .  <
10060 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
10070 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
10080 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
10090 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
100a0 20 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74   DELETE.    stat
100b0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
100c0 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c  iggers.</p>..  <
100d0 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  li><p>^The LIMIT
100e0 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c   and ORDER BY cl
100f0 61 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64  auses (described
10100 20 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75   below) are unsu
10110 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20  pported for.    
10120 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10130 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
10140 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  s.</p>.</ul>..<h
10150 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  3>Optional LIMIT
10160 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c   and ORDER BY cl
10170 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  auses</h3>..<p>^
10180 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  (If SQLite is co
10190 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
101a0 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
101b0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
101c0 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
101d0 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68   option, then th
101e0 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20  e syntax of the 
101f0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10200 20 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20   is.extended by 
10210 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
10220 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42  optional ORDER B
10230 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
10240 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ses:)^</p>..<tcl
10250 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  >BubbleDiagram d
10260 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74  elete-stmt-limit
10270 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66  ed</tcl>..<p>^If
10280 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
10290 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20  ent has a LIMIT 
102a0 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69  clause, the maxi
102b0 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mum number of ro
102c0 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20  ws that.will be 
102d0 64 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64  deleted is found
102e0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
102f0 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20  he accompanying 
10300 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63  expression and c
10310 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20  asting.it to an 
10320 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e  integer value. ^
10330 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
10340 20 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20   the evaluating 
10350 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
10360 0a 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c  .cannot be lossl
10370 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
10380 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
10390 6c 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72  lue, it is an er
103a0 72 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76  ror. ^A .negativ
103b0 65 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73  e LIMIT value is
103c0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
103d0 22 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66  "no limit". ^(If
103e0 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
103f0 65 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20  ement .also has 
10400 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
10410 2c 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  , then it is sim
10420 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
10430 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a   and cast to an.
10440 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41  integer value. A
10450 67 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65  gain, it is an e
10460 72 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75  rror if the valu
10470 65 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  e cannot be loss
10480 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64  lessly.converted
10490 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29   to an integer.)
104a0 5e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e  ^ ^If there is n
104b0 6f 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  o OFFSET clause,
104c0 20 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74   or the calculat
104d0 65 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ed.integer value
104e0 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
104f0 65 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53  e effective OFFS
10500 45 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  ET value is zero
10510 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44  ...<p>^(If the D
10520 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10530 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20  has an ORDER BY 
10540 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
10550 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64   rows that would
10560 20 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20   .be deleted in 
10570 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
10580 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
10590 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
105a0 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44  ding to the .ORD
105b0 45 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74  ER BY. The first
105c0 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20   <i>M</i> rows, 
105d0 77 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69  where <i>M</i> i
105e0 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e  s the value foun
105f0 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
10600 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
10610 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72  e expression, ar
10620 65 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74  e skipped, and t
10630 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69  he following .<i
10640 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69  >N</i>, where <i
10650 3e 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61  >N</i> is the va
10660 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  lue of the LIMIT
10670 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
10680 20 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20   deleted.)^.^If 
10690 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
106a0 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77  han <i>N</i> row
106b0 73 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65  s remaining afte
106c0 72 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46  r taking the OFF
106d0 53 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20  SET clause.into 
106e0 61 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74  account, or if t
106f0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
10700 65 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e  evaluated to a n
10710 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74  egative value, t
10720 68 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e  hen all.remainin
10730 67 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  g rows are delet
10740 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  ed...<p>^If the 
10750 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10760 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59   has no ORDER BY
10770 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
10780 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c  l rows that.woul
10790 64 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20  d be deleted in 
107a0 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
107b0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
107c0 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e  are assembled in
107d0 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72   an.arbitrary or
107e0 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79  der before apply
107f0 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e  ing the LIMIT an
10800 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73  d OFFSET clauses
10810 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74   to determine .t
10820 68 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61  he subset that a
10830 72 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65  re actually dele
10840 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
10850 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
10860 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65  n a DELETE state
10870 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
10880 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
10890 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
108a0 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
108b0 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
108c0 69 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c  ich rows are del
108d0 65 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72  eted is arbitrar
108e0 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66  y.and is not inf
108f0 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f  luenced by the O
10900 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29  RDER BY clause.)
10910 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
10920 65 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20  ent truncateopt 
10930 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69  {truncate optimi
10940 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  zation}</tcl>.<h
10950 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f  3>The Truncate O
10960 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e  ptimization</h3>
10970 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57  ..<p>^When the W
10980 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20  HERE is omitted 
10990 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74  from a DELETE st
109a0 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20  atement and the 
109b0 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65  table.being dele
109c0 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67  ted has no trigg
109d0 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73  ers,.SQLite uses
109e0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
109f0 20 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e   to erase the en
10a00 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65  tire table conte
10a10 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e  nt.without havin
10a20 67 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20  g to visit each 
10a30 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65  row of the table
10a40 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54   individually..T
10a50 68 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f  his "truncate" o
10a60 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65  ptimization make
10a70 73 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e  s the delete run
10a80 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72   much faster..Pr
10a90 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76  ior to SQLite [v
10aa0 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74  ersion 3.6.5], t
10ab0 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
10ac0 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65  mization.also me
10ad0 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71  ant that the [sq
10ae0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
10af0 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f   and.[sqlite3_to
10b00 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
10b10 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68  nterfaces.and th
10b20 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e [count_changes
10b30 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f   pragma].will no
10b40 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  t actually retur
10b50 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
10b60 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a  deleted rows.  .
10b70 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73  That problem has
10b80 20 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f   been fixed as o
10b90 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  f [version 3.6.5
10ba0 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e  ]...<p>^The trun
10bb0 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
10bc0 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65  n can be permane
10bd0 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f  ntly disabled fo
10be0 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79  r all queries.by
10bf0 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c   recompiling.SQL
10c00 69 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51  ite with the [SQ
10c10 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41  LITE_OMIT_TRUNCA
10c20 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d  TE_OPTIMIZATION]
10c30 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77   compile-time sw
10c40 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  itch.</p>..<p>Th
10c50 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
10c60 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f  ization can also
10c70 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20   be disabled at 
10c80 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68  runtime using.th
10c90 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  e [sqlite3_set_a
10ca0 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74  uthorizer()] int
10cb0 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20  erface.  ^If an 
10cc0 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62  authorizer callb
10cd0 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c  ack.returns [SQL
10ce0 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20  ITE_IGNORE] for 
10cf0 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54  an [SQLITE_DELET
10d00 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20  E] action code, 
10d10 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20  then.the DELETE 
10d20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70  operation will p
10d30 72 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74  roceed but the t
10d40 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
10d50 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70  tion will.be byp
10d60 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77  assed and rows w
10d70 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f  ill be deleted o
10d80 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a  ne by one.</p>..
10d90 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
10da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10de0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
10df0 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
10e00 64 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a  detach *DETACH..
10e10 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
10e20 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74  iagram detach-st
10e30 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
10e40 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65  his statement de
10e50 74 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69  taches an additi
10e60 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f  onal database co
10e70 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75  nnection previou
10e80 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73  sly .attached us
10e90 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d  ing the [ATTACH]
10ea0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57   statement.  .^W
10eb0 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72  hen not in [shar
10ec0 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
10ed0 0a 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20  .it is possible 
10ee0 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  to have the same
10ef0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
10f00 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65  ttached multiple
10f10 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69   times using .di
10f20 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61  fferent names, a
10f30 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65  nd detaching one
10f40 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
10f50 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65   file will leave
10f60 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74   the .others int
10f70 61 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68  act.</p>.^In [sh
10f80 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d  ared cache mode]
10f90 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  , attempting to 
10fa0 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20  attach the same 
10fb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f  database file mo
10fc0 72 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73  re.than once res
10fd0 75 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72  ults in an error
10fe0 2e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  ...<p>^This stat
10ff0 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20  ement will fail 
11000 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20  if SQLite is in 
11010 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
11020 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
11030 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
11040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11080 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
11090 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
110a0 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e  pindex {{DROP IN
110b0 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  DEX}}..Recursive
110c0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
110d0 6f 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f  op-index-stmt.</
110e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
110f0 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  OP INDEX stateme
11100 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e  nt removes an in
11110 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74  dex added.with t
11120 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  he [CREATE INDEX
11130 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
11140 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c  e index is compl
11150 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
11160 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68  om.the disk.  Th
11170 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65  e only way to re
11180 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20  cover the index 
11190 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68  is to reenter th
111a0 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43  e.appropriate [C
111b0 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d  REATE INDEX] com
111c0 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
111d0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
111e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
11220 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41  Section {DROP TA
11230 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b  BLE} droptable {
11240 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52  {DROP TABLE}}..R
11250 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
11260 61 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65  agram drop-table
11270 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
11280 3e 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  >^The DROP TABLE
11290 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
112a0 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
112b0 20 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54   with the.[CREAT
112c0 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
112d0 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70  nt.  The name sp
112e0 65 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74  ecified is the.t
112f0 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65  able name.  ^The
11300 20 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69   dropped table i
11310 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
11320 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  oved from the da
11330 74 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61  tabase .schema a
11340 6e 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  nd the disk file
11350 2e 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e  .  The table can
11360 20 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65   not be recovere
11370 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65  d.  .^All indice
11380 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
11390 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
113a0 68 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73  he table are als
113b0 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a  o deleted.</p>..
113c0 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
113d0 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
113e0 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
113f0 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
11400 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
11410 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
11420 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
11430 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65  p>..<p>^If [fore
11440 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
11450 6e 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  nts] are enabled
11460 2c 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  , a DROP TABLE c
11470 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20  ommand performs 
11480 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c  an.implicit [DEL
11490 45 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f  ETE | DELETE FRO
114a0 4d 5d 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72  M] command befor
114b0 65 20 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74  e removing the.t
114c0 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61  able from the da
114d0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e  tabase schema. ^
114e0 41 6e 79 20 74 72 69 67 67 65 72 73 20 61 74 74  Any triggers att
114f0 61 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62  ached to the tab
11500 6c 65 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66  le are.dropped f
11510 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
11520 20 73 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74   schema before t
11530 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
11540 54 45 20 46 52 4f 4d 0a 69 73 20 65 78 65 63 75  TE FROM.is execu
11550 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63 61 6e  ted, so this can
11560 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 74 72  not cause any tr
11570 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20  iggers to fire. 
11580 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e 61 6e  By contrast, ^an
11590 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45  .implicit DELETE
115a0 20 46 52 4f 4d 20 64 6f 65 73 20 63 61 75 73 65   FROM does cause
115b0 20 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a   any configured.
115c0 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74  [foreign key act
115d0 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c  ions] to take pl
115e0 61 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d  ace. .^If the im
115f0 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
11600 4f 4d 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  OM executed.as p
11610 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
11620 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
11630 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
11640 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
11650 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
11660 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
11670 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
11680 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
11690 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
116a0 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 61 75   DELETE FROM cau
116b0 73 65 73 20 61 6e 79 20 0a 64 65 66 65 72 72 65  ses any .deferre
116c0 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
116d0 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20  nstraints to be 
116e0 76 69 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74 68  violated, and th
116f0 65 20 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69  e violations sti
11700 6c 6c 0a 65 78 69 73 74 20 77 68 65 6e 20 74 68  ll.exist when th
11710 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
11720 20 63 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65   committed, an e
11730 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
11740 20 61 74 20 74 68 65 20 74 69 6d 65 0a 6f 66 20   at the time.of 
11750 63 6f 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23  commit...<tcl>.#
11760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
117b0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47  ction {DROP TRIG
117c0 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
117d0 20 7b 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d   {{DROP TRIGGER}
117e0 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
117f0 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74  leDiagram drop-t
11800 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63  rigger-stmt.</tc
11810 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
11820 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
11830 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
11840 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
11850 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
11860 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
11870 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20   ^Once removed, 
11880 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66 69  the trigger defi
11890 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e  nition is no.lon
118a0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
118b0 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
118c0 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70   (or sqlite_temp
118d0 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20 61  _master) table a
118e0 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20  nd is.not fired 
118f0 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  by any subsequen
11900 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  t INSERT, UPDATE
11910 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
11920 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ments...<p>^Note
11930 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
11940 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
11950 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68   dropped when th
11960 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62  e associated tab
11970 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a  le is.dropped...
11980 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
11990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
119a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
119b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
119c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
119d0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
119e0 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
119f0 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
11a00 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11a10 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 76 69 65  Diagram drop-vie
11a20 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
11a30 70 3e 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57  p>^The DROP VIEW
11a40 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
11a50 65 73 20 61 20 76 69 65 77 20 63 72 65 61 74 65  es a view create
11a60 64 20 62 79 20 74 68 65 20 5b 43 52 45 41 54 45  d by the [CREATE
11a70 20 56 49 45 57 5d 20 0a 20 20 73 74 61 74 65 6d   VIEW] .  statem
11a80 65 6e 74 2e 20 5e 54 68 65 20 76 69 65 77 20 64  ent. ^The view d
11a90 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d  efinition is rem
11aa0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  oved from the da
11ab0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62  tabase schema, b
11ac0 75 74 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20  ut .  no actual 
11ad0 64 61 74 61 20 69 6e 20 74 68 65 20 75 6e 64 65  data in the unde
11ae0 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c  rlying base tabl
11af0 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a  es is modified..
11b00 0a 3c 70 3e 5e 28 54 68 65 20 76 69 65 77 20 74  .<p>^(The view t
11b10 6f 20 64 72 6f 70 20 69 73 20 69 64 65 6e 74 69  o drop is identi
11b20 66 69 65 64 20 62 79 20 74 68 65 20 76 69 65 77  fied by the view
11b30 2d 6e 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e  -name and option
11b40 61 6c 20 0a 20 20 73 63 68 65 6d 61 2d 6e 61 6d  al .  schema-nam
11b50 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
11b60 61 72 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20  art of the DROP 
11b70 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20  VIEW statement. 
11b80 54 68 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63  This .  referenc
11b90 65 20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73  e is resolved us
11ba0 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64  ing the standard
11bb0 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b   procedure for [
11bc0 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
11bd0 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66  n].)^..<p>.  ^If
11be0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
11bf0 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
11c00 75 6e 64 20 61 6e 64 20 74 68 65 20 49 46 20 45  und and the IF E
11c10 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
11c20 6e 6f 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20  not .  present, 
11c30 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20  it is an error. 
11c40 5e 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65  ^If the specifie
11c50 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65  d view cannot be
11c60 20 66 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46   found and an IF
11c70 0a 20 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  .  EXISTS clause
11c80 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74   is present in t
11c90 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
11ca0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
11cb0 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
11cc0 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e  a no-op....<tcl>
11cd0 0a 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 23 23 23 23 23 23 23 23 23 0a  ###############.
11d20 53 65 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73  Section {Databas
11d30 65 20 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65  e Object Name Re
11d40 73 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e  solution} {namin
11d50 67 7d 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f  g} {{object reso
11d60 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a  lution}}.</tcl>.
11d70 0a 3c 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65  .<p>.  In SQLite
11d80 2c 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a  , a database obj
11d90 65 63 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e  ect (a table, in
11da0 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20  dex, trigger or 
11db0 76 69 65 77 29 20 69 73 20 69 64 65 6e 74 69 66  view) is identif
11dc0 69 65 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d  ied.  by the nam
11dd0 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20  e of the object 
11de0 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
11df0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
11e00 74 20 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e  t it resides in.
11e10 20 0a 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a   .  Database obj
11e20 65 63 74 73 20 6d 61 79 20 72 65 73 69 64 65 20  ects may reside 
11e30 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
11e40 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
11e50 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20  atabase, or in. 
11e60 20 61 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61   an [ATTACH|atta
11e70 63 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a  ched database]..
11e80 0a 3c 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61  .<p>.  The synta
11e90 78 20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54  x of the [DROP T
11ea0 41 42 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44  ABLE], [DROP IND
11eb0 45 58 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d  EX], [DROP VIEW]
11ec0 2c 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  , [DROP TRIGGER]
11ed0 2c 0a 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b  ,.  [REINDEX], [
11ee0 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64  ALTER TABLE] and
11ef0 20 6d 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d   many other comm
11f00 61 6e 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20  ands all permit 
11f10 74 68 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70  the user to.  sp
11f20 65 63 69 66 79 20 61 20 64 61 74 61 62 61 73 65  ecify a database
11f30 20 6f 62 6a 65 63 74 20 65 69 74 68 65 72 20 62   object either b
11f40 79 20 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65  y its name alone
11f50 2c 20 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e  , or by a combin
11f60 61 74 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e  ation of.  its n
11f70 61 6d 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65  ame and the name
11f80 20 6f 66 20 69 74 73 20 64 61 74 61 62 61 73 65   of its database
11f90 2e 20 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61  . ^(If no databa
11fa0 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
11fb0 61 73 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65  as part.  of the
11fc0 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
11fd0 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  e, then SQLite s
11fe0 65 61 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e  earches the main
11ff0 2c 20 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61  , temp and all a
12000 74 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61  ttached.  databa
12010 73 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63  ses for an objec
12020 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
12030 67 20 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70  g name. The temp
12040 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
12050 72 63 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66  rched.  first, f
12060 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d  ollowed by the m
12070 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f  ain database, fo
12080 6c 6c 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63  llowed all attac
12090 68 65 64 20 64 61 74 61 62 61 73 65 73 20 69 6e  hed databases in
120a0 20 74 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61   the.  order tha
120b0 74 20 74 68 65 79 20 77 65 72 65 20 61 74 74 61  t they were atta
120c0 63 68 65 64 2e 20 54 68 65 20 72 65 66 65 72 65  ched. The refere
120d0 6e 63 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20  nce resolves to 
120e0 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a  the first match.
120f0 20 20 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65    found.)^ For e
12100 78 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28  xample:..<pre>^(
12110 0a 20 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20  .      /* Add a 
12120 74 61 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27  table named 't1'
12130 20 74 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61   to the temp, ma
12140 69 6e 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68  in and an attach
12150 65 64 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ed database */. 
12160 20 20 20 20 20 41 54 54 41 43 48 20 27 66 69 6c       ATTACH 'fil
12170 65 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  e.db' AS aux;.  
12180 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12190 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
121a0 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
121b0 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20  LE t1(x, y);.   
121c0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
121d0 61 75 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20  aux.t1(x, y);.. 
121e0 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
121f0 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t1;         /* D
12200 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d  rop table in tem
12210 70 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  p database */.  
12220 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
12230 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  1;         /* Dr
12240 6f 70 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e  op table in main
12250 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
12260 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
12270 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
12280 70 20 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64  p table in aux d
12290 61 74 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70  atabase */.)^</p
122a0 72 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61  re>..<p>.  ^If a
122b0 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20   schema name is 
122c0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
122d0 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72  t of an object r
122e0 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73  eference, it mus
122f0 74 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d  t be.  either "m
12300 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20  ain", or "temp" 
12310 6f 72 20 74 68 65 20 73 63 68 65 6d 61 2d 6e 61  or the schema-na
12320 6d 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65  me of an attache
12330 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 5e 4c  d database..  ^L
12340 69 6b 65 20 6f 74 68 65 72 20 53 51 4c 20 69 64  ike other SQL id
12350 65 6e 74 69 66 69 65 72 73 2c 20 73 63 68 65 6d  entifiers, schem
12360 61 20 6e 61 6d 65 73 20 61 72 65 20 63 61 73 65  a names are case
12370 2d 69 6e 73 65 6e 73 69 74 69 76 65 2e 0a 20 20  -insensitive..  
12380 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d  ^If a schema nam
12390 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
123a0 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f  then only that o
123b0 6e 65 20 73 63 68 65 6d 61 20 69 73 20 73 65 61  ne schema is sea
123c0 72 63 68 65 64 20 66 6f 72 0a 20 20 74 68 65 20  rched for.  the 
123d0 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c  named object...<
123e0 70 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74  p>.  Most object
123f0 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20   references may 
12400 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20  only resolve to 
12410 61 20 73 70 65 63 69 66 69 63 20 74 79 70 65 20  a specific type 
12420 6f 66 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20  of object (for. 
12430 20 65 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72   example a refer
12440 65 6e 63 65 20 74 68 61 74 20 69 73 20 70 61 72  ence that is par
12450 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
12460 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  E statement may 
12470 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74  only resolve.  t
12480 6f 20 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  o a table object
12490 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20  , not an index, 
124a0 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
124b0 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d  . However in som
124c0 65 20 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65  e contexts .  (e
124d0 2e 67 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61  .g. [REINDEX]) a
124e0 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  n object referen
124f0 63 65 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76  ce may be resolv
12500 65 20 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e to more than o
12510 6e 65 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a  ne type.  of obj
12520 65 63 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63  ect. ^When searc
12530 68 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  hing database sc
12540 68 65 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65  hemas for a name
12550 64 20 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74  d object, object
12560 73 20 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61  s of.  types tha
12570 74 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  t cannot be used
12580 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context 
12590 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  of the reference
125a0 20 61 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69   are always .  i
125b0 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  gnored...<tcl>.#
125c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12600 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
12610 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
12620 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
12630 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
12640 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
12650 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  >^An SQL stateme
12660 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt can be preced
12670 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
12680 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62  d "EXPLAIN" or.b
12690 79 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58  y the phrase "EX
126a0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
126b0 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69  ".  ^Either modi
126c0 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20  fication causes 
126d0 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  the.SQL statemen
126e0 74 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t to behave as a
126f0 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65   query and to re
12700 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  turn information
12710 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53   about.how the S
12720 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  QL statement wou
12730 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64  ld have operated
12740 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
12750 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73  keyword or.phras
12760 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74  e had been omitt
12770 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
12780 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c  output from EXPL
12790 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20  AIN and EXPLAIN 
127a0 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e  QUERY PLAN is in
127b0 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72  tended for.inter
127c0 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20  active analysis 
127d0 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74  and troubleshoot
127e0 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64  ing only.  The d
127f0 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f  etails of the .o
12800 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65  utput format are
12810 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
12820 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65  ge from one rele
12830 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  ase of SQLite to
12840 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69   the next..Appli
12850 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e  cations should n
12860 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f  ot use EXPLAIN o
12870 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
12880 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72  PLAN since.their
12890 20 65 78 61 63 74 20 62 65 68 61 76 69 6f 72 20   exact behavior 
128a0 69 73 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20  is variable and 
128b0 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64  only partially d
128c0 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a  ocumented.</p>..
128d0 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
128e0 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
128f0 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
12900 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
12910 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
12920 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
12930 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
12940 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
12950 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
12960 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
12970 64 20 68 61 76 65 20 75 73 65 64 20 74 6f 20 65  d have used to e
12980 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
12990 6e 64 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41  nd had.the EXPLA
129a0 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
129b0 65 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68  een present. ^Wh
129c0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
129d0 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
129e0 0a 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74  .appears, the st
129f0 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20  atement returns 
12a00 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
12a10 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67  mation regarding
12a20 20 74 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20   the query.plan 
12a30 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
12a40 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20  been used...The 
12a50 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12a60 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65  AN command is de
12a70 73 63 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70  scribed in .[exp
12a80 6c 61 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c  lain query plan|
12a90 6d 6f 72 65 20 64 65 74 61 69 6c 20 68 65 72 65  more detail here
12aa0 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ]...<tcl>.######
12ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12af0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
12b00 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72   expression expr
12b10 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65   {*expression {e
12b20 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78  xpression syntax
12b30 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
12b40 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a  bleDiagram expr.
12b50 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20  </tcl>..<p>This 
12b60 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65  section is diffe
12b70 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74  rent from the ot
12b80 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65  hers.  Most othe
12b90 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68  r sections of.th
12ba0 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b  is document talk
12bb0 73 20 61 62 6f 75 74 20 61 20 70 61 72 74 69 63  s about a partic
12bc0 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ular SQL command
12bd0 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20  .  This section 
12be0 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62  does.not talk ab
12bf0 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65  out a standalone
12c00 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f   command but abo
12c10 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22  ut "expressions"
12c20 20 77 68 69 63 68 20 61 72 65 20 0a 73 75 62 63   which are .subc
12c30 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73  omponents of mos
12c40 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73  t other commands
12c50 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12c60 72 61 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70  ragment binaryop
12c70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74  s {binary operat
12c80 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f  ors}</tcl>.<h3>O
12c90 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
12ca0 3e 5e 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73  >^(SQLite unders
12cb0 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77  tands the follow
12cc0 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61  ing binary opera
12cd0 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66  tors, in order f
12ce0 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c  rom.highest to l
12cf0 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e 63 65  owest precedence
12d00 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
12d10 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63  te><pre>.<font c
12d20 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c  olor="#2c2cf0"><
12d30 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20  big>||.*    /   
12d40 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c   %.+    -.&lt;&l
12d50 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20  t;   &gt;&gt;   
12d60 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20  &amp;    |.&lt; 
12d70 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20     &lt;=   &gt; 
12d80 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d     &gt;=.=    ==
12d90 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b     !=   &lt;&gt;
12da0 20 20 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53     </big>IS   IS
12db0 20 4e 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45   NOT   IN   LIKE
12dc0 20 20 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20     GLOB   MATCH 
12dd0 20 20 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a    REGEXP.AND   .
12de0 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e  OR</font>.</pre>
12df0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
12e00 0a 3c 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20  .<p>^(Supported 
12e10 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f 70 65  unary prefix ope
12e20 72 61 74 6f 72 73 20 61 72 65 20 74 68 65 73 65  rators are these
12e30 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
12e40 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63  te><pre>.<font c
12e50 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c  olor="#2c2cf0"><
12e60 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20  big>-    +    ~ 
12e70 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f     NOT</big></fo
12e80 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt>.</pre></bloc
12e90 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e  kquote>)^..<tcl>
12ea0 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c  hd_fragment coll
12eb0 61 74 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f  ateop {COLLATE o
12ec0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
12ed0 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f  p>^The COLLATE o
12ee0 70 65 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61  perator is a una
12ef0 72 79 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61  ry postfix.opera
12f00 74 6f 72 20 74 68 61 74 20 61 73 73 69 67 6e 73  tor that assigns
12f10 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65   a [collating se
12f20 71 75 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78  quence] to an ex
12f30 70 72 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43  pression..^The C
12f40 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
12f50 68 61 73 20 61 20 68 69 67 68 65 72 20 70 72 65  has a higher pre
12f60 63 65 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d  cedence (binds m
12f70 6f 72 65 20 74 69 67 68 74 6c 79 29 20 74 68 61  ore tightly) tha
12f80 6e 20 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65  n any.binary ope
12f90 72 61 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e  rator and any un
12fa0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
12fb0 74 6f 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a  tor except "~"..
12fc0 28 43 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22  (COLLATE and "~"
12fd0 20 61 72 65 20 61 73 73 6f 63 69 61 74 69 76 65   are associative
12fe0 20 73 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e   so their bindin
12ff0 67 20 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74  g order does not
13000 20 6d 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63   matter.).^The c
13010 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
13020 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c  e set by the COL
13030 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76  LATE operator ov
13040 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c  errides the.coll
13050 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64  ating sequence d
13060 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
13070 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
13080 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75  in a table.[colu
13090 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a  mn definition]..
130a0 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69  See the [collati
130b0 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74  ng sequence| det
130c0 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e  ailed discussion
130d0 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   on collating se
130e0 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20  quences].in the 
130f0 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74 61  [datatype | Data
13100 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d  type In SQLite3]
13110 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64   document for ad
13120 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
13130 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  tion..</p>..<tcl
13140 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54  >hd_puts ".<p>^T
13150 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f  he unary operato
13160 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69  r [Operator +] i
13170 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20  s a no-op.  ^It 
13180 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74  can be applied.t
13190 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65  o strings, numbe
131a0 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c  rs, blobs or NUL
131b0 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20  L and it always 
131c0 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74  returns a result
131d0 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 76  .with the same v
131e0 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65 72  alue as the oper
131f0 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a  and.</p>"</tcl>.
13200 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68  .<p>Note that th
13210 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72 69  ere are two vari
13220 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71  ations of the eq
13230 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75  uals and not equ
13240 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20  als.operators.  
13250 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65  ^Equals can be e
13260 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  ither..<tcl>.hd_
13270 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20  puts "[Operator 
13280 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
13290 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71  ==]..^The non-eq
132a0 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61  uals operator ca
132b0 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65  n be either.[Ope
132c0 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70  rator !=] or [Op
132d0 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b  erator {&lt;&gt;
132e0 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74  }]..^The [Operat
132f0 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20  or ||] operator 
13300 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65  is \"concatenate
13310 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f  \" - it joins to
13320 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73  gether.the two s
13330 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70  trings of its op
13340 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65  erands..^The ope
13350 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  rator [Operator 
13360 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20 76  %] outputs the v
13370 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74  alue of its left
13380 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f   .operand modulo
13390 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72 61   its right opera
133a0 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  nd.</p>..<p>^The
133b0 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62   result of any b
133c0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69  inary operator i
133d0 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72  s either a numer
133e0 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c  ic value or .NUL
133f0 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74 68  L, except for th
13400 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
13410 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70  concatenation op
13420 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77  erator which alw
13430 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74  ays .evaluates t
13440 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  o either NULL or
13450 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f   a text value.</
13460 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74  p>"..hd_fragment
13470 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f   {isisnot} {IS o
13480 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54  perator} {IS NOT
13490 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70   operator}..hd_p
134a0 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70  uts "<p>^The [Op
134b0 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
134c0 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
134d0 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72  }] operators wor
134e0 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72  k.like [Operator
134f0 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f   =] and [Operato
13500 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65  r !=] except whe
13510 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66  n one or both of
13520 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72   the.operands ar
13530 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73  e NULL. ^In this
13540 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f   case, if both o
13550 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
13560 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70  , then the.IS op
13570 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
13580 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64   to 1 (true) and
13590 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72   the IS NOT oper
135a0 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74  ator evaluates.t
135b0 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66  o 0 (false). ^If
135c0 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
135d0 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68  NULL and the oth
135e0 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20  er is not, then 
135f0 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20  the.IS operator 
13600 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28  evaluates to 0 (
13610 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49  false) and the I
13620 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69  S NOT operator i
13630 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20  s 1 (true)..^It 
13640 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
13650 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20  for an IS or IS 
13660 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74  NOT expression t
13670 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55  o evaluate to NU
13680 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b  LL..^Operators [
13690 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64  Operator IS] and
136a0 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e   [Operator {IS N
136b0 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61  OT}] have the sa
136c0 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61  me .precedence a
136d0 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22  s [Operator =]."
136e0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
136f0 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74  nt litvalue {lit
13700 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c  eral value}</tcl
13710 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61  >.<h3>Literal Va
13720 6c 75 65 73 20 28 43 6f 6e 73 74 61 6e 74 73 29  lues (Constants)
13730 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65  </h3>.<p>.A lite
13740 72 61 6c 20 76 61 6c 75 65 20 72 65 70 72 65 73  ral value repres
13750 65 6e 74 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e  ents a constant.
13760 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73  .^Literal values
13770 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65 72 73   may be integers
13780 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  , floating point
13790 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67   numbers, string
137a0 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s,.BLOBs, or NUL
137b0 4c 73 2e 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74  Ls..<p>.The synt
137c0 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61  ax for integer a
137d0 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  nd floating poin
137e0 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c  t literals (coll
137f0 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69  ectively."numeri
13800 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20  c literals") is 
13810 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c  shown by the fol
13820 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c  lowing diagram:<
13830 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
13840 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d  Diagram numeric-
13850 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c  literal</tcl>..<
13860 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69  p>.^(If a numeri
13870 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20  c literal has a 
13880 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72  decimal point or
13890 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69   an exponentiati
138a0 6f 6e 0a 63 6c 61 75 73 65 20 6f 72 20 69 66 20  on.clause or if 
138b0 69 74 73 20 6d 61 67 6e 69 74 75 64 65 20 69 73  its magnitude is
138c0 20 6c 65 73 73 20 74 68 61 6e 20 2d 39 32 32 33   less than -9223
138d0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
138e0 6f 72 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20  or.greater than 
138f0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
13900 38 30 37 2c 20 74 68 65 6e 20 69 74 20 69 73 20  807, then it is 
13910 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
13920 20 6c 69 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77   literal..Otherw
13930 69 73 65 20 69 73 20 69 74 20 69 73 20 61 6e 20  ise is it is an 
13940 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c   integer literal
13950 2e 29 5e 0a 5e 54 68 65 20 22 45 22 20 63 68 61  .)^.^The "E" cha
13960 72 61 63 74 65 72 20 74 68 61 74 20 62 65 67 69  racter that begi
13970 6e 73 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69  ns the exponenti
13980 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20  ation.clause of 
13990 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
139a0 20 6c 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20   literal can be 
139b0 65 69 74 68 65 72 20 75 70 70 65 72 20 6f 72 20  either upper or 
139c0 6c 6f 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68  lower case..^(Th
139d0 65 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 20  e "." character 
139e0 69 73 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a  is always used .
139f0 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  as the decimal p
13a00 6f 69 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65  oint even if the
13a10 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20   locale setting 
13a20 73 70 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f  specifies "," fo
13a30 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68  r.this role - th
13a40 65 20 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72  e use of "," for
13a50 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
13a60 6e 74 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20  nt would result 
13a70 69 6e 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62  in.syntactic amb
13a80 69 67 75 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e  iguity.)^..<tcl>
13a90 68 64 5f 66 72 61 67 6d 65 6e 74 20 68 65 78 69  hd_fragment hexi
13aa0 6e 74 20 7b 68 65 78 61 64 65 63 69 6d 61 6c 20  nt {hexadecimal 
13ab0 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73  integer literals
13ac0 7d 20 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69  } {hexadecimal i
13ad0 6e 74 65 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c  ntegers}</tcl>.<
13ae0 70 3e 5e 48 65 78 61 64 65 63 69 6d 61 6c 20 69  p>^Hexadecimal i
13af0 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20  nteger literals 
13b00 66 6f 6c 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e  follow the C-lan
13b10 67 75 61 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f  guage notation o
13b20 66 0a 22 30 78 22 20 6f 72 20 22 30 58 22 20 66  f."0x" or "0X" f
13b30 6f 6c 6c 6f 77 65 64 20 62 79 20 68 65 78 61 64  ollowed by hexad
13b40 65 63 69 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e  ecimal digits..^
13b50 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 30 78 31  For example, 0x1
13b60 32 33 34 20 6d 65 61 6e 73 20 74 68 65 20 73 61  234 means the sa
13b70 6d 65 20 61 73 20 34 36 36 30 0a 61 6e 64 20 30  me as 4660.and 0
13b80 78 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30  x800000000000000
13b90 30 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  0 means the same
13ba0 20 61 73 20 2d 39 32 32 33 33 37 32 30 33 36 38   as -92233720368
13bb0 35 34 37 37 35 38 30 38 2e 0a 20 5e 28 48 65 78  54775808.. ^(Hex
13bc0 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13bd0 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20 69 6e   literals are in
13be0 74 65 72 70 72 65 74 65 64 20 61 73 20 36 34 2d  terpreted as 64-
13bf0 62 69 74 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65  bit.two's-comple
13c00 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 61 6e  ment integers an
13c10 64 20 61 72 65 20 74 68 75 73 20 6c 69 6d 69 74  d are thus limit
13c20 65 64 0a 74 6f 20 73 69 78 74 65 65 6e 20 73 69  ed.to sixteen si
13c30 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
13c40 20 6f 66 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e   of precision.)^
13c50 0a 53 75 70 70 6f 72 74 20 66 6f 72 20 68 65 78  .Support for hex
13c60 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13c70 73 20 77 61 73 20 61 64 64 65 64 20 74 6f 20 53  s was added to S
13c80 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
13c90 38 2e 36 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61  8.6..^For backwa
13ca0 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
13cb0 79 2c 20 74 68 65 20 22 30 78 22 20 68 65 78 61  y, the "0x" hexa
13cc0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a  decimal integer.
13cd0 6e 6f 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  notation is only
13ce0 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 74   understood by t
13cf0 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
13d00 70 61 72 73 65 72 2c 20 6e 6f 74 20 62 79 20 74  parser, not by t
13d10 68 65 0a 74 79 70 65 20 63 6f 6e 76 65 72 73 69  he.type conversi
13d20 6f 6e 73 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28  ons routines..^(
13d30 53 74 72 69 6e 67 20 76 61 72 69 61 62 6c 65 73  String variables
13d40 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65   that.contain te
13d50 78 74 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b  xt formatted lik
13d60 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e  e hexadecimal in
13d70 74 65 67 65 72 73 20 61 72 65 20 6e 6f 74 0a 69  tegers are not.i
13d80 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 68 65  nterpreted as he
13d90 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
13da0 72 73 20 77 68 65 6e 20 63 6f 65 72 63 69 6e 67  rs when coercing
13db0 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   the string valu
13dc0 65 0a 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  e.into an intege
13dd0 72 20 64 75 65 20 74 6f 20 61 20 5b 43 41 53 54  r due to a [CAST
13de0 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20   expression] or 
13df0 66 6f 72 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66  for a [column af
13e00 66 69 6e 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72  finity].transfor
13e10 6d 61 74 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20  mation or prior 
13e20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20  to performing a 
13e30 6e 75 6d 65 72 69 63 20 6f 70 65 72 61 74 69 6f  numeric operatio
13e40 6e 20 6f 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68  n or for.any oth
13e50 65 72 20 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76  er run-time conv
13e60 65 72 73 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68  ersions.)^  ^(Wh
13e70 65 6e 20 63 6f 65 72 63 69 6e 67 20 61 0a 73 74  en coercing a.st
13e80 72 69 6e 67 20 76 61 6c 75 65 20 69 6e 20 74 68  ring value in th
13e90 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 68 65  e format of a he
13ea0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
13eb0 72 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  r into an intege
13ec0 72 0a 76 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e  r.value, the con
13ed0 76 65 72 73 69 6f 6e 20 70 72 6f 63 65 73 73 20  version process 
13ee0 73 74 6f 70 73 20 77 68 65 6e 20 74 68 65 20 27  stops when the '
13ef0 78 27 20 63 68 61 72 61 63 74 65 72 20 69 73 20  x' character is 
13f00 73 65 65 6e 0a 73 6f 20 74 68 65 20 72 65 73 75  seen.so the resu
13f10 6c 74 69 6e 67 20 69 6e 74 65 67 65 72 20 76 61  lting integer va
13f20 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 7a 65  lue is always ze
13f30 72 6f 2e 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f  ro.)^.^(SQLite o
13f40 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20  nly understands 
13f50 74 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20  the hexadecimal 
13f60 69 6e 74 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e  integer notation
13f70 20 77 68 65 6e 20 69 74 0a 61 70 70 65 61 72 73   when it.appears
13f80 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74   in the SQL stat
13f90 65 6d 65 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20  ement text, not 
13fa0 77 68 65 6e 20 69 74 20 61 70 70 65 61 72 73 20  when it appears 
13fb0 61 73 0a 70 61 72 74 20 6f 66 20 74 68 65 20 63  as.part of the c
13fc0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61  ontent of the da
13fd0 74 61 62 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e  tabase.)^..<p> ^
13fe0 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  A string constan
13ff0 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65  t is formed by e
14000 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72  nclosing the.str
14010 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75  ing in single qu
14020 6f 74 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69  otes (').  ^A si
14030 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69  ngle quote withi
14040 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e  n the string can
14050 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70  .be encoded by p
14060 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c  utting two singl
14070 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f  e quotes in a ro
14080 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c  w - as in Pascal
14090 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65  ..C-style escape
140a0 73 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b  s using the back
140b0 73 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20  slash character 
140c0 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
140d0 64 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61  d because.they a
140e0 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  re not standard 
140f0 53 51 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20  SQL...<p> ^BLOB 
14100 6c 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72  literals are str
14110 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e  ing literals con
14120 74 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69  taining hexadeci
14130 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65  mal data and.pre
14140 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c  ceded by a singl
14150 65 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61  e "x" or "X" cha
14160 72 61 63 74 65 72 2e 20 20 5e 28 45 78 61 6d 70  racter.  ^(Examp
14170 6c 65 3a 20 58 27 35 33 35 31 34 43 36 39 37 34  le: X'53514C6974
14180 36 35 27 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69  65')^..<p>.^A li
14190 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20  teral value can 
141a0 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65  also be the toke
141b0 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a  n "NULL"..</p>..
141c0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
141d0 20 76 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65   varparam parame
141e0 74 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b  ter parameters {
141f0 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d  bound parameter}
14200 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65   {bound paramete
14210 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61  rs}</tcl>.<h3>Pa
14220 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70  rameters</h3>.<p
14230 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f  >.A "variable" o
14240 72 20 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f  r "parameter" to
14250 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20  ken.specifies a 
14260 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74  placeholder in t
14270 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  he expression fo
14280 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20  r a .value that 
14290 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20  is filled in at 
142a0 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
142b0 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  e.[sqlite3_bind_
142c0 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33  blob() | sqlite3
142d0 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20  _bind()] family 
142e0 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  of C/C++ interfa
142f0 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20  ces..Parameters 
14300 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c  can take several
14310 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62   forms:.</p>..<b
14320 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
14330 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  e>.<tr>.<td alig
14340 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
14350 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
14360 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  i>NNN</i></td><t
14370 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
14380 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74  d>.<td>^(A quest
14390 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65  ion mark followe
143a0 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69  d by a number <i
143b0 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61  >NNN</i> holds a
143c0 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e   spot for the.NN
143d0 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20  N-th parameter. 
143e0 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74   NNN must be bet
143f0 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49  ween 1 and [SQLI
14400 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
14410 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e  NUMBER].)^.</td>
14420 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
14430 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
14440 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c  lign="top"><b>?<
14450 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /b></td><td widt
14460 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
14470 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  >^A question mar
14480 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  k that is not fo
14490 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
144a0 65 72 20 63 72 65 61 74 65 73 20 61 20 70 61 72  er creates a par
144b0 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75  ameter.with a nu
144c0 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72  mber one greater
144d0 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73   than the larges
144e0 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  t parameter numb
144f0 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67  er already assig
14500 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65  ned..^If this me
14510 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
14520 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61  r number is grea
14530 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45  ter than.[SQLITE
14540 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
14550 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20  MBER], it is an 
14560 65 72 72 6f 72 2e 0a 54 68 69 73 20 70 61 72 61  error..This para
14570 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20  meter format is 
14580 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
14590 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
145a0 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 0a 65  other database.e
145b0 6e 67 69 6e 65 73 2e 20 20 42 75 74 20 62 65 63  ngines.  But bec
145c0 61 75 73 65 20 69 74 20 69 73 20 65 61 73 79 20  ause it is easy 
145d0 74 6f 20 6d 69 73 63 6f 75 6e 74 20 74 68 65 20  to miscount the 
145e0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20  question marks, 
145f0 74 68 65 0a 75 73 65 20 6f 66 20 74 68 69 73 20  the.use of this 
14600 70 61 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74  parameter format
14610 20 69 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e   is discouraged.
14620 20 20 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72    Programmers ar
14630 65 20 65 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20  e encouraged.to 
14640 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  use one of the s
14650 79 6d 62 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20  ymbolic formats 
14660 62 65 6c 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e  below or the ?NN
14670 4e 20 66 6f 72 6d 61 74 20 61 62 6f 76 65 20 69  N format above i
14680 6e 73 74 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f  nstead..</td>.</
14690 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
146a0 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
146b0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e  n="top"><b>:</b>
146c0 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
146d0 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
146e0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f  /td>.<td>^A colo
146f0 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
14700 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
14710 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
14720 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69  r a .[sqlite3_bi
14730 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
14740 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  e|named paramete
14750 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  r] with the name
14760 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65   :AAAA.  .^(Name
14770 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  d parameters are
14780 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20   also numbered. 
14790 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67  The number assig
147a0 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74  ned is one great
147b0 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67  er than.the larg
147c0 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
147d0 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
147e0 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69  igned.)^ ^If thi
147f0 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61  s means the para
14800 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61  meter.would be a
14810 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72  ssigned a number
14820 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53   greater than [S
14830 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
14840 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
14850 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61  s.an error. To a
14860 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
14870 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76  it is best to av
14880 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64  oid mixing named
14890 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61   and numbered.pa
148a0 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c  rameters.</td>.<
148b0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
148c0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
148d0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62  gn="top"><b>@</b
148e0 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
148f0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
14900 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61  </td>.<td>^An "a
14910 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78  t" sign works ex
14920 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c  actly like a col
14930 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  on, except that 
14940 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20  the name of.the 
14950 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74 65  parameter create
14960 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e  d is @AAAA.</td>
14970 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
14980 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
14990 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c  lign="top"><b>$<
149a0 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
149b0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
149c0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64  "></td>.<td>^A d
149d0 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f  ollar-sign follo
149e0 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
149f0 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68  fier name also h
14a00 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
14a10 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65  a named.paramete
14a20 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  r with the name 
14a30 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64  $AAAA.  ^(The id
14a40 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e  entifier name in
14a50 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69   this case can i
14a60 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f  nclude.one or mo
14a70 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f  re occurrences o
14a80 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66  f "::" and a suf
14a90 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  fix enclosed in 
14aa0 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69  "(...)" containi
14ab0 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61  ng.any text at a
14ac0 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74  ll.)^  This synt
14ad0 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f  ax is the form o
14ae0 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  f a variable nam
14af0 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f  e in the.[http:/
14b00 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54  /www.tcl.tk/ | T
14b10 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
14b20 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
14b30 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
14b40 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
14b50 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
14b60 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
14b70 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
14b80 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
14b90 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
14ba0 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
14bb0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
14bc0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
14bd0 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
14be0 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
14bf0 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
14c00 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
14c10 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
14c20 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
14c30 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c   NULL.  The [sql
14c40 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
14c50 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74  ter_index()] int
14c60 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
14c70 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20  ed.to translate 
14c80 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d  a symbolic param
14c90 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69  eter name into i
14ca0 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75  ts equivalent nu
14cb0 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e  meric index.</p>
14cc0 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
14cd0 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
14ce0 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
14cf0 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
14d00 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
14d10 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
14d20 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
14d30 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
14d40 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61  connection].D ca
14d50 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78  n reduce its max
14d60 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e  imum parameter n
14d70 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20  umber below the 
14d80 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78  compile-time max
14d90 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b  imum.using the [
14da0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44  sqlite3_limit](D
14db0 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  , [SQLITE_LIMIT_
14dc0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
14dd0 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e  ,...) interface.
14de0 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )^.</p>..<tcl>hd
14df0 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
14e00 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
14e10 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e  .<h3>The LIKE an
14e20 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73  d GLOB operators
14e30 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49  </h3>.<p>^The LI
14e40 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
14e50 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
14e60 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
14e70 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20  ^The operand.to 
14e80 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
14e90 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
14ea0 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
14eb0 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74  ern and the left
14ec0 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f   hand.operand co
14ed0 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e  ntains the strin
14ee0 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
14ef0 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a  st the pattern..
14f00 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e  .<tcl>hd_puts "^
14f10 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
14f20 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20   (\"%\") in the 
14f30 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
14f40 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
14f50 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
14f60 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
14f70 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e  the string.  ^An
14f80 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f   underscore.(\"_
14f90 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
14fa0 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
14fb0 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
14fc0 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
14fd0 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72  ng.  ^(Any other
14fe0 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
14ff0 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73  es itself or its
15000 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73   lower/upper cas
15010 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e  e.equivalent (i.
15020 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  e. case-insensit
15030 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e  ive matching).)^
15040 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74    (A bug: ^SQLit
15050 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e  e only.understan
15060 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63  ds upper/lower c
15070 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68  ase for ASCII ch
15080 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61  aracters by defa
15090 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20  ult.  ^The.LIKE 
150a0 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
150b0 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65   sensitive by de
150c0 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64  fault for unicod
150d0 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61  e characters tha
150e0 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65  t are.beyond the
150f0 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46   ASCII range.  F
15100 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65  or example,.^the
15110 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27   expression <b>'
15120 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
15130 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55  p;'A'</b>.is TRU
15140 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67  E but <b>'&aelig
15150 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
15160 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
15170 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f  is FALSE.)<p>"</
15180 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  tcl>..<p>^If the
15190 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45   optional ESCAPE
151a0 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
151b0 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  nt, then the exp
151c0 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e  ression.followin
151d0 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79  g the ESCAPE key
151e0 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61  word must evalua
151f0 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  te to a string c
15200 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73  onsisting of.a s
15210 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e  ingle character.
15220 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65 72   ^This character
15230 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
15240 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
15250 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65  .to include lite
15260 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75  ral percent or u
15270 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63  nderscore charac
15280 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70  ters. ^The escap
15290 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c  e.character foll
152a0 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e  owed by a percen
152b0 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e  t symbol (%), un
152c0 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72  derscore (_), or
152d0 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e   a second.instan
152e0 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70 65  ce of the escape
152f0 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65 6c   character itsel
15300 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65  f matches a.lite
15310 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62  ral percent symb
15320 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20  ol, underscore, 
15330 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61  or a single esca
15340 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65  pe character,.re
15350 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e  spectively...<p>
15360 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20  ^The infix LIKE 
15370 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
15380 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
15390 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69  ng the.applicati
153a0 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66  on-defined SQL f
153b0 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c  unctions [like(<
153c0 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
153d0 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59  )] or.[like(<i>Y
153e0 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  </i>,<i>X</i>,<i
153f0 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70  >Z</i>)]</a>.</p
15400 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20  >..<p>^The LIKE 
15410 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
15420 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69 74  made case sensit
15430 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63  ive using the.[c
15440 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69  ase_sensitive_li
15450 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a  ke pragma].</p>.
15460 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15470 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c  t glob GLOB</tcl
15480 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f  >.<p>^The GLOB o
15490 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c  perator is simil
154a0 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75  ar to LIKE but u
154b0 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c  ses the Unix.fil
154c0 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61  e globbing synta
154d0 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61  x for its wildca
154e0 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f  rds.  ^Also, GLO
154f0 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
15500 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
15510 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e  .  ^Both GLOB an
15520 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72  d LIKE may be pr
15530 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f  eceded by.the NO
15540 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76  T keyword to inv
15550 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66  ert the sense of
15560 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65   the test.  ^The
15570 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65   infix GLOB .ope
15580 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65  rator is impleme
15590 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
155a0 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c  the function.[gl
155b0 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ob(<i>Y</i>,<i>X
155c0 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62  </i>)] and can b
155d0 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76  e modified by ov
155e0 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75  erriding.that fu
155f0 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  nction.</p>..<tc
15600 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
15610 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c  gexp REGEXP</tcl
15620 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50  >.<p>^The REGEXP
15630 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
15640 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f  pecial syntax fo
15650 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a 75  r the regexp().u
15660 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e  ser function.  ^
15670 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65 72  No regexp() user
15680 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
15690 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a  ined by default.
156a0 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68  and so use of th
156b0 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
156c0 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20  r will normally 
156d0 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72  result in an.err
156e0 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66  or message.  ^If
156f0 20 61 6e 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e   an [application
15700 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
15710 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65  ction] named "re
15720 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61  gexp".is added a
15730 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e  t run-time, then
15740 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52   the "<i>X</i> R
15750 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20  EGEXP <i>Y</i>" 
15760 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65  operator will.be
15770 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   implemented as 
15780 61 20 63 61 6c 6c 20 74 6f 20 22 72 65 67 65 78  a call to "regex
15790 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  p(<i>Y</i>,<i>X<
157a0 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  /i>)".</p>..<tcl
157b0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74  >hd_fragment mat
157c0 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c  ch MATCH</tcl>.<
157d0 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f 70 65  p>^The MATCH ope
157e0 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
157f0 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
15800 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c 69 63  e match().applic
15810 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75  ation-defined fu
15820 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65  nction.  ^The de
15830 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75  fault match() fu
15840 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
15850 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20  ation.raises an 
15860 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73  exception and is
15870 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66   not really usef
15880 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e  ul for anything.
15890 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73  .^But extensions
158a0 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68   can override th
158b0 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  e match() functi
158c0 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c  on with more.hel
158d0 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a  pful logic.</p>.
158e0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
158f0 74 20 62 65 74 77 65 65 6e 20 42 45 54 57 45 45  t between BETWEE
15900 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  N</tcl>.<h3>The 
15910 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72  BETWEEN operator
15920 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42  </h3>.<p>^(The B
15930 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20  ETWEEN operator 
15940 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75  is logically equ
15950 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69  ivalent to a pai
15960 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73  r of comparisons
15970 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42  .."<i>x</i> <b>B
15980 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c  ETWEEN</b> <i>y<
15990 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c  /i> <b>AND</b> <
159a0 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75  i>z</i>" is .equ
159b0 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e  ivalent to ."<i>
159c0 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62  x</i><b>&gt;=</b
159d0 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44  ><i>y</i> <b>AND
159e0 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e  </b> <i>x</i><b>
159f0 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69  &lt;=</b><i>z</i
15a00 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74 20 77  >" except.that w
15a10 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74 68 65  ith BETWEEN, the
15a20 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73   <i>x</i> expres
15a30 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61  sion is only eva
15a40 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e  luated once.)^.^
15a50 54 68 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f  The precedence o
15a60 66 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70  f the BETWEEN op
15a70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20 73 61  erator is the sa
15a80 6d 65 20 61 73 20 74 68 65 20 70 72 65 63 65 64  me as the preced
15a90 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72  ence.as operator
15aa0 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20  s <b>==</b> and 
15ab0 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>!=</b> and <b
15ac0 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72  >LIKE</b> and gr
15ad0 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67  oups left to rig
15ae0 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ht...<tcl>hd_fra
15af0 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41 53 45  gment case {CASE
15b00 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63   expression}</tc
15b10 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53 45 20  l>.<h3>The CASE 
15b20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a  expression</h3>.
15b30 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72 65 73  <p>A CASE expres
15b40 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20 72 6f  sion serves a ro
15b50 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20 49 46  le similar to IF
15b60 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74  -THEN-ELSE in ot
15b70 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20  her.programming 
15b80 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70  languages.  ..<p
15b90 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78  >The optional ex
15ba0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63  pression that oc
15bb0 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
15bc0 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64  the CASE keyword
15bd0 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57   and the.first W
15be0 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 63  HEN keyword is c
15bf0 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73 65 22  alled the "base"
15c00 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68   expression. ^Th
15c10 65 72 65 20 61 72 65 20 74 77 6f 20 62 61 73 69  ere are two basi
15c20 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43  c forms.of the C
15c30 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20  ASE expression: 
15c40 74 68 6f 73 65 20 77 69 74 68 20 61 20 62 61 73  those with a bas
15c50 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  e expression and
15c60 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a   those without..
15c70 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77  .<p>^In a CASE w
15c80 69 74 68 6f 75 74 20 61 20 62 61 73 65 20 65 78  ithout a base ex
15c90 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68 20 57  pression, each W
15ca0 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  HEN expression i
15cb0 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e 64 20  s evaluated.and 
15cc0 74 68 65 20 72 65 73 75 6c 74 20 74 72 65 61 74  the result treat
15cd0 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c  ed as a boolean,
15ce0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 74   starting with t
15cf0 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20  he leftmost and 
15d00 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68  continuing.to th
15d10 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65  e right. ^The re
15d20 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45  sult of the CASE
15d30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
15d40 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
15d50 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72 65 73   the THEN.expres
15d60 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73  sion that corres
15d70 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72  ponds to the fir
15d80 73 74 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  st WHEN expressi
15d90 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61 74 65  on that evaluate
15da0 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20  s to.true. ^Or, 
15db0 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  if none of the W
15dc0 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
15dd0 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65  evaluate to true
15de0 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  , the result of.
15df0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
15e00 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  LSE expression, 
15e10 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72  if any. ^If ther
15e20 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70  e is no ELSE exp
15e30 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65  ression and.none
15e40 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70   of the WHEN exp
15e50 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 72 75  ressions are tru
15e60 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76 65 72  e, then the over
15e70 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55  all result is NU
15e80 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20  LL...<p>^A NULL 
15e90 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73 69 64  result is consid
15ea0 65 72 65 64 20 75 6e 74 72 75 65 20 77 68 65 6e  ered untrue when
15eb0 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48 45 4e   evaluating WHEN
15ec0 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20   terms...<p>^In 
15ed0 61 20 43 41 53 45 20 77 69 74 68 20 61 20 62 61  a CASE with a ba
15ee0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  se expression, t
15ef0 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
15f00 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
15f10 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68  just.once and th
15f20 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6d 70  e result is comp
15f30 61 72 65 64 20 61 67 61 69 6e 73 74 20 74 68 65  ared against the
15f40 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65   evaluation of e
15f50 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72 65 73  ach WHEN .expres
15f60 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74  sion from left t
15f70 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65  o right. ^The re
15f80 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45  sult of the CASE
15f90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
15fa0 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f  he .evaluation o
15fb0 66 20 74 68 65 20 54 48 45 4e 20 65 78 70 72 65  f the THEN expre
15fc0 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65  ssion that corre
15fd0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69  sponds to the fi
15fe0 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65 73 73  rst WHEN.express
15ff0 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20 74 68  ion for which th
16000 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
16010 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f  true. ^Or, if no
16020 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 0a 65  ne of the WHEN.e
16030 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
16040 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65 20 65  ate to a value e
16050 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65  qual to the base
16060 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
16070 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75   result.of evalu
16080 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
16090 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e  xpression, if an
160a0 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  y. ^If there is 
160b0 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  no ELSE expressi
160c0 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74  on and.none of t
160d0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
160e0 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20 72 65  ons produce a re
160f0 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20 74 68  sult equal to th
16100 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e base expressio
16110 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20 72  n,.the overall r
16120 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a  esult is NULL...
16130 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69  <p>^When compari
16140 6e 67 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ng a base expres
16150 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 57  sion against a W
16160 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  HEN expression, 
16170 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69  the same.collati
16180 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61 66 66  ng sequence, aff
16190 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d  inity, and NULL-
161a0 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20 61  handling rules a
161b0 70 70 6c 79 20 61 73 20 69 66 20 74 68 65 0a 62  pply as if the.b
161c0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ase expression a
161d0 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  nd WHEN expressi
161e0 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74 69 76  on are respectiv
161f0 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20 61 6e  ely the left- an
16200 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d.right-hand ope
16210 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69 67  rands of an <big
16220 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20  ><b>=</b></big> 
16230 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49  operator.</p> ^I
16240 66 20 74 68 65 20 62 61 73 65 20 0a 65 78 70 72  f the base .expr
16250 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74  ession is NULL t
16260 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
16270 66 20 74 68 65 20 43 41 53 45 20 69 73 20 61 6c  f the CASE is al
16280 77 61 79 73 20 74 68 65 20 72 65 73 75 6c 74 20  ways the result 
16290 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .of evaluating t
162a0 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  he ELSE expressi
162b0 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74 73 2c  on if it exists,
162c0 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74 20 64   or NULL if it d
162d0 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f  oes not...<p>^Bo
162e0 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 20  th forms of the 
162f0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
16300 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f  use lazy, or sho
16310 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65 76 61  rt-circuit, .eva
16320 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54  luation...<p>^(T
16330 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
16340 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 66  ce between the f
16350 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41 53  ollowing two CAS
16360 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  E expressions is
16370 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c   that .the <i>x<
16380 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  /i> expression i
16390 73 20 65 76 61 6c 75 61 74 65 64 20 65 78 61 63  s evaluated exac
163a0 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20  tly once in the 
163b0 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20 62 75  first example bu
163c0 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76 61 6c  t .might be eval
163d0 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  uated multiple t
163e0 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65 63 6f  imes in the seco
163f0 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c  nd:..<ul><pre>.<
16400 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e 20 77  li>CASE x WHEN w
16410 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 77  1 THEN r1 WHEN w
16420 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72  2 THEN r2 ELSE r
16430 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57  3 END.<li>CASE W
16440 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20 72 31  HEN x=w1 THEN r1
16450 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45 4e 20   WHEN x=w2 THEN 
16460 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c  r2 ELSE r3 END.<
16470 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c  /pre></ul>)^...<
16480 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
16490 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74  in_op {IN operat
164a0 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72  or} {NOT IN oper
164b0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
164c0 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49  The IN and NOT I
164d0 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  N operators</h3>
164e0 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20  .<p>^The IN and 
164f0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73  NOT IN operators
16500 20 74 61 6b 65 20 61 20 73 69 6e 67 6c 65 20 73   take a single s
16510 63 61 6c 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e  calar operand on
16520 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20   the.left and a 
16530 76 65 63 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f  vector operand o
16540 6e 20 74 68 65 20 72 69 67 68 74 0a 66 6f 72 6d  n the right.form
16550 65 64 20 62 79 20 61 6e 20 65 78 70 6c 69 63 69  ed by an explici
16560 74 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f  t list of zero o
16570 72 20 6d 6f 72 65 20 73 63 61 6c 61 72 73 20 6f  r more scalars o
16580 72 20 62 79 20 61 20 0a 73 69 6e 67 6c 65 20 73  r by a .single s
16590 75 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74  ubquery..^When t
165a0 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
165b0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
165c0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
165d0 61 20 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a  a subquery, the.
165e0 73 75 62 71 75 65 72 79 20 6d 75 73 74 20 68 61  subquery must ha
165f0 76 65 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75  ve a single resu
16600 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e  lt column..^When
16610 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
16620 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73  nd is an empty s
16630 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  et, the result o
16640 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e  f IN is false an
16650 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20  d the.result of 
16660 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20  NOT IN is true, 
16670 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
16680 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61  e left operand a
16690 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c  nd even if the.l
166a0 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  eft operand is N
166b0 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c  ULL..^(The resul
166c0 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  t of an IN or NO
166d0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  T IN operator is
166e0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
166f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74  he following.mat
16700 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  rix:..<center>.<
16710 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a  table border=1>.
16720 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70  <tr>.<th>Left op
16730 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c  erand <br>is NUL
16740 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
16750 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73  and <br>contains
16760 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20   NULL.<th>Right 
16770 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 61  operand <br>is a
16780 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e  n empty set.<th>
16790 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f 75  Left operand fou
167a0 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72 69  nd <br>within ri
167b0 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e  ght operand.<th>
167c0 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e  Result of <br>IN
167d0 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65   operator.<th>Re
167e0 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20  sult of <br>NOT 
167f0 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e  IN operator.<tr>
16800 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16810 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16820 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16830 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16840 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16850 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16860 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73  gn="center">fals
16870 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  e.<td align="cen
16880 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c  ter">true.<tr>.<
16890 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
168a0 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
168b0 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
168c0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
168d0 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
168e0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
168f0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
16900 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
16910 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16920 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
16930 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16940 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16950 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
16960 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
16970 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16980 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
16990 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
169a0 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69  er">true.<td ali
169b0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73  gn="center">fals
169c0 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
169d0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
169e0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
169f0 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
16a00 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16a10 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16a20 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16a30 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67  r">NULL.<td alig
16a40 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
16a50 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
16a60 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
16a70 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
16a80 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
16a90 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16aa0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
16ab0 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
16ac0 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
16ad0 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
16ae0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16af0 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e  r">NULL.</table>
16b00 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70  .</center>)^..<p
16b10 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c 69  >^Note that SQLi
16b20 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70 61  te allows the pa
16b30 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74  renthesized list
16b40 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75 65   of scalar value
16b50 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d 68  s on.the right-h
16b60 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49  and side of an I
16b70 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
16b80 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65 6d  ator to be an em
16b90 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73  pty list but.mos
16ba0 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  t other SQL data
16bb0 62 61 73 65 20 64 61 74 61 62 61 73 65 20 65 6e  base database en
16bc0 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53 51  gines and the SQ
16bd0 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72 65 71  L92 standard req
16be0 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74 6f  uire.the list to
16bf0 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61 73   contain at leas
16c00 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f  t one element.</
16c10 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
16c20 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53  ment in_op {EXIS
16c30 54 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f  TS operator} {NO
16c40 54 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  T EXISTS operato
16c50 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
16c60 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
16c70 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45  </h3>..<p>^The E
16c80 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 61  XISTS operator a
16c90 6c 77 61 79 73 20 65 76 61 6c 75 61 74 65 73 20  lways evaluates 
16ca0 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  to one of the in
16cb0 74 65 67 65 72 20 76 61 6c 75 65 73 20 30 20 0a  teger values 0 .
16cc0 61 6e 64 20 31 2e 20 5e 49 66 20 65 78 65 63 75  and 1. ^If execu
16cd0 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20  ting the SELECT 
16ce0 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66  statement specif
16cf0 69 65 64 20 61 73 20 74 68 65 20 72 69 67 68 74  ied as the right
16d00 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f  -hand .operand o
16d10 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  f the EXISTS ope
16d20 72 61 74 6f 72 20 77 6f 75 6c 64 20 72 65 74 75  rator would retu
16d30 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  rn one or more r
16d40 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 0a 45 58  ows, then the.EX
16d50 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76  ISTS operator ev
16d60 61 6c 75 61 74 65 73 20 74 6f 20 31 2e 20 5e 49  aluates to 1. ^I
16d70 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  f executing the 
16d80 53 45 4c 45 43 54 20 77 6f 75 6c 64 20 72 65 74  SELECT would ret
16d90 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61  urn.no rows at a
16da0 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20 45 58 49  ll, then the EXI
16db0 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  STS operator eva
16dc0 6c 75 61 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c  luates to 0. ..<
16dd0 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  p>^The number of
16de0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68   columns in each
16df0 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79   row returned by
16e00 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
16e10 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29 20 61  ement.(if any) a
16e20 6e 64 20 74 68 65 20 73 70 65 63 69 66 69 63 20  nd the specific 
16e30 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
16e40 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74 20 6f  have no effect o
16e50 6e 20 74 68 65 20 72 65 73 75 6c 74 73 0a 6f 66  n the results.of
16e60 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
16e70 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74 69 63  ator. ^In partic
16e80 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61  ular, rows conta
16e90 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65  ining NULL value
16ea0 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65  s are.not handle
16eb0 64 20 61 6e 79 20 64 69 66 66 65 72 65 6e 74 6c  d any differentl
16ec0 79 20 66 72 6f 6d 20 72 6f 77 73 20 77 69 74 68  y from rows with
16ed0 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  out NULL values.
16ee0 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20 53 75 62  ..<h3>Scalar Sub
16ef0 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70  queries</h3>..<p
16f00 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
16f10 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20  tement enclosed 
16f20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20 6d  in parentheses m
16f30 61 79 20 61 70 70 65 61 72 20 61 73 20 61 20 73  ay appear as a s
16f40 63 61 6c 61 72 0a 71 75 61 6e 74 69 74 79 2e 20  calar.quantity. 
16f50 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75 73 65 64  ^A [SELECT] used
16f60 20 61 73 20 61 20 73 63 61 6c 61 72 20 71 75 61   as a scalar qua
16f70 6e 74 69 74 79 20 6d 75 73 74 20 72 65 74 75 72  ntity must retur
16f80 6e 20 61 20 72 65 73 75 6c 74 20 73 65 74 0a 77  n a result set.w
16f90 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ith a single col
16fa0 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  umn. ^The result
16fb0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
16fc0 6f 6e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  on is the value 
16fd0 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75  of the.only colu
16fe0 6d 6e 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  mn in the first 
16ff0 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79 20  row returned by 
17000 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
17010 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 53 45  ment. ^If the SE
17020 4c 45 43 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72  LECT .yields mor
17030 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c  e than one resul
17040 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20  t row, all rows 
17050 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20  after the first 
17060 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
17070 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c  .the SELECT yiel
17080 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e  ds no rows, then
17090 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
170a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
170b0 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49  NULL..^(The LIMI
170c0 54 20 6f 66 20 61 20 73 63 61 6c 61 72 20 73 75  T of a scalar su
170d0 62 71 75 65 72 79 20 69 73 20 61 6c 77 61 79 73  bquery is always
170e0 20 31 2e 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49   1..Any other LI
170f0 4d 49 54 20 76 61 6c 75 65 20 67 69 76 65 6e 20  MIT value given 
17100 69 6e 20 74 68 65 20 53 51 4c 20 74 65 78 74 20  in the SQL text 
17110 69 73 20 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c  is ignored.)^..<
17120 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66 20  p>^All types of 
17130 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
17140 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 67  nt, including ag
17150 67 72 65 67 61 74 65 20 61 6e 64 20 5b 63 6f 6d  gregate and [com
17160 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 71 75  pound SELECT].qu
17170 65 72 69 65 73 20 28 71 75 65 72 69 65 73 20 77  eries (queries w
17180 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b  ith keywords lik
17190 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50  e UNION or EXCEP
171a0 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61  T) are allowed a
171b0 73 20 73 63 61 6c 61 72 0a 73 75 62 71 75 65 72  s scalar.subquer
171c0 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20  ies...<h3>Table 
171d0 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33  Column Names</h3
171e0 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  >..<p>^A column 
171f0 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
17200 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
17210 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
17220 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
17230 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
17240 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
17250 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
17260 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
17270 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
17280 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
17290 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65 20  b>"..^The three 
172a0 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
172b0 65 72 73 20 64 65 73 63 72 69 62 65 20 74 68 65  ers describe the
172c0 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
172d0 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
172e0 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
172f0 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
17300 65 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64 20  every table and 
17310 73 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c  so are not avail
17320 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54  able on [WITHOUT
17330 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
17340 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64 65  ^The special ide
17350 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65  ntifiers only re
17360 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b  fer to the row k
17370 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41 54  ey if the [CREAT
17380 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
17390 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  nt does not defi
173a0 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e  ne a real column
173b0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
173c0 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20  ame..^The rowid 
173d0 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77  can be used anyw
173e0 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63  here a regular.c
173f0 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65  olumn can be use
17400 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53  d.</p>..<p>^A [S
17410 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
17420 20 75 73 65 64 20 61 73 20 65 69 74 68 65 72 20   used as either 
17430 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
17440 79 20 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67  y or as the .rig
17450 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20  ht-hand operand 
17460 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e  of an IN, NOT IN
17470 20 6f 72 20 45 58 49 53 54 53 20 65 78 70 72 65   or EXISTS expre
17480 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69  ssion may contai
17490 6e 20 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f  n .references to
174a0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
174b0 6f 75 74 65 72 20 71 75 65 72 79 2e 20 53 75 63  outer query. Suc
174c0 68 20 61 20 73 75 62 71 75 65 72 79 20 69 73 20  h a subquery is 
174d0 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65  known as.a corre
174e0 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 2e 20  lated subquery. 
174f0 5e 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  ^A correlated su
17500 62 71 75 65 72 79 20 69 73 20 72 65 65 76 61 6c  bquery is reeval
17510 75 61 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a  uated each time.
17520 69 74 73 20 72 65 73 75 6c 74 20 69 73 20 72 65  its result is re
17530 71 75 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f  quired. ^An unco
17540 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
17550 79 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  y is evaluated o
17560 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65  nly once.and the
17570 20 72 65 73 75 6c 74 20 72 65 75 73 65 64 20 61   result reused a
17580 73 20 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74  s necessary...<t
17590 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
175a0 61 73 74 65 78 70 72 20 7b 43 41 53 54 20 65 78  astexpr {CAST ex
175b0 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d  pression} {CAST}
175c0 20 7b 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70   {cast} {CAST op
175d0 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
175e0 33 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  3>CAST expressio
175f0 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41  ns</h3>..<p>A CA
17600 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  ST expression of
17610 20 74 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28   the form "CAST(
17620 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c  <i>expr</i> AS <
17630 69 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29  i>type-name</i>)
17640 22 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  ".is used to con
17650 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f  vert the value o
17660 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f  f <i>expr</i> to
17670 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73   .a different [s
17680 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70  torage class] sp
17690 65 63 69 66 69 65 64 20 62 79 20 3c 79 79 74 65  ecified by <yyte
176a0 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
176b0 74 65 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63  term>..^A CAST c
176c0 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d  onversion is sim
176d0 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76  ilar to the conv
176e0 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  ersion that take
176f0 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b  s.place when a [
17700 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
17710 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61   is applied to a
17720 20 76 61 6c 75 65 20 65 78 63 65 70 74 20 74 68   value except th
17730 61 74 20 77 69 74 68 0a 74 68 65 20 43 41 53 54  at with.the CAST
17740 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f   operator the co
17750 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20  nversion always 
17760 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e  takes place even
17770 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
17780 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72  on.lossy and irr
17790 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65  eversible, where
177a0 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  as column affini
177b0 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20  ty only changes 
177c0 74 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66  the data type.of
177d0 20 61 20 76 61 6c 75 65 20 69 66 20 74 68 65 20   a value if the 
177e0 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65  change is lossle
177f0 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
17800 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76  e...<p>^If the v
17810 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c  alue of <i>expr<
17820 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  /i> is NULL, the
17830 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
17840 74 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73  the CAST.express
17850 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c  ion is also NULL
17860 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  . ^Otherwise, th
17870 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20  e storage class 
17880 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73  of the result.is
17890 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
178a0 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c  pplying the [rul
178b0 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69  es for determini
178c0 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ng column affini
178d0 74 79 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74 65  ty] to.the <yyte
178e0 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
178f0 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62  term>...<table b
17900 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20  order=1>.<tr>.  
17910 3c 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66  <th> Affinity of
17920 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61   <yyterm>type-na
17930 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74  me</yyterm>.  <t
17940 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72  h> Conversion Pr
17950 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20  ocessing.<tr>.  
17960 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64  <td> NONE .  <td
17970 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c  > ^Casting a val
17980 75 65 20 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e  ue to a <yyterm>
17990 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  type-name</yyter
179a0 6d 3e 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e  m> with no affin
179b0 69 74 79 20 0a 20 20 63 61 75 73 65 73 20 74 68  ity .  causes th
179c0 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20  e value to.  be 
179d0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
179e0 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67   BLOB.  ^Casting
179f0 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69   to a BLOB consi
17a00 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61 73  sts of first cas
17a10 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65  ting.  the value
17a20 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20   to TEXT in the 
17a30 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68  [encoding] of th
17a40 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
17a50 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e  ction, then.  in
17a60 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 72  terpreting the r
17a70 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65  esulting byte se
17a80 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42  quence as a BLOB
17a90 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54   instead of as T
17aa0 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  EXT...<tr>.  <td
17ab0 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54  > TEXT.  <td> ^T
17ac0 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61  o cast a BLOB va
17ad0 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65  lue to TEXT, the
17ae0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
17af0 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  es that make up 
17b00 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e  the.  BLOB is in
17b10 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
17b20 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20  t encoded using 
17b30 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
17b40 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20  oding..  <p>.   
17b50 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45  ^Casting an INTE
17b60 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75  GER or REAL valu
17b70 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64  e into TEXT rend
17b80 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61 73  ers the value as
17b90 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71   if via .    [sq
17ba0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
17bb0 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  ] except that th
17bc0 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54  e resulting TEXT
17bd0 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64   uses the [encod
17be0 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20  ing] of.    the 
17bf0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
17c00 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ion...<tr>.  <td
17c10 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57  > REAL.  <td> ^W
17c20 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
17c30 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45  OB value to a RE
17c40 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  AL, the value is
17c50 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
17c60 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
17c70 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
17c80 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
17c90 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20   value to REAL, 
17ca0 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
17cb0 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
17cc0 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
17cd0 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
17ce0 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
17cf0 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  al number is ext
17d00 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
17d10 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
17d20 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
17d30 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
17d40 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
17d50 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
17d60 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65 20   TEXT value are 
17d70 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e  ignored when con
17d80 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58  verging from TEX
17d90 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20  T to REAL. ^(If 
17da0 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20  there is.       
17db0 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
17dc0 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
17dd0 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
17de0 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ber, the result 
17df0 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  of the.        c
17e00 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30  onversion is 0.0
17e10 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  .)^..<tr>.  <td>
17e20 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20   INTEGER.  <td> 
17e30 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
17e40 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e  BLOB value to IN
17e50 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65  TEGER, the value
17e60 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
17e70 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
17e80 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
17e90 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
17ea0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  EXT value to INT
17eb0 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73  EGER, the longes
17ec0 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
17ed0 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
17ee0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
17ef0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17f00 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
17f10 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
17f20 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
17f30 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
17f40 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
17f50 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
17f60 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
17f70 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
17f80 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65  value when conve
17f90 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rting from TEXT 
17fa0 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69  to INTEGER are i
17fb0 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72  gnored. ^If ther
17fc0 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20  e.        is no 
17fd0 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
17fe0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17ff0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
18000 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ber, the result.
18010 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
18020 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 20  onversion is 0. 
18030 20 5e 28 54 68 65 20 43 41 53 54 20 6f 70 65 72   ^(The CAST oper
18040 61 74 6f 72 20 75 6e 64 65 72 73 74 61 6e 64 73  ator understands
18050 20 64 65 63 69 6d 61 6c 0a 20 20 20 20 20 20 20   decimal.       
18060 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c 79 20 26   integers only &
18070 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72 73 69 6f  mdash; conversio
18080 6e 20 6f 66 20 5b 68 65 78 61 64 65 63 69 6d 61  n of [hexadecima
18090 6c 20 69 6e 74 65 67 65 72 73 5d 20 73 74 6f 70  l integers] stop
180a0 73 20 0a 20 20 20 20 20 20 20 20 61 74 20 74 68  s .        at th
180b0 65 20 22 78 22 20 69 6e 20 74 68 65 20 22 30 78  e "x" in the "0x
180c0 22 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  " prefix of the 
180d0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
180e0 67 65 72 20 73 74 72 69 6e 67 20 0a 20 20 20 20  ger string .    
180f0 20 20 20 20 61 6e 64 20 74 68 75 73 20 72 65 73      and thus res
18100 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54 20  ult of the CAST 
18110 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29  is always zero.)
18120 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63  ^..      <p>^A c
18130 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61  ast of a REAL va
18140 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45  lue into an INTE
18150 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20 74  GER results in t
18160 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20  he integer.     
18170 20 62 65 74 77 65 65 6e 20 74 68 65 20 52 45 41   between the REA
18180 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72 6f  L value and zero
18190 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73 74   that is closest
181a0 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61 6c   to the REAL val
181b0 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61 20  ue..      ^If a 
181c0 52 45 41 4c 20 69 73 20 67 72 65 61 74 65 72 20  REAL is greater 
181d0 74 68 61 6e 20 74 68 65 20 67 72 65 61 74 65 73  than the greates
181e0 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65  t possible signe
181f0 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20  d.      integer 
18200 28 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37  (+92233720368547
18210 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
18220 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 67 72  result is the gr
18230 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 0a  eatest possible.
18240 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74        signed int
18250 65 67 65 72 20 61 6e 64 20 69 66 20 74 68 65 20  eger and if the 
18260 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68 61  REAL is less tha
18270 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73  n the least poss
18280 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20  ible signed.    
18290 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32 33    integer (-9223
182a0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 29  372036854775808)
182b0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
182c0 20 69 73 20 74 68 65 20 6c 65 61 73 74 20 70 6f   is the least po
182d0 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67  ssible.      sig
182e0 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20  ned integer...  
182f0 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f 20      <p>Prior to 
18300 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
18310 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67 20 61 20  .8.2, casting a 
18320 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61 74  REAL value great
18330 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b 39  er than.      +9
18340 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
18350 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e 74  07.0 into an int
18360 65 67 65 72 20 72 65 73 75 6c 74 65 64 20 69 6e  eger resulted in
18370 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74 69   the most negati
18380 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72  ve.      integer
18390 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  , -9223372036854
183a0 37 37 35 38 30 38 2e 20 20 54 68 69 73 20 62 65  775808.  This be
183b0 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e 74  havior was meant
183c0 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65 0a   to emulate the.
183d0 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f        behavior o
183e0 66 20 78 38 36 2f 78 36 34 20 68 61 72 64 77 61  f x86/x64 hardwa
183f0 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74 68  re when doing th
18400 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61 73  e equivalent cas
18410 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  t...<tr>.  <td> 
18420 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e  NUMERIC.  <td> ^
18430 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 6f  Casting a TEXT o
18440 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  r BLOB value int
18450 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74 20  o NUMERIC first 
18460 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20 20  does a forced.  
18470 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f   conversion into
18480 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20 66   REAL but then f
18490 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73 20  urther converts 
184a0 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
184b0 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61 6e  INTEGER if.   an
184c0 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f  d only if the co
184d0 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45  nversion from RE
184e0 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73  AL to INTEGER is
184f0 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65   lossless and re
18500 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68 69  versible..   Thi
18510 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f  s is the only co
18520 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20  ntext in SQLite 
18530 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49  where the NUMERI
18540 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61  C and INTEGER [a
18550 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62 65  ffinities].   be
18560 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c 79  have differently
18570 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e  ..   <p> ^Castin
18580 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54 45  g a REAL or INTE
18590 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d  GER value to NUM
185a0 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c  ERIC is a no-op,
185b0 20 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c 0a   even if a real.
185c0 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 62     value could b
185d0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
185e0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
185f0 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f  eger...</tr>..</
18600 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65  table>..<p>^Note
18610 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74   that the result
18620 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e   from casting an
18630 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  y non-BLOB value
18640 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e   into a .BLOB an
18650 64 20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f  d the result fro
18660 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42 4c  m casting any BL
18670 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  OB value into a 
18680 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d  non-BLOB value.m
18690 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20  ay be different 
186a0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
186b0 74 68 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ther the databas
186c0 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20  e [encoding] is 
186d0 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c  UTF-8,.UTF-16be,
186e0 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a   or UTF-16le....
186f0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
18700 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62 6f   booleanexpr {bo
18710 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
18720 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c  }</tcl>.<h3>Bool
18730 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 3c  ean Expressions<
18740 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  /h3>..<p>The SQL
18750 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72   language featur
18760 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74 65  es several conte
18770 78 74 73 20 77 68 65 72 65 20 61 6e 20 65 78 70  xts where an exp
18780 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61 6c  ression is .eval
18790 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  uated and the re
187a0 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20 74  sult converted t
187b0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72 75  o a boolean (tru
187c0 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c 75  e or false) valu
187d0 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78 74  e. These.context
187e0 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20  s are:..  <ul>. 
187f0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 52     <li> the WHER
18800 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  E clause of a SE
18810 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72 20  LECT, UPDATE or 
18820 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
18830 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 4f  ,.    <li> the O
18840 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
18850 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20 61  e of a join in a
18860 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18870 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
18880 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  HAVING clause of
18890 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
188a0 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
188b0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
188c0 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72 2c   an SQL trigger,
188d0 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74 68   and.    <li> th
188e0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 72  e WHEN clause or
188f0 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d 65   clauses of some
18900 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
18910 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  s..  </ul>..<p>^
18920 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20  (To convert the 
18930 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53 51  results of an SQ
18940 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  L expression to 
18950 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c  a boolean value,
18960 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63 61   SQLite.first ca
18970 73 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 74  sts the result t
18980 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75  o a NUMERIC valu
18990 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  e in the same wa
189a0 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65 78  y as a .[CAST ex
189b0 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 6e 75 6d  pression]. A num
189c0 65 72 69 63 20 7a 65 72 6f 20 76 61 6c 75 65 20  eric zero value 
189d0 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30  (integer value 0
189e0 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c 75 65 20   or real .value 
189f0 30 2e 30 29 20 69 73 20 63 6f 6e 73 69 64 65 72  0.0) is consider
18a00 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e 20  ed to be false. 
18a10 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
18a20 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a 41 6c 6c   still NULL..All
18a30 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
18a40 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  e considered tru
18a50 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65  e.)^..<p>^(For e
18a60 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c 75  xample, the valu
18a70 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c  es NULL, 0.0, 0,
18a80 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20 27   'english' and '
18a90 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 69  0' are all consi
18aa0 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c 73  dered.to be fals
18ab0 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31 2c  e.)^ ^(Values 1,
18ac0 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31 20   1.0, 0.1, -0.1 
18ad0 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20 61  and '1english' a
18ae0 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
18af0 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c 68   .be true.)^..<h
18b00 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e  3>Functions</h3>
18b10 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f  .<p>SQLite suppo
18b20 72 74 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66 75  rts many [corefu
18b30 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b  nc|simple] and [
18b40 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74  aggfunc|aggregat
18b50 65 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  e].SQL functions
18b60 2e 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61 74  .  For presentat
18b70 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
18b80 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
18b90 72 65 20 66 75 72 74 68 65 72 0a 73 75 62 64 69  re further.subdi
18ba0 76 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72 65  vided into [core
18bb0 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
18bc0 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
18bd0 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66  func|date-time f
18be0 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69  unctions]..Appli
18bf0 63 61 74 69 6f 6e 73 20 63 61 6e 20 61 64 64 20  cations can add 
18c00 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c 20 77  new functions, w
18c10 72 69 74 74 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c  ritten in C/C++,
18c20 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
18c30 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
18c40 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
18c50 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69  ..</p>..<p>^It i
18c60 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61  s possible to ha
18c70 76 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  ve an aggregate 
18c80 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
18c90 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
18ca0 0a 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  .simple function
18cb0 2c 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  , as long as the
18cc0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
18cd0 65 6e 74 73 20 66 6f 72 20 74 68 65 20 74 77 6f  ents for the two
18ce0 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 0a 66 75   forms of the.fu
18cf0 6e 63 74 69 6f 6e 20 61 72 65 20 64 69 66 66 65  nction are diffe
18d00 72 65 6e 74 2e 20 20 5e 46 6f 72 20 65 78 61 6d  rent.  ^For exam
18d10 70 6c 65 2c 20 74 68 65 20 5b 61 67 67 5f 6d 61  ple, the [agg_ma
18d20 78 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f  x|max()] functio
18d30 6e 20 77 69 74 68 20 61 0a 73 69 6e 67 6c 65 20  n with a.single 
18d40 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 61  argument is an a
18d50 67 67 72 65 67 61 74 65 20 61 6e 64 20 74 68 65  ggregate and the
18d60 20 5b 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f   [max()] functio
18d70 6e 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d 6f  n with two or mo
18d80 72 65 0a 61 72 67 75 6d 65 6e 74 73 20 69 73 20  re.arguments is 
18d90 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
18da0 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  n...<tcl>.######
18db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18df0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
18e00 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73   {Core Functions
18e10 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72  } corefunc {*cor
18e20 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63  efunc}.proc func
18e30 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77  def {syntax keyw
18e40 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68  ords desc} {.  h
18e50 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20  d_puts {<tr>}.  
18e60 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b  regsub -all {\s+
18e70 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  } [string trim $
18e80 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d  syntax] {<br />}
18e90 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
18ea0 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b   -all {\(([^*)]+
18eb0 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c  )\)} $syntax {(<
18ec0 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61  i>\1</i>)} synta
18ed0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
18ee0 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69  {,} $syntax {</i
18ef0 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20  >,<i>} syntax.  
18f00 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e  regsub -all {<i>
18f10 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e  \.\.\.</i>} $syn
18f20 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78  tax {...} syntax
18f30 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20  .  hd_puts "<td 
18f40 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
18f50 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77  lign=\"right\" w
18f60 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20  idth=\"120\">". 
18f70 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b   if {[llength $k
18f80 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20  eywords]==0} {. 
18f90 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f     regexp {[a-z_
18fa0 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65  ]+} $syntax name
18fb0 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74  .    hd_fragment
18fc0 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24   $name *$name "$
18fd0 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e  {name}() SQL fun
18fe0 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20  ction".  } else 
18ff0 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61  {.    set fragna
19000 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77  me [lindex $keyw
19010 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73  ords 0].    regs
19020 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d  ub -all {[^a-z]}
19030 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72   $fragname {} fr
19040 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  agname.    hd_fr
19050 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65  agment $fragname
19060 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
19070 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61  words [string ma
19080 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77  p {\n { }} $keyw
19090 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70  ords].  }.  hd_p
190a0 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74 64  uts "$syntax</td
190b0 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74  >".  hd_puts {<t
190c0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d  d valign="top">}
190d0 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64  .  hd_resolve $d
190e0 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  esc.  hd_puts {<
190f0 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74  /td></tr>}.}.</t
19100 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  cl>..<p>The core
19110 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
19120 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
19130 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
19140 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61   .[datefunc | Da
19150 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75  te &amp; Time fu
19160 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67  nctions] and.[ag
19170 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gfunc | aggregat
19180 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65  e functions] are
19190 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61   documented sepa
191a0 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c  rately.  An.appl
191b0 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69  ication may defi
191c0 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75  ne additional.fu
191d0 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
191e0 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74  in C and added t
191f0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
19200 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20  ngine using.the 
19210 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
19220 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e  function()] API.
19230 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
19240 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
19250 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
19260 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20  def {abs(X)} {} 
19270 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20  {.  ^The abs(X) 
19280 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19290 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
192a0 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72  lue of the numer
192b0 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e  ic.  argument X.
192c0 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e    ^Abs(X) return
192d0 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e  s NULL if X is N
192e0 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29  ULL. .  ^(Abs(X)
192f0 20 72 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20   returns 0.0 if 
19300 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  X is a string or
19310 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e   blob.  that can
19320 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
19330 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61   to a numeric va
19340 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73  lue.)^  ^If X is
19350 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20   the .  integer 
19360 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
19370 35 38 30 38 20 74 68 65 6e 20 61 62 73 28 58 29  5808 then abs(X)
19380 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
19390 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72  er overflow.  er
193a0 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20  ror since there 
193b0 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74  is no equivalent
193c0 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74   positive 64-bit
193d0 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20   two complement 
193e0 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  value..}..funcde
193f0 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  f {changes()} {}
19400 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65   {.  ^The change
19410 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  s() function ret
19420 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
19430 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  of database rows
19440 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67   that were chang
19450 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64  ed.  or inserted
19460 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
19470 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
19480 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52   completed INSER
19490 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20  T, DELETE,.  or 
194a0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
194b0 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73  , exclusive of s
194c0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77  tatements in low
194d0 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72  er-level trigger
194e0 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65  s..  ^The change
194f0 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
19500 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19510 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
19520 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
19530 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
19540 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
19550 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
19560 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
19570 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
19580 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c  {char(X1,X2,...,
19590 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68  XN)} {} {.  ^(Th
195a0 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e  e char(X1,X2,...
195b0 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ,XN) function re
195c0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63  turns a string c
195d0 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61  omposed of chara
195e0 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68 65  cters having the
195f0 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65  .   unicode code
19600 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66   point values of
19610 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68 72   integers X1 thr
19620 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74  ough XN, respect
19630 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ively.)^.}..func
19640 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c  def {coalesce(X,
19650 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  Y,...)} {} {.  ^
19660 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66  The coalesce() f
19670 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19680 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
19690 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
196a0 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
196b0 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74   if all argument
196c0 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f  s are NULL.  ^Co
196d0 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68 61  alesce() must ha
196e0 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32  ve at least .  2
196f0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
19700 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59  uncdef {glob(X,Y
19710 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67  )} {} {.  ^The g
19720 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
19730 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
19740 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73  to the.  express
19750 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58  ion "<b>Y GLOB X
19760 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68  </b>"..  Note th
19770 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61  at the X and Y a
19780 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76  rguments are rev
19790 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f  ersed in the glo
197a0 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  b() function.  r
197b0 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
197c0 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72  nfix [GLOB] oper
197d0 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20  ator..  ^If the 
197e0 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
197f0 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
19800 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f  rface is used to
19810 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  .  override the 
19820 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
19830 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72  on with an alter
19840 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
19850 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65  ation then.  the
19860 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
19870 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65   will invoke the
19880 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70   alternative imp
19890 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a  lementation..}..
198a0 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28  funcdef {ifnull(
198b0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
198c0 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
198d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
198e0 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
198f0 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
19900 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
19910 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61  both arguments a
19920 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c  re NULL.  ^Ifnul
19930 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78  l() must have ex
19940 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74  actly 2 argument
19950 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c  s..  ^The ifnull
19960 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  () function is e
19970 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f  quivalent to [co
19980 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74  alesce()] with t
19990 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a  wo arguments..}.
199a0 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28  .funcdef {instr(
199b0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
199c0 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e  e instr(X,Y) fun
199d0 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20  ction finds the 
199e0 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
199f0 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74   of string Y wit
19a00 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20  hin .  string X 
19a10 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
19a20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20  number of prior 
19a30 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20  characters plus 
19a40 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69  1, or 0 if.  Y i
19a50 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20  s nowhere found 
19a60 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c  within X..  ^Or,
19a70 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20   if X and Y are 
19a80 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e  both BLOBs, then
19a90 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75   instr(X,Y) retu
19aa0 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74  rns one.  more t
19ab0 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62  han the number b
19ac0 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68  ytes prior to th
19ad0 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
19ae0 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66  ce of Y, or 0 if
19af0 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63  .  Y does not oc
19b00 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74  cur anywhere wit
19b10 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74  hin X..  ^If bot
19b20 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e  h arguments X an
19b30 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59  d Y to instr(X,Y
19b40 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ) are non-NULL a
19b50 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73  nd are not BLOBs
19b60 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65  .  then both are
19b70 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
19b80 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65  strings..  ^If e
19b90 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65  ither X or Y are
19ba0 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58   NULL in instr(X
19bb0 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ,Y) then the res
19bc0 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a  ult is NULL..}..
19bd0 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d  funcdef {hex(X)}
19be0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
19bf0 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
19c00 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
19c10 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
19c20 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
19c30 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
19c40 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
19c50 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
19c60 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
19c70 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
19c80 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
19c90 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
19ca0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
19cb0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
19cc0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19cd0 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
19ce0 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
19cf0 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
19d00 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
19d10 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
19d20 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
19d30 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
19d40 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
19d50 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
19d60 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19d70 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
19d80 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
19d90 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
19da0 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
19db0 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
19dc0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
19dd0 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
19de0 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
19df0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19e00 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
19e10 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
19e20 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
19e30 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
19e40 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
19e50 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
19e60 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
19e70 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
19e80 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
19e90 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
19ea0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
19eb0 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
19ec0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
19ed0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
19ee0 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
19ef0 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
19f00 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
19f10 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
19f20 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
19f30 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
19f40 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
19f50 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
19f60 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
19f70 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
19f80 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
19f90 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
19fa0 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
19fb0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
19fc0 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
19fd0 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
19fe0 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
19ff0 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
1a000 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
1a010 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
1a020 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
1a030 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
1a040 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
1a050 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
1a060 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
1a070 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
1a080 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
1a090 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
1a0a0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
1a0b0 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
1a0c0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
1a0d0 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
1a0e0 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
1a0f0 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
1a100 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
1a110 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
1a120 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
1a130 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
1a140 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
1a150 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
1a160 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1a170 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
1a180 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
1a190 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
1a1a0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
1a1b0 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
1a1c0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
1a1d0 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
1a1e0 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
1a1f0 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
1a200 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
1a210 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
1a220 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
1a230 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
1a240 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
1a250 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
1a260 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
1a270 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
1a280 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
1a290 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
1a2a0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
1a2b0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
1a2c0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1a2d0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
1a2e0 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
1a2f0 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a   specified..}...
1a300 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68  funcdef {likelih
1a310 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ood(X,Y)} {} {. 
1a320 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
1a330 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1a340 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20  eturns argument 
1a350 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1a360 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20  (The value Y in 
1a370 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1a380 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1a390 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e  ng point constan
1a3a0 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20  t.  between 0.0 
1a3b0 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69  and 1.0, inclusi
1a3c0 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b  ve.)^.  ^The lik
1a3d0 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74  elihood(X) funct
1a3e0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1a3f0 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1a400 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1a410 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1a420 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1a430 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67  PU cycles during
1a440 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61   run-time.  (tha
1a450 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1a460 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1a470 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1a480 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
1a490 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
1a4a0 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1a4b0 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1a4c0 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1a4d0 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1a4e0 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1a4f0 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74  lean that is.  t
1a500 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61  rue with a proba
1a510 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78  bility of approx
1a520 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54  imately Y..  ^(T
1a530 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  he [unlikely(X)]
1a540 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1a550 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1a560 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29  lihood(X,0.0625)
1a570 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b  .)^.  ^(The [lik
1a580 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
1a590 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
1a5a0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
1a5b0 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.9375).)^.}..fu
1a5c0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29  ncdef {likely(X)
1a5d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
1a5e0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1a5f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1a600 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65  ument X unchange
1a610 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79  d..  ^The likely
1a620 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1a630 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1a640 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1a650 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1a660 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1a670 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1a680 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1a690 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1a6a0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1a6b0 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1a6c0 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1a6d0 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  the likely(X) fu
1a6e0 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1a6f0 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1a700 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1a710 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1a720 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1a730 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74  ean value.  that
1a740 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
1a750 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58  . ^(The likely(X
1a760 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
1a770 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c  uivalent.  to [l
1a780 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39  ikelihood](X,0.9
1a790 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f  375).)^ See also
1a7a0 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e  : [unlikely(X)].
1a7b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61  .}..funcdef {loa
1a7c0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c  d_extension(X) l
1a7d0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1a7e0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1a7f0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
1a800 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61  ,Y) function loa
1a810 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e  ds [SQLite exten
1a820 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68  sions] out of th
1a830 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61  e shared.  libra
1a840 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20  ry file named X 
1a850 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20  using the entry 
1a860 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72  point Y.  ^The r
1a870 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78  esult of load_ex
1a880 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61  tension().  is a
1a890 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e  lways a NULL.  ^
1a8a0 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20  If Y is omitted 
1a8b0 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
1a8c0 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d   entry point nam
1a8d0 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68  e is used..  ^Th
1a8e0 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1a8f0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  () function rais
1a900 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es an exception 
1a910 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1a920 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64   fails to.  load
1a930 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
1a940 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
1a950 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1a960 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  ion() function w
1a970 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
1a980 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
1a990 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20  ts to .  modify 
1a9a0 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c  or delete an SQL
1a9b0 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c   function or col
1a9c0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
1a9d0 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69    ^The.  extensi
1a9e0 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66  on can add new f
1a9f0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1aa00 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1aa10 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f   but cannot.  mo
1aa20 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65  dify or delete e
1aa30 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
1aa40 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1aa50 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65  equences because
1aa60 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f  .  those functio
1aa70 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74  ns and/or collat
1aa80 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69  ing sequences mi
1aa90 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65  ght be used else
1aaa0 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63  where.  in the c
1aab0 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
1aac0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
1aad0 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65   To load an exte
1aae0 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61  nsion that.  cha
1aaf0 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  nges or deletes 
1ab00 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1ab10 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1ab20 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c  , use the.  [sql
1ab30 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
1ab40 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ion()] C-languag
1ab50 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e API.</p>..  <p
1ab60 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65  >For security re
1ab70 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e  asons, extension
1ab80 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65   loaded is turne
1ab90 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74  d off by default
1aba0 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65   and must.  be e
1abb0 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f  nabled by a prio
1abc0 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74  r call to [sqlit
1abd0 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
1abe0 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e  xtension()].</p>
1abf0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
1ac00 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1ac10 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
1ac20 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1ac30 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
1ac40 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
1ac50 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
1ac60 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
1ac70 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
1ac80 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
1ac90 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
1aca0 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
1acb0 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
1acc0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
1acd0 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
1ace0 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
1acf0 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
1ad00 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
1ad10 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
1ad20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
1ad30 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
1ad40 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1ad50 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1ad60 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1ad70 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1ad80 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1ad90 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1ada0 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
1adb0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1adc0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1add0 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
1ade0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1adf0 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
1ae00 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1ae10 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
1ae20 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
1ae30 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
1ae40 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1ae50 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1ae60 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1ae70 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1ae80 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
1ae90 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
1aea0 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
1aeb0 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
1aec0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
1aed0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1aee0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
1aef0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1af00 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1af10 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1af20 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1af30 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1af40 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1af50 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1af60 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1af70 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1af80 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1af90 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1afa0 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
1afb0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1afc0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1afd0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1afe0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1aff0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1b000 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
1b010 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1b020 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1b030 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1b040 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1b050 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
1b060 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
1b070 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1b080 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
1b090 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1b0a0 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1b0b0 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d  f {min(X,Y,...)}
1b0c0 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a   {*minCoreFunc *
1b0d0 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66  min {min() SQL f
1b0e0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1b0f0 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1b100 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
1b110 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1b120 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20  ument with the. 
1b130 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a   minimum value..
1b140 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1b150 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
1b160 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
1b170 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1b180 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
1b190 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
1b1a0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
1b1b0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1b1c0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1b1d0 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
1b1e0 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
1b1f0 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
1b200 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
1b210 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
1b220 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61  min().  define a
1b230 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1b240 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
1b250 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
1b260 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
1b270 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c  .  ^(Note that <
1b280 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
1b290 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1b2a0 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
1b2b0 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
1b2c0 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
1b2d0 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67  as an .  [minAgg
1b2e0 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1b2f0 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1b300 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
1b310 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1b320 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
1b330 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
1b340 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
1b350 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b360 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1b370 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
1b380 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
1b390 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
1b3a0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1b3b0 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
1b3c0 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1b3d0 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
1b3e0 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
1b3f0 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
1b400 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
1b410 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1b420 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
1b430 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
1b440 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
1b450 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1b460 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
1b470 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
1b480 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
1b490 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
1b4a0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1b4b0 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
1b4c0 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
1b4d0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72  ..}..funcdef {pr
1b4e0 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1b4f0 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70  } {} {.  ^(The p
1b500 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e  rintf(FORMAT,...
1b510 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  ) SQL function w
1b520 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73  orks like the [s
1b530 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
1b540 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66  ] C-language.  f
1b550 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20  unction and the 
1b560 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
1b570 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  n from the stand
1b580 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e  ard C library.)^
1b590 0a 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67  .  The first arg
1b5a0 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61  ument is a forma
1b5b0 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70  t string that sp
1b5c0 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63  ecifies how to c
1b5d0 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74  onstruct the out
1b5e0 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69  put.  string usi
1b5f0 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20  ng values taken 
1b600 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20  from subsequent 
1b610 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20  arguments.  ^If 
1b620 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d  the FORMAT argum
1b630 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67  ent is.  missing
1b640 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   or NULL then th
1b650 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
1b660 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61  .  ^The %n forma
1b670 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67  t is silently ig
1b680 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73  nored and.  does
1b690 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20   not consume an 
1b6a0 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20  argument.  ^The 
1b6b0 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20  %p format is an 
1b6c0 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e  alias for %X.  ^
1b6d0 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20  The %z format.  
1b6e0 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  is interchangeab
1b6f0 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49  le with %s.  ^(I
1b700 66 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20  f there are too 
1b710 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e  few arguments in
1b720 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69   the argument li
1b730 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72  st,.  missing ar
1b740 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75  guments are assu
1b750 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55  med to have a NU
1b760 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  LL value, which 
1b770 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e  is translated in
1b780 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f  to.  0 or 0.0 fo
1b790 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74  r numeric format
1b7a0 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74  s or an empty st
1b7b0 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d  ring for %s.)^.}
1b7c0 0a 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75  .  ..funcdef {qu
1b7d0 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ote(X)} {} {.  ^
1b7e0 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e  The quote(X) fun
1b7f0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1b800 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c  e text of an SQL
1b810 20 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20   literal which. 
1b820 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
1b830 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75   its argument su
1b840 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75  itable for inclu
1b850 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c  sion into an SQL
1b860 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53   statement..  ^S
1b870 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f  trings are surro
1b880 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d  unded by single-
1b890 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61  quotes with esca
1b8a0 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20  pes on interior 
1b8b0 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64  quotes.  as need
1b8c0 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20  ed.  ^BLOBs are 
1b8d0 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
1b8e0 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
1b8f0 0a 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68  .  ^Strings with
1b900 20 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68   embedded NUL ch
1b910 61 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20  aracters cannot 
1b920 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61  be represented a
1b930 73 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72  s string.  liter
1b940 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68  als in SQL and h
1b950 65 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e 65  ence the returne
1b960 64 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  d string literal
1b970 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 70 72   is truncated pr
1b980 69 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72  ior.  to the fir
1b990 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64  st NUL..}..funcd
1b9a0 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d  ef {random()} {}
1b9b0 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
1b9c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1b9d0 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  rns a pseudo-ran
1b9e0 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65  dom integer.  be
1b9f0 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33  tween -922337203
1ba00 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b  6854775808 and +
1ba10 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1ba20 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  807..}..funcdef 
1ba30 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20  {randomblob(N)} 
1ba40 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
1ba50 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  omblob(N) functi
1ba60 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62  on return an N-b
1ba70 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e  yte blob contain
1ba80 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  ing pseudo-rando
1ba90 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e  m.  bytes. ^If N
1baa0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20   is less than 1 
1bab0 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61  then a 1-byte ra
1bac0 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74  ndom blob is ret
1bad0 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e  urned...  <p>Hin
1bae0 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  t:  applications
1baf0 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c   can generate gl
1bb00 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64  obally unique id
1bb10 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e  entifiers.  usin
1bb20 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  g this function 
1bb30 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68  together with [h
1bb40 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b  ex()] and/or.  [
1bb50 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68  lower()] like th
1bb60 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63  is:</p>..  <bloc
1bb70 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61  kquote>.  hex(ra
1bb80 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72  ndomblob(16))<br
1bb90 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68  ></br>.  lower(h
1bba0 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
1bbb0 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f  ))).  </blockquo
1bbc0 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  te>.}..funcdef {
1bbd0 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20  replace(X,Y,Z)} 
1bbe0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c  {} {.  ^The repl
1bbf0 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  ace(X,Y,Z) funct
1bc00 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1bc10 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73  ring formed by s
1bc20 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74  ubstituting.  st
1bc30 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79  ring Z for every
1bc40 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73   occurrence of s
1bc50 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e  tring Y in strin
1bc60 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41  g X.  ^The [BINA
1bc70 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  RY].  collating 
1bc80 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
1bc90 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73   for comparisons
1bca0 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65  .  ^If Y is an e
1bcb0 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68  mpty.  string th
1bcc0 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68  en return X unch
1bcd0 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73  anged.  ^If Z is
1bce0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20   not initially. 
1bcf0 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73   a string, it is
1bd00 20 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38   cast to a UTF-8
1bd10 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f   string prior to
1bd20 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a   processing..}..
1bd30 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58  funcdef {round(X
1bd40 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d  ) round(X,Y)} {}
1bd50 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28   {.  ^The round(
1bd60 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1bd70 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
1bd80 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58  -point.  value X
1bd90 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69   rounded to Y di
1bda0 67 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68  gits to the righ
1bdb0 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  t of the decimal
1bdc0 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68   point..  ^If th
1bdd0 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1bde0 6f 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20 61  omitted, it is a
1bdf0 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a  ssumed to be 0..
1be00 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
1be10 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
1be20 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
1be30 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
1be40 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1be50 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
1be60 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
1be70 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
1be80 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
1be90 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
1bea0 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
1beb0 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
1bec0 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
1bed0 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
1bee0 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
1bef0 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
1bf00 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
1bf10 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
1bf20 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
1bf30 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1bf40 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
1bf50 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
1bf60 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
1bf70 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
1bf80 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
1bf90 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
1bfa0 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
1bfb0 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
1bfc0 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
1bfd0 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
1bfe0 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
1bff0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
1c000 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
1c010 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
1c020 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
1c030 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
1c040 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
1c050 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
1c060 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
1c070 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
1c080 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
1c090 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29  ileoption_get(N)
1c0a0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1c0b0 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1c0c0 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e  on_get() SQL fun
1c0d0 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1c0e0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1c0f0 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
1c100 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f  option_get()] C/
1c110 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  C++ function..  
1c120 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  ^This routine re
1c130 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63  turns the N-th c
1c140 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1c150 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  on used to build
1c160 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c   SQLite.  or NUL
1c170 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66  L if N is out of
1c180 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73   range.  See als
1c190 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  o the [compile_o
1c1a0 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
1c1b0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1c1c0 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1c1d0 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20  _used(X)} {} {. 
1c1e0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
1c1f0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1c200 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1c210 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1c220 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
1c230 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1c240 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75  used()] C/C++ fu
1c250 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20  nction..  ^When 
1c260 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74  the argument X t
1c270 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  o sqlite_compile
1c280 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69  option_used(X) i
1c290 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
1c2a0 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  .  is the name o
1c2b0 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
1c2c0 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f   option, this ro
1c2d0 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72  utine returns tr
1c2e0 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73  ue (1) or.  fals
1c2f0 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20  e (0) depending 
1c300 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
1c310 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61  t that option wa
1c320 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68  s used during th
1c330 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75  e.  build..}..fu
1c340 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
1c350 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
1c360 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
1c370 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
1c380 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1c390 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
1c3a0 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
1c3b0 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
1c3c0 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
1c3d0 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
1c3e0 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
1c3f0 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
1c400 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
1c410 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
1c420 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65 20  e_id() is.  the 
1c430 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
1c440 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
1c450 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
1c460 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20  n followed by.  
1c470 74 68 65 20 53 48 41 31 20 68 61 73 68 20 66 6f  the SHA1 hash fo
1c480 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e  r that check-in.
1c490 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
1c4a0 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
1c4b0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1c4c0 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
1c4d0 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
1c4e0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1c4f0 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
1c500 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1c510 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
1c520 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1c530 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
1c540 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
1c550 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
1c560 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
1c570 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
1c580 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
1c590 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1c5a0 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
1c5b0 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
1c5c0 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
1c5d0 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
1c5e0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1c5f0 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
1c600 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c610 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
1c620 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
1c630 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
1c640 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
1c650 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
1c660 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
1c670 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
1c680 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
1c690 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1c6a0 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
1c6b0 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
1c6c0 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1c6d0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1c6e0 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
1c6f0 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
1c700 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
1c710 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
1c720 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
1c730 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
1c740 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
1c750 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
1c760 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
1c770 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
1c780 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
1c790 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
1c7a0 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
1c7b0 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
1c7c0 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
1c7d0 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
1c7e0 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
1c7f0 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
1c800 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
1c810 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1c820 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
1c830 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
1c840 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
1c850 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
1c860 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
1c870 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
1c880 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
1c890 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
1c8a0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1c8b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1c8c0 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
1c8d0 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
1c8e0 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1c8f0 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
1c900 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
1c910 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1c920 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
1c930 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
1c940 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1c950 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1c960 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
1c970 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
1c980 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1c990 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
1c9a0 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
1c9b0 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
1c9c0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1c9d0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1c9e0 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1c9f0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1ca00 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1ca10 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
1ca20 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
1ca30 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1ca40 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1ca50 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1ca60 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
1ca70 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
1ca80 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
1ca90 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
1caa0 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
1cab0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1cac0 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
1cad0 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
1cae0 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
1caf0 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
1cb00 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
1cb10 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
1cb20 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
1cb30 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
1cb40 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
1cb50 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1cb60 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1cb70 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1cb80 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
1cb90 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1cba0 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1cbb0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1cbc0 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1cbd0 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1cbe0 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1cbf0 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
1cc00 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
1cc10 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
1cc20 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
1cc30 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
1cc40 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
1cc50 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1cc60 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1cc70 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1cc80 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1cc90 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1cca0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
1ccb0 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
1ccc0 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
1ccd0 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1cce0 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1ccf0 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1cd00 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
1cd10 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
1cd20 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
1cd30 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
1cd40 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1cd50 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
1cd60 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
1cd70 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1cd80 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
1cd90 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1cda0 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1cdb0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1cdc0 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1cdd0 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1cde0 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1cdf0 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1ce00 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1ce10 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1ce20 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1ce30 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1ce40 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1ce50 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1ce60 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1ce70 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1ce80 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1ce90 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1cea0 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1ceb0 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1cec0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1ced0 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1cee0 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1cef0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1cf00 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1cf10 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1cf20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1cf30 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1cf40 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1cf50 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1cf60 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1cf70 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1cf80 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1cf90 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1cfa0 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1cfb0 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1cfc0 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1cfd0 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1cfe0 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1cff0 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1d000 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1d010 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1d020 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1d030 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
1d040 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
1d050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d090 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1d0a0 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
1d0b0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
1d0c0 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 20  func {*datefunc 
1d0d0 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66  {date and time f
1d0e0 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65  unctions}}.hd_ke
1d0f0 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53  ywords {date() S
1d100 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69  QL function} {ti
1d110 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1d120 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
1d130 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66  datetime() SQL f
1d140 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e  unction} {julian
1d150 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69  day() SQL functi
1d160 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
1d170 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20  {strftime() SQL 
1d180 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e  function}.</tcl>
1d190 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70  ..<p>.SQLite sup
1d1a0 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20  ports five date 
1d1b0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1d1c0 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c  ns as follows:.<
1d1d0 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c  /p>..<p>.<ol>.<l
1d1e0 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62  i> ^(<b>date(</b
1d1f0 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1d200 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1d210 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1d220 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1d230 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c   ^(<b>time(</b><
1d240 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
1d250 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
1d260 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
1d270 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e  >)^ </li>.<li> ^
1d280 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62  (<b>datetime(</b
1d290 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1d2a0 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1d2b0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1d2c0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1d2d0 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28   ^(<b>julianday(
1d2e0 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
1d2f0 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1d300 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1d310 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1d320 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d  li> ^(<b>strftim
1d330 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c  e(</b><i>format,
1d340 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64   timestring, mod
1d350 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1d360 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1d370 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  )^ </li>.</ol>..
1d380 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61  <p>.^All five da
1d390 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1d3a0 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d  tions take a tim
1d3b0 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  e string as an a
1d3c0 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74  rgument. .^The t
1d3d0 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f  ime string is fo
1d3e0 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
1d3f0 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
1d400 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65  . .^The strftime
1d410 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
1d420 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
1d430 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
1d440 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
1d450 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
1d460 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1d470 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74  ons use a subset
1d480 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   of.[http://en.w
1d490 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1d4a0 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30  i/ISO_8601 | IS0
1d4b0 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20  -8601] date and 
1d4c0 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54  time.formats..^T
1d4d0 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69  he date() functi
1d4e0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  on returns the d
1d4f0 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d  ate in this form
1d500 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20  at: YYYY-MM-DD. 
1d510 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e  .^The time() fun
1d520 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1d530 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a  e time as HH:MM:
1d540 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69  SS. .^The dateti
1d550 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1d560 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44  turns "YYYY-MM-D
1d570 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28  D HH:MM:SS". .^(
1d580 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20  The julianday() 
1d590 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1d5a0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1d5b0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1d5c0 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
1d5d0 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74   Julian day] - t
1d5e0 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he.number of day
1d5f0 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20  s since noon in 
1d600 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76  Greenwich on Nov
1d610 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42  ember 24, 4714 B
1d620 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e  .C. .([http://en
1d630 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1d640 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72  iki/Proleptic_Gr
1d650 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
1d660 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65   | Proleptic Gre
1d670 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1d680 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69  ).)^.^The strfti
1d690 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  me() routine ret
1d6a0 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f  urns the date fo
1d6b0 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e  rmatted accordin
1d6c0 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74  g to .the format
1d6d0 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65   string specifie
1d6e0 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  d as the first a
1d6f0 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f  rgument..^The fo
1d700 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70  rmat string supp
1d710 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  orts the most co
1d720 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f  mmon substitutio
1d730 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  ns found in the 
1d740 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f  .[http://opengro
1d750 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62  up.org/onlinepub
1d760 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f  s/007908799/xsh/
1d770 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20  strftime.html | 
1d780 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1d790 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74  ion].from the st
1d7a0 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
1d7b0 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
1d7c0 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
1d7d0 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f  and %J..^(The fo
1d7e0 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d  llowing is a com
1d7f0 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61  plete list of va
1d800 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73  lid strftime() s
1d810 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f  ubstitutions:.</
1d820 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1d830 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1d840 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1d850 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1d860 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20  0">.<tr><td><td 
1d870 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c  width="10"><td><
1d880 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25  /tr>..<tr><td> %
1d890 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  d <td><td> day o
1d8a0 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e  f month: 00.<tr>
1d8b0 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e  <td> %f <td><td>
1d8c0 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
1d8d0 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e  nds: SS.SSS.<tr>
1d8e0 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e  <td> %H <td><td>
1d8f0 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74   hour: 00-24 .<t
1d900 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74  r><td> %j <td><t
1d910 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20  d> day of year: 
1d920 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e  001-366.<tr><td>
1d930 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c   %J <td><td> Jul
1d940 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c  ian day number.<
1d950 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c  tr><td> %m <td><
1d960 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32  td> month: 01-12
1d970 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64  .<tr><td> %M <td
1d980 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30  ><td> minute: 00
1d990 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20  -59.<tr><td> %s 
1d9a0 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
1d9b0 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30   since 1970-01-0
1d9c0 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74  1.<tr><td> %S <t
1d9d0 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20  d><td> seconds: 
1d9e0 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
1d9f0 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  w <td><td> day o
1da00 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20  f week 0-6 with 
1da10 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74  Sunday==0.<tr><t
1da20 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77  d> %W <td><td> w
1da30 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d  eek of year: 00-
1da40 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c  53.<tr><td> %Y <
1da50 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30  td><td> year: 00
1da60 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e  00-9999.<tr><td>
1da70 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c   %% <td><td> %.<
1da80 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
1da90 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e  uote>)^..<p>.^(N
1daa0 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f  otice that all o
1dab0 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69  ther date and ti
1dac0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  me functions can
1dad0 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e   be expressed.in
1dae0 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69   terms of strfti
1daf0 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  me():.</p>..<blo
1db00 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1db10 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1db20 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1db30 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1db40 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c  <td><b>Function<
1db50 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30  /b><td width="30
1db60 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c  "><td><b>Equival
1db70 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f  ent strftime()</
1db80 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  b>.<tr><td>   da
1db90 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  te(...)      <td
1dba0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1dbb0 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29  '%Y-%m-%d', ...)
1dbc0 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65  .<tr><td>   time
1dbd0 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c  (...)      <td><
1dbe0 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
1dbf0 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
1dc00 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69  tr><td>   dateti
1dc10 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64  me(...)  <td><td
1dc20 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
1dc30 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c  %m-%d %H:%M:%S',
1dc40 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
1dc50 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20   julianday(...) 
1dc60 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
1dc70 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f  me('%J', ...).</
1dc80 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
1dc90 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20  ote>)^..<p>.The 
1dca0 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72  only reasons for
1dcb0 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74   providing funct
1dcc0 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20  ions other than 
1dcd0 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f  strftime() is.fo
1dce0 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e  r convenience an
1dcf0 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79  d for efficiency
1dd00 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65  ..</p>..<h3>Time
1dd10 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c   Strings</h3>..<
1dd20 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e  p>^(A time strin
1dd30 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20  g can be in any 
1dd40 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1dd50 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c   formats:</p>..<
1dd60 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  ol>.<li> <i>YYYY
1dd70 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20  -MM-DD</i>.<li> 
1dd80 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
1dd90 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1dda0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1ddb0 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
1ddc0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1ddd0 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
1dde0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1ddf0 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
1de00 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
1de10 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
1de20 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
1de30 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1de40 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1de50 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  /b><i>HH:MM:SS.S
1de60 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1de70 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1de80 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1de90 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  i> <i>HH:MM:SS.S
1dea0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e  SS</i>.<li> <b>n
1deb0 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44  ow</b>.<li> <i>D
1dec0 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f  DDDDDDDDD</i>.</
1ded0 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66  ol>)^..<p>.^In f
1dee0 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68  ormats 5 through
1def0 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61   7, the "T" is a
1df00 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74   literal charact
1df10 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74  er separating .t
1df20 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20  he date and the 
1df30 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65  time, as require
1df40 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77  d by .[http://ww
1df50 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54  w.w3c.org/TR/NOT
1df60 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f  E-datetime | ISO
1df70 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74  -8601]. .^Format
1df80 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74  s 8 through 10 t
1df90 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79  hat specify only
1dfa0 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61   a time assume a
1dfb0 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30   date of .2000-0
1dfc0 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c  1-01. Format 11,
1dfd0 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77   the string 'now
1dfe0 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  ', is converted 
1dff0 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e  into the .curren
1e000 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  t date and time 
1e010 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  as obtained from
1e020 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d   the xCurrentTim
1e030 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20  e method.of the 
1e040 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62  [sqlite3_vfs] ob
1e050 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68  ject in use..^Th
1e060 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74  e 'now' argument
1e070 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69 6d   to date and tim
1e080 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61  e functions alwa
1e090 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74  ys returns exact
1e0a0 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75  ly the.same valu
1e0b0 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69  e for multiple i
1e0c0 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 69  nvocations withi
1e0d0 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c 69  n the same [sqli
1e0e0 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c  te3_step()] call
1e0f0 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ..^[http://en.wi
1e100 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1e110 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69  /Coordinated_Uni
1e120 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e  versal_Time | Un
1e130 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
1e140 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20  ted Time (UTC)] 
1e150 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61  is used. .^Forma
1e160 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74  t 12 is the .[ht
1e170 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1e180 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
1e190 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
1e1a0 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65  ay number].expre
1e1b0 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
1e1c0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1e1d0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74  </p>..<p>.Format
1e1e0 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20 6d  s 2 through 10 m
1e1f0 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
1e200 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 74   followed by a t
1e210 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f  imezone indicato
1e220 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c  r of the form."<
1e230 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48  i>&#91;+-&#93;HH
1e240 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74  :MM</i>" or just
1e250 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68   "<i>Z</i>".  Th
1e260 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1e270 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55 54  functions use UT
1e280 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65  C or "zulu".time
1e290 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64   internally, and
1e2a0 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66 66   so the "Z" suff
1e2b0 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  ix is a no-op.  
1e2c0 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48  Any non-zero "HH
1e2d0 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a 73  :MM" suffix is.s
1e2e0 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74  ubtracted from t
1e2f0 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61 74  he indicated dat
1e300 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72  e and time in or
1e310 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a  der to compute z
1e320 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78  ulu time..For ex
1e330 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68  ample, all of th
1e340 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65  e following time
1e350 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71 75   strings are equ
1e360 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c  ivalent:.</p>..<
1e370 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33  blockquote>.2013
1e380 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e  -10-07 08:23:19.
1e390 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d  120<br>.2013-10-
1e3a0 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a  07T08:23:19.120Z
1e3b0 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20  <br>.2013-10-07 
1e3c0 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a  04:23:19.120-04:
1e3d0 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e 38  00<br>.2456572.8
1e3e0 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71  4952685.</blockq
1e3f0 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20  uote>..<p>.^(In 
1e400 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e  formats 4, 7, an
1e410 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69  d 10, the fracti
1e420 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c  onal seconds val
1e430 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61  ue SS.SSS can ha
1e440 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64  ve.one or more d
1e450 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  igits following 
1e460 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
1e470 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65  t.  Exactly thre
1e480 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f  e digits are.sho
1e490 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c  wn in the exampl
1e4a0 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20  es because only 
1e4b0 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20  the first three 
1e4c0 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69  digits are signi
1e4d0 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65  ficant.to the re
1e4e0 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e  sult, but the in
1e4f0 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68  put string can h
1e500 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72  ave fewer or mor
1e510 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67  e than three dig
1e520 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65  its.and the date
1e530 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20  /time functions 
1e540 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61  will still opera
1e550 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a  te correctly.)^.
1e560 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61  Similarly, forma
1e570 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69  t 12 is shown wi
1e580 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e  th 10 significan
1e590 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68  t digits, but th
1e5a0 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63  e date/time.func
1e5b0 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c  tions will reall
1e5c0 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79  y accept as many
1e5d0 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74   or as few digit
1e5e0 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61  s as are necessa
1e5f0 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20  ry to.represent 
1e600 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  the Julian day n
1e610 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  umber..</p>..<h3
1e620 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a  >Modifiers</h3>.
1e630 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74  .<p>^The time st
1e640 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c  ring can be foll
1e650 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
1e660 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74  more modifiers t
1e670 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20  hat .alter date 
1e680 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61  and/or time. ^Ea
1e690 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
1e6a0 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
1e6b0 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
1e6c0 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
1e6d0 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
1e6e0 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
1e6f0 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
1e700 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
1e710 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
1e720 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
1e730 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
1e740 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
1e750 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
1e760 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
1e770 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
1e780 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
1e790 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
1e7a0 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
1e7b0 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
1e7c0 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
1e7d0 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
1e7e0 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
1e7f0 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
1e800 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
1e810 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
1e820 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
1e830 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
1e840 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
1e850 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
1e860 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
1e870 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
1e880 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
1e890 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
1e8a0 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
1e8b0 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
1e8c0 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68 65   modifiers..^The
1e8d0 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20 61   's' character a
1e8e0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
1e8f0 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 20   modifier names 
1e900 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f  is optional..^No
1e910 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e  te that "&plusmn
1e920 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72  ;NNN months" wor
1e930 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20  ks by rendering 
1e940 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1e950 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d  e into.the YYYY-
1e960 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64  MM-DD format, ad
1e970 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e  ding the &plusmn
1e980 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d  ;NNN to the MM m
1e990 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e  onth value, then
1e9a0 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65  .normalizing the
1e9b0 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c   result.  ^Thus,
1e9c0 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   for example, th
1e9d0 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33  e data 2001-03-3
1e9e0 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b  1 modified.by '+
1e9f0 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c  1 month' initial
1ea00 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30  ly yields 2001-0
1ea10 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20  4-31, but April 
1ea20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73  only has 30 days
1ea30 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20  .so the date is 
1ea40 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30  normalized to 20
1ea50 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69  01-05-01.  ^A si
1ea60 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63  milar effect occ
1ea70 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69  urs when.the ori
1ea80 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65  ginal date is Fe
1ea90 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c  bruary 29 of a l
1eaa0 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20  eapyear and the 
1eab0 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75  modifier is.&plu
1eac0 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72  smn;N years wher
1ead0 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c  e N is not a mul
1eae0 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f  tiple of four.</
1eaf0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61  p>..<p>^The "sta
1eb00 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73  rt of" modifiers
1eb10 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73   (7 through 9) s
1eb20 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61  hift the date ba
1eb30 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20  ckwards .to the 
1eb40 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
1eb50 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20   current month, 
1eb60 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e  year or day.</p>
1eb70 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64  ..<p>^The "weekd
1eb80 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
1eb90 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
1eba0 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
1ebb0 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
1ebc0 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
1ebd0 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
1ebe0 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
1ebf0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
1ec00 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e  /p>..<p>^The "un
1ec10 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1ec20 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b  r (11) only work
1ec30 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74  s if it immediat
1ec40 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74  ely follows .a t
1ec50 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65  imestring in the
1ec60 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d   DDDDDDDDDD form
1ec70 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66  at. .^This modif
1ec80 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44  ier causes the D
1ec90 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20  DDDDDDDDD to be 
1eca0 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20  interpreted not 
1ecb0 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  .as a Julian day
1ecc0 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f   number as it no
1ecd0 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c  rmally would be,
1ece0 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f   but as.[http://
1ecf0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1ed00 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20  /wiki/Unix_time 
1ed10 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74  | Unix Time] - t
1ed20 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65  he .number of se
1ed30 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
1ed40 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65  .  If the "unixe
1ed50 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64  poch" modifier d
1ed60 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61  oes not.follow a
1ed70 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74   timestring of t
1ed80 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44  he form DDDDDDDD
1ed90 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73  DD which express
1eda0 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
1edb0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1edc0 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20  970 or if other 
1edd0 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61  modifiers.separa
1ede0 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  te the "unixepoc
1edf0 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d  h" modifier from
1ee00 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44   prior DDDDDDDDD
1ee10 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76  D then the.behav
1ee20 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
1ee30 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69  ..Due to precisi
1ee40 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69  on limitations i
1ee50 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d  mposed by the im
1ee60 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73  plementations us
1ee70 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65  e.of 64-bit inte
1ee80 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65  gers, the "unixe
1ee90 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f  poch" modifier o
1eea0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61  nly works for.da
1eeb0 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1eec0 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20  -01-01 00:00:00 
1eed0 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31  and 5352-11-01 1
1eee0 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69  0:52:47 (unix ti
1eef0 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39  mes.of -62167219
1ef00 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37  200 through 1067
1ef10 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c  5199167).</p>..<
1ef20 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
1ef30 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c  localtime {local
1ef40 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 3c 2f  time modifier}</
1ef50 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f  tcl>.<p>^The "lo
1ef60 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65  caltime" modifie
1ef70 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20 74  r (12) assumes t
1ef80 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74  he time string t
1ef90 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e  o its left is in
1efa0 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64  .Universal Coord
1efb0 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43  inated Time (UTC
1efc0 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  ) and adjusts th
1efd0 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f  e time.string so
1efe0 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61 79   that it display
1eff0 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66  s localtime.  If
1f000 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c   "localtime".fol
1f010 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61 74  lows a time that
1f020 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65   is not UTC, the
1f030 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
1f040 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54  s undefined..^(T
1f050 68 65 20 22 75 74 63 22 20 69 73 20 74 68 65 20  he "utc" is the 
1f060 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63  opposite of "loc
1f070 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20  altime".  "utc" 
1f080 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65  assumes that the
1f090 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c   string.to its l
1f0a0 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f  eft is in the lo
1f0b0 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64  cal timezone and
1f0c0 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74   adjusts that st
1f0d0 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54  ring to be in UT
1f0e0 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f  C.)^.If the prio
1f0f0 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20  r string is not 
1f100 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68  in localtime, th
1f110 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
1f120 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69   "utc" is.undefi
1f130 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78  ned.</p>..<h3>Ex
1f140 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c  amples</h3>..^(<
1f150 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
1f160 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a  rrent date.<p>..
1f170 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
1f180 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c  CT date('now');<
1f190 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f1a0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1f1b0 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68 65   last day of the
1f1c0 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c   current month.<
1f1d0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1f1e0 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f  >SELECT date('no
1f1f0 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e  w','start of mon
1f200 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27  th','+1 month','
1f210 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63  -1 day');.</bloc
1f220 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1f230 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1f240 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
1f250 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
1f260 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e   1092941466.</p>
1f270 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1f280 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69     SELECT dateti
1f290 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27  me(1092941466, '
1f2a0 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62  unixepoch');.</b
1f2b0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1f2c0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
1f2d0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
1f2e0 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
1f2f0 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20  amp 1092941466, 
1f300 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20  and .compensate 
1f310 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74  for your local t
1f320 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62  imezone.</p>..<b
1f330 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1f340 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
1f350 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
1f360 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65  och', 'localtime
1f370 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1f380 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1f390 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e  e the current un
1f3a0 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70  ix timestamp.</p
1f3b0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f3c0 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d    SELECT strftim
1f3d0 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c  e('%s','now');.<
1f3e0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f3f0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1f400 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20   number of days 
1f410 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e  since the signin
1f420 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c  g of the US Decl
1f430 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70  aration.of Indep
1f440 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62  endence.</p>..<b
1f450 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1f460 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e  ECT julianday('n
1f470 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79  ow') - julianday
1f480 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a  ('1776-07-04');.
1f490 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f4a0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1f4b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
1f4c0 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74  nds since a part
1f4d0 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e  icular moment in
1f4e0 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f   2004:</p>..<blo
1f4f0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1f500 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
1f510 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d  'now') - strftim
1f520 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d  e('%s','2004-01-
1f530 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c  01 02:34:56');.<
1f540 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f550 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68  ^(<p>.Compute th
1f560 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66 69  e date of the fi
1f570 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f  rst Tuesday in O
1f580 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63  ctober.for the c
1f590 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70  urrent year..</p
1f5a0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f5b0 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e    SELECT date('n
1f5c0 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65  ow','start of ye
1f5d0 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c  ar','+9 months',
1f5e0 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f  'weekday 2');.</
1f5f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1f600 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1f610 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75  time since the u
1f620 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63  nix epoch in sec
1f630 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66  onds .(like strf
1f640 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1f650 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73   except includes
1f660 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
1f670 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ):</p>..<blockqu
1f680 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a  ote>.  SELECT (j
1f690 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
1f6a0 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34  - 2440587.5)*864
1f6b0 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  00.0;.</blockquo
1f6c0 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61  te>)^..<h3>Cavea
1f6d0 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e  ts And Bugs</h3>
1f6e0 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61  ..<p>The computa
1f6f0 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69  tion of local ti
1f700 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69  me depends heavi
1f710 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a  ly on the whim .
1f720 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61  of politicians a
1f730 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69  nd is thus diffi
1f740 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72  cult to get corr
1f750 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63  ect for .all loc
1f760 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69  ales. ^In this i
1f770 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
1f780 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
1f790 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20  brary .function 
1f7a0 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73  localtime_r() is
1f7b0 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74 20   used to assist 
1f7c0 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69  in the calculati
1f7d0 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d  on of .local tim
1f7e0 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c  e.  ^(The .local
1f7f0 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74  time_r() C funct
1f800 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c  ion normally onl
1f810 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72  y works for year
1f820 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61  s.between 1970 a
1f830 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74  nd 2037. For dat
1f840 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20  es outside this 
1f850 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61  range, SQLite .a
1f860 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74  ttempts to map t
1f870 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20  he year into an 
1f880 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20  equivalent year 
1f890 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e  within .this ran
1f8a0 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75  ge, do the calcu
1f8b0 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70  lation, then map
1f8c0 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29   the year back.)
1f8d0 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65  ^</p>...<p>^(The
1f8e0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c  se functions onl
1f8f0 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73  y work for dates
1f900 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31   between 0000-01
1f910 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64  -01 00:00:00.and
1f920 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35   9999-12-31 23:5
1f930 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61  9:59 (julidan da
1f940 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35  y numbers 172105
1f950 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37 33  9.5 through 5373
1f960 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61  484.5).)^.For da
1f970 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61 74  tes outside that
1f980 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75   range, the resu
1f990 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e  lts of these.fun
1f9a0 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66  ctions are undef
1f9b0 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f  ined.</p>..<p>No
1f9c0 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
1f9d0 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73  platforms only s
1f9e0 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f  upport one set o
1f9f0 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69  f DST rules. .Vi
1fa00 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  sta only support
1fa10 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65  s two. Therefore
1fa20 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66  , on these platf
1fa30 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61  orms, .historica
1fa40 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f  l DST calculatio
1fa50 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72  ns will be incor
1fa60 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70  rect. .For examp
1fa70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69  le, in the US, i
1fa80 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72  n 2007 the DST r
1fa90 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e  ules changed. .N
1faa0 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
1fab0 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79   platforms apply
1fac0 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53   the new 2007 DS
1fad0 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20  T rules .to all 
1fae0 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61  previous years a
1faf0 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f  s well. Vista do
1fb00 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74  es somewhat bett
1fb10 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c  er.getting resul
1fb20 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20  ts correct back 
1fb30 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68  to 1986, when th
1fb40 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73  e rules were als
1fb50 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a  o changed.</p>..
1fb60 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20  <p>All internal 
1fb70 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73  computations ass
1fb80 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f  ume the .[http:/
1fb90 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1fba0 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e  g/wiki/Gregorian
1fbb0 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67  _calendar | Greg
1fbc0 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a  orian calendar].
1fbd0 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61  system.  It is a
1fbe0 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74  lso assumed that
1fbf0 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78   every.day is ex
1fc00 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f  actly 86400 seco
1fc10 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e  nds in duration.
1fc20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1fc30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc70 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1fc80 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75  on {Aggregate Fu
1fc90 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63  nctions} aggfunc
1fca0 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63   {*aggfunc}.</tc
1fcb0 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72  l>..<p>.The aggr
1fcc0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1fcd0 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
1fce0 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1fcf0 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61  ault.  Additiona
1fd00 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  l.aggregate func
1fd10 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e  tions written in
1fd20 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20   C may be added 
1fd30 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69  using the .[sqli
1fd40 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
1fd50 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c  ion()]</a>.API.<
1fd60 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79  /p>..<p>.^In any
1fd70 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1fd80 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61  ion that takes a
1fd90 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
1fda0 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a  , that argument.
1fdb0 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
1fdc0 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44  by the keyword D
1fdd0 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75  ISTINCT.  ^In su
1fde0 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63  ch cases, duplic
1fdf0 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65  ate.elements are
1fe00 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65   filtered before
1fe10 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e   being passed in
1fe20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
1fe30 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20   function..^For 
1fe40 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e  example, the fun
1fe50 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73  ction "count(dis
1fe60 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72  tinct X)" will r
1fe70 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
1fe80 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c  .of distinct val
1fe90 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20  ues of column X 
1fea0 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74  instead of the t
1feb0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e  otal number of n
1fec0 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69  on-null.values i
1fed0 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e  n column X..</p>
1fee0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
1fef0 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
1ff00 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20  >.<tcl>.funcdef 
1ff10 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b  {avg(X)} {*avg {
1ff20 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20  avg() aggregate 
1ff30 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1ff40 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69  The avg() functi
1ff50 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
1ff60 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f   average value o
1ff70 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c  f all non-NULL <
1ff80 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61  i>X</i> within a
1ff90 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69  .  group.  ^Stri
1ffa0 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75  ng and BLOB valu
1ffb0 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c  es that do not l
1ffc0 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73  ook like numbers
1ffd0 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74   are.  interpret
1ffe0 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20  ed as 0..  ^The 
1fff0 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
20000 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61  is always a floa
20010 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
20020 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74   as long as.  at
20030 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61   there is at lea
20040 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20  st one non-NULL 
20050 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c  input even if al
20060 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69  l.  inputs are i
20070 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72  ntegers.  ^The r
20080 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
20090 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
200a0 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72  ly if.  there ar
200b0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
200c0 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64  puts.  .}..funcd
200d0 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75  ef {count(X) cou
200e0 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b  nt(*)} {*count {
200f0 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74  count() aggregat
20100 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
20110 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66   ^The count(X) f
20120 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a  unction returns.
20130 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65    a count of the
20140 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
20150 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e  .  that <i>X</i>
20160 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20   is not NULL in 
20170 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63  a group.  ^The c
20180 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e  ount(*) function
20190 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75  .  (with no argu
201a0 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74  ments) returns t
201b0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
201c0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  of rows in the g
201d0 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
201e0 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58   {group_concat(X
201f0 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58  ) group_concat(X
20200 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f  ,Y)} {.  *group_
20210 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f  concat {group_co
20220 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65  ncat() aggregate
20230 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
20240 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63   ^The group_conc
20250 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  at() function re
20260 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
20270 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f   which is the co
20280 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20  ncatenation of. 
20290 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
202a0 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  lues of <i>X</i>
202b0 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72  .  ^If parameter
202c0 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65   <i>Y</i> is pre
202d0 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69  sent then.  it i
202e0 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  s used as the se
202f0 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65  parator.  betwee
20300 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c  n instances of <
20310 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d  i>X</i>.  ^A com
20320 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64  ma (",") is used
20330 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f   as the separato
20340 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20  r.  if <i>Y</i> 
20350 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65  is omitted.  The
20360 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f   order of the co
20370 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65  ncatenated eleme
20380 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61  nts is.  arbitra
20390 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ry..}..funcdef {
203a0 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67  max(X)} {*maxAgg
203b0 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d  Func *agg_max {m
203c0 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66  ax() aggregate f
203d0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
203e0 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  he max() aggrega
203f0 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
20400 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  turns the maximu
20410 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  m value of all v
20420 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20430 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d  up..  ^The maxim
20440 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
20450 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64  value that would
20460 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73   be returned las
20470 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20  t in an.  ORDER 
20480 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63  BY on the same c
20490 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61  olumn.  ^Aggrega
204a0 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73  te max() returns
204b0 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20   NULL .  if and 
204c0 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72  only if there ar
204d0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  e no non-NULL va
204e0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
204f0 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  p..}..funcdef {m
20500 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46  in(X)} {*minAggF
20510 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69  unc *agg_min {mi
20520 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  n() aggregate fu
20530 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
20540 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74  e min() aggregat
20550 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
20560 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  urns the minimum
20570 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
20580 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
20590 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
205a0 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  he minimum value
205b0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f   is the first no
205c0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61  n-NULL value tha
205d0 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20  t would appear. 
205e0 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20   in an ORDER BY 
205f0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20  of the column.. 
20600 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28   ^Aggregate min(
20610 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69  ) returns NULL i
20620 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
20630 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
20640 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20  ULL.  values in 
20650 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
20660 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f  ncdef {sum(X) to
20670 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d  tal(X)} {.  *sum
20680 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c  Func *sum *total
20690 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67  .  {sum() aggreg
206a0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20  ate function}.  
206b0 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61  {total() aggrega
206c0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
206d0 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e  .  ^The sum() an
206e0 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67  d total() aggreg
206f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20  ate functions.  
20700 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c  return sum of al
20710 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
20720 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
20730 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20    ^If there are 
20740 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
20750 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28  t rows then sum(
20760 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c  ) returns.  NULL
20770 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74   but total() ret
20780 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c  urns 0.0..  NULL
20790 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79   is not normally
207a0 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c   a helpful resul
207b0 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66  t for the sum of
207c0 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74   no rows.  but t
207d0 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
207e0 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20  requires it and 
207f0 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c  most other.  SQL
20800 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
20810 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28  s implement sum(
20820 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51  ) that way so SQ
20830 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20  Lite does it in 
20840 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69  the.  same way i
20850 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f  n order to be co
20860 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20  mpatible.   The 
20870 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74  non-standard tot
20880 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  al() function.  
20890 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  is provided as a
208a0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20   convenient way 
208b0 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74  to work around t
208c0 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c  his design probl
208d0 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20  em.  in the SQL 
208e0 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20  language.</p>.. 
208f0 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20   <p>^The result 
20900 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c  of total() is al
20910 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
20920 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e  point value..  ^
20930 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75  The result of su
20940 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65  m() is an intege
20950 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e  r value if all n
20960 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61  on-NULL inputs a
20970 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e  re integers..  ^
20980 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20  If any input to 
20990 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72  sum() is neither
209a0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61   an integer or a
209b0 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d   NULL.  then sum
209c0 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f  () returns a flo
209d0 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
209e0 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20  e.  which might 
209f0 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74  be an approximat
20a00 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20  ion to the true 
20a10 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e  sum.</p>..  <p>^
20a20 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77  Sum() will throw
20a30 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65   an "integer ove
20a40 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e  rflow" exception
20a50 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   if all inputs. 
20a60 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72   are integers or
20a70 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69   NULL.  and an i
20a80 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20  nteger overflow 
20a90 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f  occurs at any po
20aa0 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63  int during the c
20ab0 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54  omputation..  ^T
20ac0 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72  otal() never thr
20ad0 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ows an integer o
20ae0 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c  verflow..}.</tcl
20af0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
20b00 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
20b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b50 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20  .Section INSERT 
20b60 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a  insert {INSERT *
20b70 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72 73  INSERTs}..Recurs
20b80 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
20b90 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74   insert-stmt.</t
20ba0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45  cl>..<p>The INSE
20bb0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  RT statement com
20bc0 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69  es in three basi
20bd0 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a  c forms.  .<ul>.
20be0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73  <li><p>^The firs
20bf0 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65  t form (with the
20c00 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72   "VALUES" keywor
20c10 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f  d) creates one o
20c20 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20  r more.new rows 
20c30 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in.an existing t
20c40 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 20 3c 79  able. ^If the <y
20c50 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
20c60 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
20c70 61 66 74 65 72 0a 3c 79 79 74 65 72 6d 3e 74 61  after.<yyterm>ta
20c80 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
20c90 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65  > is omitted the
20ca0 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
20cb0 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64 20  values inserted 
20cc0 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75  into each row.mu
20cd0 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
20ce0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
20cf0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
20d00 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20 63  able. ^In this c
20d10 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20 6f  ase.the result o
20d20 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
20d30 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
20d40 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63 68 20  ssion from each 
20d50 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55  term of.the VALU
20d60 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73 65 72  ES list is inser
20d70 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 65 66  ted into the lef
20d80 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66  t-most column of
20d90 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61   each new row,.a
20da0 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 20  nd so forth for 
20db0 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74 20  each subsequent 
20dc0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20  expression. ^If 
20dd0 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  a <yyterm>column
20de0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c  -name</yyterm>.l
20df0 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
20e00 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
20e10 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65  r of values in e
20e20 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a  ach term of the.
20e30 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20  VALUE list must 
20e40 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72  match the number
20e50 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f   of.specified co
20e60 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20  lumns. ^Each of 
20e70 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
20e80 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77  s of the new row
20e90 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69   is populated.wi
20ea0 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  th the results o
20eb0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
20ec0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56   corresponding V
20ed0 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e  ALUES expression
20ee0 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73  . ^Table.columns
20ef0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70   that do not app
20f00 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ear in the colum
20f10 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c  n list are popul
20f20 61 74 65 64 20 77 69 74 68 20 74 68 65 20 0a 5b  ated with the .[
20f30 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 20 76  default column v
20f40 61 6c 75 65 5d 20 28 73 70 65 63 69 66 69 65 64  alue] (specified
20f50 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
20f60 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
20f70 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 0a 77 69  tatement), or.wi
20f80 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 5b 64  th NULL if no [d
20f90 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 20 69 73  efault value] is
20fa0 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69   specified...<li
20fb0 3e 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66  ><p>The second f
20fc0 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52  orm of the INSER
20fd0 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74  T statement cont
20fe0 61 69 6e 73 20 61 20 5b 53 45 4c 45 43 54 5d 20  ains a [SELECT] 
20ff0 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61  statement.instea
21000 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c  d of a VALUES cl
21010 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74  ause. ^A new ent
21020 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ry is inserted i
21030 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f  nto the table fo
21040 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61  r each.row of da
21050 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
21060 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
21070 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
21080 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
21090 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
210a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
210b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
210c0 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
210d0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
210e0 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
210f0 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20  of items in the 
21100 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74  column-list. ^Ot
21110 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63  herwise, if no c
21120 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
21130 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
21140 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
21150 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
21160 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
21170 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
21180 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
21190 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
211a0 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73  e. ^Any SELECT s
211b0 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
211c0 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  ing.[compound SE
211d0 4c 45 43 54 73 5d 20 61 6e 64 20 53 45 4c 45 43  LECTs] and SELEC
211e0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
211f0 68 20 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  h [ORDER BY] and
21200 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  /or [LIMIT] clau
21210 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65  ses, .may be use
21220 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  d in an INSERT s
21230 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73  tatement of this
21240 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54   form...<li><p>T
21250 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66  he third form of
21260 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
21270 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45 46  ment is with DEF
21280 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54  AULT VALUES..^(T
21290 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45  he INSERT ... DE
212a0 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61  FAULT VALUES sta
212b0 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61  tement inserts a
212c0 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
212d0 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74  into the.named t
212e0 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f  able.)^ ^Each co
212f0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20  lumn of the new 
21300 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
21310 20 77 69 74 68 20 69 74 73 20 0a 5b 64 65 66 61   with its .[defa
21320 75 6c 74 20 76 61 6c 75 65 5d 2c 20 6f 72 20 77  ult value], or w
21330 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f  ith a NULL if no
21340 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
21350 73 20 73 70 65 63 69 66 69 65 64 20 0a 61 73 20  s specified .as 
21360 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  part of the colu
21370 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e  mn definition in
21380 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
21390 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  LE] statement...
213a0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  </ul>..<p>^The "
213b0 52 45 50 4c 41 43 45 22 20 61 6e 64 20 22 49 4e  REPLACE" and "IN
213c0 53 45 52 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f  SERT OR <i>actio
213d0 6e 3c 2f 69 3e 22 20 66 6f 72 6d 73 20 73 70 65  n</i>" forms spe
213e0 63 69 66 79 20 61 6e 20 61 6c 74 65 72 6e 61 74  cify an alternat
213f0 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
21400 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
21410 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
21420 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
21430 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61  one INSERT comma
21440 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
21450 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43  ion titled [ON C
21460 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
21470 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
21480 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  ion..For compati
21490 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
214a0 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61  L, ^the parser a
214b0 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
214c0 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
214d0 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
214e0 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
214f0 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
21500 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
21510 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
21520 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  ...<p>^(The opti
21530 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65 6d 61 2d  onal "<i>schema-
21540 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
21550 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
21560 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e  .<yyterm>table-n
21570 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 73 20  ame</yyterm>.is 
21580 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 74 6f  supported for to
21590 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
215a0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
215b0 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
215c0 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
215d0 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
215e0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
215f0 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
21600 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
21610 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
21620 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
21630 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
21640 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
21650 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
21660 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
21670 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
21680 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
21690 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
216a0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
216b0 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
216c0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
216d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
216e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
216f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21710 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
21720 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
21730 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
21740 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
21750 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65  N CONFLICT}}..Re
21760 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
21770 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
21780 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
21790 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
217a0 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
217b0 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
217c0 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
217d0 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
217e0 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
217f0 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
21800 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
21810 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
21820 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
21830 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
21840 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
21850 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
21860 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
21870 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
21880 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
21890 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
218a0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
218b0 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
218c0 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
218d0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
218e0 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
218f0 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
21900 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
21910 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
21920 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
21930 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
21940 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
21950 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
21960 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
21970 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
21980 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
21990 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
219a0 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
219b0 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
219c0 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
219d0 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
219e0 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
219f0 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
21a00 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
21a10 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
21a20 61 70 70 6c 69 65 73 20 74 6f 20 5b 55 4e 49 51  applies to [UNIQ
21a30 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c  UE], [NOT NULL],
21a40 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64 20 5b 50  .[CHECK], and [P
21a50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
21a60 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 4f 4e 20  traints..The ON 
21a70 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
21a80 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c  hm does not.appl
21a90 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45  y to [FOREIGN KE
21aa0 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a  Y constraints]..
21ab0 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
21ac0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
21ad0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f  on algorithm cho
21ae0 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20  ices:.ROLLBACK, 
21af0 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e  ABORT, FAIL, IGN
21b00 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
21b10 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
21b20 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
21b30 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
21b40 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20  ABORT.  This.is 
21b50 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c  what they mean:<
21b60 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62  /p>..<dl>.<dt><b
21b70 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64  >ROLLBACK</b></d
21b80 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
21b90 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
21ba0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21bb0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
21bc0 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74  ROLLBACK.resolut
21bd0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
21be0 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
21bf0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
21c00 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ith.an SQLITE_CO
21c10 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61  NSTRAINT error a
21c20 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68  nd rolls back th
21c30 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
21c40 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72  ction..^If no tr
21c50 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74  ansaction is.act
21c60 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20  ive (other than 
21c70 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e  the implied tran
21c80 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  saction that is 
21c90 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79  created on every
21ca0 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74  .command) then t
21cb0 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f  he ROLLBACK reso
21cc0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21cd0 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
21ce0 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67  as the.ABORT alg
21cf0 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e  orithm.</p></dd>
21d00 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f  ..<dt><b>ABORT</
21d10 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
21d20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
21d30 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
21d40 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
21d50 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c   the ABORT.resol
21d60 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
21d70 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  aborts the curre
21d80 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
21d90 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f  .with an SQLITE_
21da0 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72  CONSTRAINT error
21db0 20 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61   and backs out a
21dc0 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20  ny changes.made 
21dd0 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  by the current S
21de0 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75  QL statement; bu
21df0 74 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64  t changes caused
21e00 0a 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74  .by prior SQL st
21e10 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
21e20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
21e30 74 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76  tion are preserv
21e40 65 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73  ed and the.trans
21e50 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
21e60 63 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74  ctive..This is t
21e70 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
21e80 69 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61  ior and the beha
21e90 76 69 6f 72 20 73 70 65 63 69 66 69 65 64 20 62  vior specified b
21ea0 79 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64 61  y the SQL.standa
21eb0 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  rd.</p></dd>..<d
21ec0 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64  t><b>FAIL</b></d
21ed0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
21ee0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
21ef0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21f00 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
21f10 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL.resolution 
21f20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
21f30 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
21f40 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20   statement with 
21f50 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an.SQLITE_CONSTR
21f60 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42 75  AINT error.  ^Bu
21f70 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f 6c  t the FAIL resol
21f80 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62  ution does not.b
21f90 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63 68  ack out prior ch
21fa0 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51 4c  anges of the SQL
21fb0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
21fc0 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a  failed nor does.
21fd0 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e 73  it end the trans
21fe0 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  action..^For exa
21ff0 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41  mple, if an UPDA
22000 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  TE.statement enc
22010 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74  ountered a const
22020 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
22030 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77  on the 100th row
22040 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74   that.it attempt
22050 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65  s to update, the
22060 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72  n the first 99 r
22070 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70  ow changes are p
22080 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61  reserved.but cha
22090 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30  nges to rows 100
220a0 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65   and beyond neve
220b0 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64  r occur.</p></dd
220c0 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45  >..<dt><b>IGNORE
220d0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
220e0 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
220f0 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
22100 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
22110 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72  s, .the IGNORE r
22120 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
22130 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e  thm skips the on
22140 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61  e row that conta
22150 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69  ins.the constrai
22160 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64  nt violation and
22170 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65   continues proce
22180 73 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74  ssing subsequent
22190 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c   rows.of the SQL
221a0 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66   statement as if
221b0 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72   nothing went wr
221c0 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20  ong..Other rows 
221d0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
221e0 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f   the row that.co
221f0 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73  ntained the cons
22200 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
22210 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72   are inserted or
22220 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c   updated.normall
22230 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20  y. ^No error is 
22240 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68  returned when th
22250 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63  e IGNORE conflic
22260 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67  t resolution.alg
22270 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
22280 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
22290 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74  >REPLACE</b></dt
222a0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
222b0 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50  a [UNIQUE] or [P
222c0 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
222d0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
222e0 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 52 45   occurs, .the RE
222f0 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a  PLACE algorithm.
22300 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73  deletes pre-exis
22310 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61  ting rows that a
22320 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
22330 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
22340 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73  ion.prior to ins
22350 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69  erting or updati
22360 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
22370 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  ow and the comma
22380 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78  nd continues .ex
22390 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
223a0 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c  ..^If a [NOT NUL
223b0 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  L] constraint vi
223c0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
223d0 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
223e0 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
223f0 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c  replaces the NUL
22400 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65  L value with.the
22410 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
22420 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20  or that column, 
22430 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  or if the column
22440 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a   has no default.
22450 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
22460 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
22470 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b  is used..^If a [
22480 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72 61 69 6e  CHECK] constrain
22490 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
224a0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
224b0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
224c0 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c  ion.algorithm al
224d0 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20  ways works like 
224e0 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ABORT.</p>..<p>^
224f0 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45  When the REPLACE
22500 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
22510 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
22520 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
22530 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
22540 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
22550 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
22560 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
22570 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  fire if and only
22580 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74   if.[recursive_t
22590 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c  riggers pragma |
225a0 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
225b0 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  ers] are enabled
225c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
225d0 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
225e0 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f  ook | update hoo
225f0 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65  k] is not invoke
22600 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a  d for rows that.
22610 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74  are deleted by t
22620 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
22630 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
22640 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64  trategy.  ^Nor d
22650 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72  oes.REPLACE incr
22660 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74  ement the [sqlit
22670 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61  e3_changes | cha
22680 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68  nge counter]..Th
22690 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65  e exceptional be
226a0 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20  haviors defined 
226b0 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70  in this paragrap
226c0 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a  h might change .
226d0 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
226e0 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a  ase.</p>.</dl>..
226f0 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68  <p>^The algorith
22700 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
22710 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20  he OR clause of 
22720 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  an INSERT or UPD
22730 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e  ATE.overrides an
22740 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  y algorithm spec
22750 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54  ified in a CREAT
22760 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20  E TABLE..^If no 
22770 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
22780 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
22790 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
227a0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
227b0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
227c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22800 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
22810 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
22820 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73 69  REINDEX..Recursi
22830 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
22840 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  reindex-stmt.</t
22850 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49  cl>..<p>^The REI
22860 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
22870 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
22880 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
22890 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
228a0 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
228b0 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
228c0 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
228d0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
228e0 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
228f0 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
22900 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  EX keyword is no
22910 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
22920 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
22930 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a  ce or database .
22940 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65  object identifie
22950 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  r, then all indi
22960 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
22970 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
22980 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e  e rebuilt...<p>^
22990 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
229a0 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77  eyword is follow
229b0 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
229c0 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c  n-sequence name,
229d0 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65   then.all indice
229e0 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
229f0 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
22a00 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
22a10 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22a20 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64  es.are recreated
22a30 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74  . ..<p>^Or, if t
22a40 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61  he argument atta
22a50 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e  ched to the REIN
22a60 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61  DEX identifies a
22a70 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62   specific .datab
22a80 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  ase table, then 
22a90 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61  all indices atta
22aa0 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  ched to the data
22ab0 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72  base table are r
22ac0 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20  ebuilt. .^If it 
22ad0 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
22ae0 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69  cific database i
22af0 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20  ndex, then just 
22b00 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65  that index is re
22b10 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  created...<p>^Fo
22b20 72 20 61 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 74  r a command of t
22b30 68 65 20 66 6f 72 6d 20 22 52 45 49 4e 44 45 58  he form "REINDEX
22b40 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 2c 20 61   <i>name</i>", a
22b50 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c   match.against <
22b60 79 79 74 65 72 6d 3e 63 6f 6c 6c 61 74 69 6f 6e  yyterm>collation
22b70 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74  -name</yyterm> t
22b80 61 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65 20  akes precedence 
22b90 6f 76 65 72 20 61 20 6d 61 74 63 68 0a 61 67 61  over a match.aga
22ba0 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 69 6e 64  inst <yyterm>ind
22bb0 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ex-name</yyterm>
22bc0 20 6f 72 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c   or <yyterm>tabl
22bd0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e  e-name</yyterm>.
22be0 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20  .This ambiguity 
22bf0 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61  in the syntax ma
22c00 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20  y be avoided by 
22c10 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
22c20 67 20 61 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65  g a.<yyterm>sche
22c30 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ma-name</yyterm>
22c40 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
22c50 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c   a specific tabl
22c60 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
22c70 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
22c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22cc0 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
22cd0 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
22ce0 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
22cf0 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
22d00 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
22d10 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
22d20 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
22d30 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
22d40 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
22d50 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
22d60 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
22d70 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
22d80 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
22d90 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
22da0 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
22db0 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
22dc0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
22dd0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
22de0 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
22df0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
22e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e40 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57  #####.Section {W
22e50 49 54 48 20 63 6c 61 75 73 65 7d 20 77 69 74 68  ITH clause} with
22e60 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20   {{common table 
22e70 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 57 49 54  expressions} WIT
22e80 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  H}..RecursiveBub
22e90 62 6c 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d  bleDiagram with-
22ea0 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
22eb0 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  p>Common Table E
22ec0 78 70 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54  xpressions or CT
22ed0 45 73 20 61 63 74 20 6c 69 6b 65 20 74 65 6d 70  Es act like temp
22ee0 6f 72 61 72 79 20 5b 76 69 65 77 73 5d 20 74 68  orary [views] th
22ef0 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f  at exist.only fo
22f00 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
22f10 66 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  f a single SQL s
22f20 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65  tatement.  There
22f30 20 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f   are two kinds o
22f40 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  f.common table e
22f50 78 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64  xpressions: "ord
22f60 69 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63 75  inary" and "recu
22f70 72 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72 79  rsive". Ordinary
22f80 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   .common table e
22f90 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
22fa0 65 6c 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e  elpful for makin
22fb0 67 0a 71 75 65 72 69 65 73 20 65 61 73 69 65 72  g.queries easier
22fc0 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 62   to understand b
22fd0 79 20 66 61 63 74 6f 72 69 6e 67 0a 73 75 62 71  y factoring.subq
22fe0 75 65 72 69 65 73 20 6f 75 74 20 6f 66 20 74 68  ueries out of th
22ff0 65 20 6d 61 69 6e 20 53 51 4c 20 73 74 61 74 65  e main SQL state
23000 6d 65 6e 74 2e 0a 52 65 63 75 72 73 69 76 65 20  ment..Recursive 
23010 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
23020 72 65 73 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65  ressions.provide
23030 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20   the ability to 
23040 64 6f 20 68 69 65 72 61 72 63 68 69 63 61 6c 20  do hierarchical 
23050 6f 72 0a 72 65 63 75 72 73 69 76 65 20 71 75 65  or.recursive que
23060 72 69 65 73 20 6f 66 20 74 72 65 65 73 20 61 6e  ries of trees an
23070 64 20 67 72 61 70 68 73 2c 20 61 20 63 61 70 61  d graphs, a capa
23080 62 69 6c 69 74 79 0a 74 68 61 74 20 69 73 20 6e  bility.that is n
23090 6f 74 20 6f 74 68 65 72 77 69 73 65 20 61 76 61  ot otherwise ava
230a0 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 53 51  ilable in the SQ
230b0 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e  L language...<p>
230c0 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  All common table
230d0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 28 6f 72   expressions (or
230e0 64 69 6e 61 72 79 20 61 6e 64 20 72 65 63 75 72  dinary and recur
230f0 73 69 76 65 29 20 61 72 65 20 0a 63 72 65 61 74  sive) are .creat
23100 65 64 20 62 79 20 70 72 65 70 65 6e 64 69 6e 67  ed by prepending
23110 20 61 20 57 49 54 48 20 63 6c 61 75 73 65 20 69   a WITH clause i
23120 6e 20 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45  n front of a [SE
23130 4c 45 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LECT], [INSERT],
23140 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55   [DELETE],.or [U
23150 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
23160 2e 20 20 41 20 73 69 6e 67 6c 65 20 57 49 54 48  .  A single WITH
23170 20 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63   clause can spec
23180 69 66 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  ify one or more.
23190 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
231a0 72 65 73 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f  ressions, some o
231b0 66 20 77 68 69 63 68 20 61 72 65 20 6f 72 64 69  f which are ordi
231c0 6e 61 72 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66  nary and some of
231d0 20 77 68 69 63 68 0a 61 72 65 20 72 65 63 75 72   which.are recur
231e0 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  sive...<tcl>hd_f
231f0 72 61 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79  ragment ordinary
23200 63 74 65 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f  cte {ordinary co
23210 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23220 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ssions}</tcl>.<h
23230 33 3e 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f  3>Ordinary Commo
23240 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69  n Table Expressi
23250 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20  ons</h3>..<p>An 
23260 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
23270 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23280 20 77 6f 72 6b 73 20 61 73 20 69 66 20 69 74 20   works as if it 
23290 77 65 72 65 20 61 20 5b 76 69 65 77 5d 20 74 68  were a [view] th
232a0 61 74 0a 65 78 69 73 74 73 20 66 6f 72 20 74 68  at.exists for th
232b0 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20  e duration of a 
232c0 73 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74  single statement
232d0 2e 20 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  .  Ordinary comm
232e0 6f 6e 20 74 61 62 6c 65 0a 65 78 70 72 65 73 73  on table.express
232f0 69 6f 6e 73 20 61 72 65 20 75 73 65 66 75 6c 20  ions are useful 
23300 66 6f 72 20 66 61 63 74 6f 72 69 6e 67 20 6f 75  for factoring ou
23310 74 20 73 75 62 71 75 65 72 69 65 73 20 61 6e 64  t subqueries and
23320 20 6d 61 6b 69 6e 67 20 74 68 65 20 6f 76 65 72   making the over
23330 61 6c 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  all.SQL statemen
23340 74 20 65 61 73 69 65 72 20 74 6f 20 72 65 61 64  t easier to read
23350 20 61 6e 64 20 75 6e 64 65 72 73 74 61 6e 64 2e   and understand.
23360 0a 0a 3c 70 3e 41 20 57 49 54 48 20 63 6c 61 75  ..<p>A WITH clau
23370 73 65 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f  se can contain o
23380 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
23390 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
233a0 20 65 76 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c   even if.it incl
233b0 75 64 65 73 20 74 68 65 20 52 45 43 55 52 53 49  udes the RECURSI
233c0 56 45 20 6b 65 79 77 6f 72 64 2e 20 20 54 68 65  VE keyword.  The
233d0 20 75 73 65 20 6f 66 20 52 45 43 55 52 53 49 56   use of RECURSIV
233e0 45 20 64 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65  E does not force
233f0 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
23400 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 62 65 20  pressions to be 
23410 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c  recursive...<tcl
23420 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  >.hd_fragment re
23430 63 75 72 73 69 76 65 63 74 65 20 7b 72 65 63 75  cursivecte {recu
23440 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
23450 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20  le expressions} 
23460 5c 0a 7b 72 65 63 75 72 73 69 76 65 20 71 75 65  \.{recursive que
23470 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52  ry}.</tcl>.<h3>R
23480 65 63 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20  ecursive Common 
23490 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e  Table Expression
234a0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63  s</h3>..<p>A rec
234b0 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
234c0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63  ble expression c
234d0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 77 72  an be used to wr
234e0 69 74 65 20 61 20 71 75 65 72 79 20 74 68 61 74  ite a query that
234f0 0a 77 61 6c 6b 73 20 61 20 74 72 65 65 20 6f 72  .walks a tree or
23500 20 67 72 61 70 68 2e 20 20 41 20 72 65 63 75 72   graph.  A recur
23510 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
23520 65 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73  e expression has
23530 20 74 68 65 20 73 61 6d 65 0a 62 61 73 69 63 20   the same.basic 
23540 73 79 6e 74 61 78 20 61 73 20 61 6e 20 6f 72 64  syntax as an ord
23550 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
23560 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 62  le expression, b
23570 75 74 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  ut with the foll
23580 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c  owing.additional
23590 20 66 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e   features:..<ol>
235a0 0a 3c 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c 65  .<li> The "[sele
235b0 63 74 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d  ct-stmt]".     m
235c0 75 73 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75  ust be a [compou
235d0 6e 64 20 73 65 6c 65 63 74 5d 20 77 68 65 72 65  nd select] where
235e0 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
235f0 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74  [compound-operat
23600 6f 72 5d 20 69 73 0a 20 20 20 20 20 65 69 74 68  or] is.     eith
23610 65 72 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f  er UNION or UNIO
23620 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20  N ALL..<li> The 
23630 74 61 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74  table named on t
23640 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  he left-hand sid
23650 65 20 6f 66 20 74 68 65 20 41 53 20 6b 65 79 77  e of the AS keyw
23660 6f 72 64 20 6d 75 73 74 20 61 70 70 65 61 72 0a  ord must appear.
23670 20 20 20 20 20 65 78 61 63 74 6c 79 20 6f 6e 63       exactly onc
23680 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
23690 61 75 73 65 20 6f 66 20 74 68 65 20 72 69 67 68  ause of the righ
236a0 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74  t-most SELECT st
236b0 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20  atement.     of 
236c0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  the compound sel
236d0 65 63 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65  ect, and nowhere
236e0 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   else..</ol>..<p
236f0 3e 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74 68  >To put it anoth
23700 65 72 20 77 61 79 2c 20 61 20 72 65 63 75 72 73  er way, a recurs
23710 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
23720 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74   expression must
23730 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20 66  .look like the f
23740 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e  ollowing:..<tcl>
23750 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
23760 69 61 67 72 61 6d 20 72 65 63 75 72 73 69 76 65  iagram recursive
23770 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43  -cte</tcl>..<p>C
23780 61 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e 61  all the table na
23790 6d 65 64 20 62 79 20 74 68 65 20 5b 63 74 65 2d  med by the [cte-
237a0 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20 61  table-name] in a
237b0 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f   recursive.commo
237c0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
237d0 6f 6e 20 74 68 65 20 22 72 65 63 75 72 73 69 76  on the "recursiv
237e0 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68 65  e table"..In the
237f0 20 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65 5d   [recursive-cte]
23800 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20   bubble diagram 
23810 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72  above, the recur
23820 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20  sive.table must 
23830 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f  appear exactly o
23840 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  nce in the FROM 
23850 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a 3c  clause of the .<
23860 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65  yyterm>recursive
23870 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
23880 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70  .and must not ap
23890 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c  pear anywhere el
238a0 73 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65  se in either the
238b0 0a 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c  .<yyterm>initial
238c0 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
238d0 20 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e   or the.<yyterm>
238e0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
238f0 3c 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c 75  </yyterm>, inclu
23900 64 69 6e 67 20 73 75 62 71 75 65 72 69 65 73 2e  ding subqueries.
23910 0a 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69  .The <yyterm>ini
23920 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
23930 65 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b 63  erm> may be.a [c
23940 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c  ompound select],
23950 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20   but it may not 
23960 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52  include an ORDER
23970 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f   BY, LIMIT, or O
23980 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75 72  FFSET..The recur
23990 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73 74  sive-select must
239a0 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65 6c   be a simple sel
239b0 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f  ect, not a compo
239c0 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72 73  und.  The.recurs
239d0 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61 6c  ive-select is al
239e0 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64 65  lowed to include
239f0 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49   an ORDER BY, LI
23a00 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53  MIT, and/or OFFS
23a10 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69  ET...<p>The basi
23a20 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20  c algorithm for 
23a30 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63 6f  computing the co
23a40 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
23a50 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73 20  ursive table.is 
23a60 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c  as follows:..<ol
23a70 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20 3c  >.<li> Run the <
23a80 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73  yyterm>initial-s
23a90 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61  elect</yyterm> a
23aa0 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75 6c  nd add the resul
23ab0 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c  ts to a queue..<
23ac0 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75  li> While the qu
23ad0 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  eue is not empty
23ae0 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a  :.<ol type="a">.
23af0 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20 73  <li> Extract a s
23b00 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74  ingle row from t
23b10 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 49  he queue..<li> I
23b20 6e 73 65 72 74 20 74 68 61 74 20 73 69 6e 67 6c  nsert that singl
23b30 65 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72  e row into the r
23b40 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c  ecursive table.<
23b50 6c 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74  li> Pretend that
23b60 20 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20   the single row 
23b70 6a 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69  just extracted i
23b80 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20  s the only.     
23b90 72 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72  row in the recur
23ba0 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72  sive table and r
23bb0 75 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  un the recursive
23bc0 2d 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64  -select,.     ad
23bd0 64 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73  ding all results
23be0 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c   to the queue..<
23bf0 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  /ol>.</ol>..<p>T
23c00 68 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75  he basic procedu
23c10 72 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64  re above may mod
23c20 69 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c  ified by the fol
23c30 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
23c40 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c  l rules:..<ul>.<
23c50 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55 4e  li><p>.  If a UN
23c60 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e  ION operator con
23c70 6e 65 63 74 73 20 74 68 65 20 3c 79 79 74 65 72  nects the <yyter
23c80 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
23c90 3c 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20 74  </yyterm> with t
23ca0 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63  he.  <yyterm>rec
23cb0 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79  ursive-select</y
23cc0 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e 6c  yterm>, then onl
23cd0 79 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74 68  y add rows to th
23ce0 65 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e 6f  e queue if .  no
23cf0 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20 68   identical row h
23d00 61 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69 6f  as.  been previo
23d10 75 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74 68  usly added to th
23d20 65 20 71 75 65 75 65 2e 20 20 52 65 70 65 61 74  e queue.  Repeat
23d30 65 64 20 72 6f 77 73 20 61 72 65 20 64 69 73 63  ed rows are disc
23d40 61 72 64 65 64 20 62 65 66 6f 72 65 20 62 65 69  arded before bei
23d50 6e 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74 68  ng.  added to th
23d60 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20  e queue even if 
23d70 74 68 65 20 72 65 70 65 61 74 65 64 20 72 6f 77  the repeated row
23d80 73 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62  s have already b
23d90 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20 20  een extracted.  
23da0 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 62  from the queue b
23db0 79 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  y the recursion 
23dc0 73 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f 70  step.  If the op
23dd0 65 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e 20  erator is UNION 
23de0 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c 20  ALL,.  then all 
23df0 72 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20 62  rows generated b
23e00 79 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74 65  y both the <yyte
23e10 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
23e20 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74  t</yyterm> and t
23e30 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63  he.  <yyterm>rec
23e40 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79  ursive-select</y
23e50 79 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61 79  yterm> are alway
23e60 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
23e70 75 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20 74  ueue even if.  t
23e80 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73 2e  hey are repeats.
23e90 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69 6e  .  When determin
23ea0 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73 20  ing if a row is 
23eb0 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20 76  repeated, NULL v
23ec0 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20 20  alues compare.  
23ed0 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
23ee0 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71 75  ther and not equ
23ef0 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 20  al to any other 
23f00 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20  value..<li><p>. 
23f10 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   The LIMIT claus
23f20 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 64  e, if present, d
23f30 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61  etermines the ma
23f40 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
23f50 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c 6c  rows that.  will
23f60 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20 74   ever be added t
23f70 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
23f80 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32 62  table in step 2b
23f90 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69 6d  ..  Once the lim
23fa0 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20 74  it is reached, t
23fb0 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
23fc0 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f 66  ps..  A limit of
23fd0 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74   zero means that
23fe0 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76 65   no rows are eve
23ff0 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 20  r added to the. 
24000 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24010 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76 65  , and a negative
24020 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e 20   limit means an 
24030 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72  unlimited number
24040 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20 62   of rows.  may b
24050 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  e added to the r
24060 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
24070 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f 46  <li><p>.  The OF
24080 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66 20  FSET clause, if 
24090 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e  it is present an
240a0 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76 65  d has a positive
240b0 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65 6e   value N, preven
240c0 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20 4e  ts the.  first N
240d0 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e 67   rows from being
240e0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
240f0 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 20  cursive table.. 
24100 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77   The first N row
24110 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f 63  s are still proc
24120 65 73 73 65 64 0a 20 20 62 79 20 74 68 65 20 3c  essed.  by the <
24130 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65  yyterm>recursive
24140 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
24150 20 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20 20   &mdash; they.  
24160 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64 64  just are not add
24170 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
24180 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77 73  ive table.  Rows
24190 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65 64   are not counted
241a0 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69 6c   toward.  fulfil
241b0 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 75  ling the LIMIT u
241c0 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54 20  ntil all OFFSET 
241d0 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20 73  rows have been s
241e0 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a  kipped..<li><p>.
241f0 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59    If an ORDER BY
24200 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
24210 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e 65  nt, it determine
24220 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  s the order in w
24230 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65 20  hich rows.  are 
24240 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74  extracted from t
24250 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65 70  he queue in step
24260 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20 69   2a.  If there i
24270 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  s no ORDER BY cl
24280 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68 65  ause,.  then the
24290 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
242a0 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63 74  rows are extract
242b0 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ed is undefined.
242c0 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65 6e    (In the curren
242d0 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  t.  implementati
242e0 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62 65  on, the queue be
242f0 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66 20  comes a FIFO if 
24300 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
24310 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a  use is omitted,.
24320 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f    but applicatio
24330 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64 65  ns should not de
24340 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61 63  pend on that fac
24350 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68 74  t since it might
24360 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a   change.).</ul>.
24370 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
24380 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68  t rcex1</tcl>.<h
24390 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65 72  4>Recursive Quer
243a0 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
243b0 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
243c0 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73 20  g query returns 
243d0 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65 74  all integers bet
243e0 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30 30  ween 1 and 10000
243f0 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  00:..<blockquote
24400 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
24410 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41  RSIVE.  cnt(x) A
24420 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49  S (VALUES(1) UNI
24430 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b  ON ALL SELECT x+
24440 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52 45  1 FROM cnt WHERE
24450 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c 45   x<1000000).SELE
24460 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c  CT x FROM cnt;.<
24470 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
24480 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20  e>..<p>Consider 
24490 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20 77  how this query w
244a0 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74 69  orks.  The initi
244b0 61 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20 66  al-select.runs f
244c0 69 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e 73  irst and returns
244d0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77 69   a single row.wi
244e0 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  th a single colu
244f0 6d 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f 6e  mn "1".  This on
24500 65 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74  e row is added t
24510 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 49 6e  o the queue.  In
24520 0a 73 74 65 70 20 32 61 2c 20 74 68 61 74 20 6f  .step 2a, that o
24530 6e 65 20 72 6f 77 20 69 73 20 65 78 74 72 61 63  ne row is extrac
24540 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65  ted from the que
24550 75 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20  ue and added to 
24560 22 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65 20  "cnt"..Then the 
24570 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
24580 20 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f 72   is run in accor
24590 64 61 6e 63 65 20 77 69 74 68 20 73 74 65 70 20  dance with step 
245a0 32 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61 20  2c generating.a 
245b0 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 77  single new row w
245c0 69 74 68 20 76 61 6c 75 65 20 22 32 22 20 74 6f  ith value "2" to
245d0 20 61 64 64 20 74 6f 20 74 68 65 20 71 75 65 75   add to the queu
245e0 65 2e 20 20 54 68 65 20 71 75 65 75 65 20 73 74  e.  The queue st
245f0 69 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77 2c  ill.has one row,
24600 20 73 6f 20 73 74 65 70 20 32 20 72 65 70 65 61   so step 2 repea
24610 74 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f 77  ts.  The "2" row
24620 20 69 73 20 65 78 74 72 61 63 74 65 64 20 61 6e   is extracted an
24630 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 72  d added to the.r
24640 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 62  ecursive table b
24650 79 20 73 74 65 70 73 20 32 61 20 61 6e 64 20 32  y steps 2a and 2
24660 62 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f 77  b.  Then the row
24670 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69 73   containing 2 is
24680 20 75 73 65 64 20 0a 61 73 20 69 66 20 69 74 20   used .as if it 
24690 77 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  were the complet
246a0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
246b0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
246c0 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72 73   and the .recurs
246d0 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75  ive-select is ru
246e0 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74 69  n again, resulti
246f0 6e 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74 68  ng in a row with
24700 20 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e 67   value "3" being
24710 20 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71 75   added.to the qu
24720 65 75 65 2e 20 20 54 68 69 73 20 72 65 70 65 61  eue.  This repea
24730 74 73 20 39 39 39 39 39 39 20 74 69 6d 65 73 20  ts 999999 times 
24740 75 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61 74  until finally at
24750 20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e 6c   step 2a the.onl
24760 79 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 71  y value on the q
24770 75 65 75 65 20 69 73 20 61 20 72 6f 77 20 63 6f  ueue is a row co
24780 6e 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30 30  ntaining 1000000
24790 2e 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a 65  .  That row is.e
247a0 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64  xtracted and add
247b0 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
247c0 69 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74 20  ive table.  But 
247d0 74 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a 57  this time, the.W
247e0 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75 73  HERE clause caus
247f0 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65  es the recursive
24800 2d 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75 72  -select to retur
24810 6e 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74 68  n no rows, so th
24820 65 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73 20  e.queue remains 
24830 65 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72 65  empty and the re
24840 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a  cursion stops...
24850 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74 69  <p><b>Optimizati
24860 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20  on note:</b>.In 
24870 74 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20 61  the discussion a
24880 62 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74 73  bove, statements
24890 20 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74 68   like "insert th
248a0 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20 72  e row into.the r
248b0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 20  ecursive table" 
248c0 73 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72 73  should be unders
248d0 74 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c 6c  tood conceptuall
248e0 79 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c 79  y, not literally
248f0 2e 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20 69  ..It sounds as i
24900 66 20 53 51 4c 69 74 65 20 69 73 20 61 63 63 75  f SQLite is accu
24910 6d 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65 20  mulating a huge 
24920 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e 67  table.containing
24930 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77   one million row
24940 73 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62 61  s, then going ba
24950 63 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67 20  ck and scanning 
24960 74 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d 20  that table.from 
24970 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74 6f  top to bottom to
24980 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72 65   generate the re
24990 73 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61 6c  sult.  What real
249a0 6c 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74 68  ly happens.is th
249b0 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  at the query opt
249c0 69 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61 74  imizer sees that
249d0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a 22   values in the."
249e0 63 6e 74 22 20 72 65 63 75 72 73 69 76 65 20 74  cnt" recursive t
249f0 61 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75 73  able are only us
24a00 65 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73 20  ed once.  So as 
24a10 65 61 63 68 20 72 6f 77 20 69 73 20 61 64 64 65  each row is adde
24a20 64 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69  d to.the recursi
24a30 76 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20 72  ve table, that r
24a40 6f 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65 6c  ow is immediatel
24a50 79 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20  y returned as a 
24a60 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d 61  result of the ma
24a70 69 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d  in.SELECT statem
24a80 65 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69 73  ent and then dis
24a90 63 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65 20  carded.  SQLite 
24aa0 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d  does <em>not</em
24ab0 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20 74  > accumulate.a t
24ac0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 63  emporary table c
24ad0 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c 6c  ontaining a mill
24ae0 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79 20  ion rows.  Very 
24af0 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69 73  little memory is
24b00 0a 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20 74  .needed to run t
24b10 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c 65  he above example
24b20 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74  .  However, if t
24b30 68 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20 75  he example had u
24b40 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65 61  sed.UNION instea
24b50 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  d of UNION ALL, 
24b60 74 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75 6c  then SQLite woul
24b70 64 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b 65  d have had to ke
24b80 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70 72  ep around.all pr
24b90 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
24ba0 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f 72  ed content in or
24bb0 64 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f 72  der to check for
24bc0 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f 72   duplicates..For
24bd0 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70 72   this reason, pr
24be0 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c 64  ogrammers should
24bf0 20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20 55   strive to use U
24c00 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61 64  NION ALL instead
24c10 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20 66  .of UNION when f
24c20 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72  easible...<p>Her
24c30 65 20 69 73 20 61 20 76 61 72 69 61 74 69 6f 6e  e is a variation
24c40 20 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   on the previous
24c50 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63   example:..<bloc
24c60 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
24c70 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e  H RECURSIVE.  cn
24c80 74 28 78 29 20 41 53 20 28 0a 20 20 20 20 20 53  t(x) AS (.     S
24c90 45 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e 49  ELECT 1.     UNI
24ca0 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45  ON ALL.     SELE
24cb0 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 0a  CT x+1 FROM cnt.
24cc0 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30 30        LIMIT 1000
24cd0 30 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 78  000.  ).SELECT x
24ce0 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65   FROM cnt;.</pre
24cf0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
24d00 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f  <p>There are two
24d10 20 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e 20   differences in 
24d20 74 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e 20  this variation. 
24d30 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c   The initial-sel
24d40 65 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20 31  ect is."SELECT 1
24d50 22 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56 41  " instead of "VA
24d60 4c 55 45 53 28 31 29 22 2e 20 20 42 75 74 20 74  LUES(1)".  But t
24d70 68 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64 69  hose are just di
24d80 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65 73  fferent.syntaxes
24d90 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61 63   for saying exac
24da0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
24db0 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20 63  ng.  The other c
24dc0 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74 68  hange is that th
24dd0 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20 73  e.recursion is s
24de0 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d 49  topped by a LIMI
24df0 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20  T rather than a 
24e00 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20 54  WHERE clause.  T
24e10 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54 20  he use of.LIMIT 
24e20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
24e30 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74  the one-milliont
24e40 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74  h row is added t
24e50 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62 6c  o the "cnt" tabl
24e60 65 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64 20  e.(and returned 
24e70 62 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c 45  by the main SELE
24e80 43 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74 68  CT, thanks to th
24e90 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
24ea0 72 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63 75  r).then the recu
24eb0 72 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d 65  rsion stops imme
24ec0 64 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c 65  diately regardle
24ed0 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 72  ss of how many r
24ee0 6f 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65 66  ows might be.lef
24ef0 74 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e 20  t in the queue. 
24f00 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65 78   On more complex
24f10 20 71 75 65 72 69 65 73 2c 20 69 74 20 63 61 6e   queries, it can
24f20 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64 69   sometimes be.di
24f30 66 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75 72  fficult to ensur
24f40 65 20 74 68 61 74 20 74 68 65 20 57 48 45 52 45  e that the WHERE
24f50 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76 65   clause will eve
24f60 6e 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74 68  ntually cause th
24f70 65 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69 6e  e.queue to drain
24f80 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69   and the recursi
24f90 6f 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 2e  on to terminate.
24fa0 20 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54 20    But the LIMIT 
24fb0 63 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77 61  clause will.alwa
24fc0 79 73 20 73 74 6f 70 20 74 68 65 20 72 65 63 75  ys stop the recu
24fd0 72 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69 73  rsion.  So it is
24fe0 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20 74   good practice t
24ff0 6f 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64 65  o always include
25000 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20   a.LIMIT clause 
25010 61 73 20 61 20 73 61 66 65 74 79 20 69 66 20 61  as a safety if a
25020 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
25030 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
25040 20 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20 6b   recursion .is k
25050 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  nown...<tcl>hd_f
25060 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74  ragment rcex2</t
25070 63 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63 68  cl>.<h4>Hierarch
25080 69 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d 70  ical Query Examp
25090 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e  les</h4>..<p>Con
250a0 73 69 64 65 72 20 61 20 74 61 62 6c 65 20 74 68  sider a table th
250b0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
250c0 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20 6f   members of an o
250d0 72 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a 77  rganization as.w
250e0 65 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69 6e  ell as the chain
250f0 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74 68  -of-command with
25100 69 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a 61  in that organiza
25110 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tion:..<blockquo
25120 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
25130 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d  TABLE org(.  nam
25140 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
25150 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20  EY,.  boss TEXT 
25160 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c 0a  REFERENCES org,.
25170 20 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20 20    height INT,.  
25180 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74  -- other content
25190 20 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70 72   omitted.);.</pr
251a0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
251b0 0a 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65 72  .<p>Every member
251c0 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61   in the organiza
251d0 74 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65 2c  tion has a name,
251e0 20 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65 72   and most member
251f0 73 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65 20  s have.a single 
25200 62 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61 64  boss.  (The head
25210 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f 72   of the whole or
25220 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61  ganization has a
25230 20 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69 65   NULL."boss" fie
25240 6c 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f 66  ld.) The rows of
25250 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65   the "org" table
25260 20 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a 3c   form a tree...<
25270 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72  p>Here is a quer
25280 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  y that computes 
25290 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69 67  the average heig
252a0 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e 65  ht over everyone
252b0 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67 61  .in Alice's orga
252c0 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75 64  nization, includ
252d0 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f  ing Alice:..<blo
252e0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
252f0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 77  TH RECURSIVE.  w
25300 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28 6e  orks_for_alice(n
25310 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
25320 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20 55  S('Alice').    U
25330 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
25340 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20 77  name FROM org, w
25350 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a 20  orks_for_alice. 
25360 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62 6f      WHERE org.bo
25370 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  ss=works_for_ali
25380 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54 20  ce.n.  ).SELECT 
25390 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f 4d  avg(height) FROM
253a0 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67 2e   org. WHERE org.
253b0 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66 6f  name IN works_fo
253c0 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
253d0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
253e0 3e 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70 6c  >The next exampl
253f0 65 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d 6d  e uses two .comm
25400 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
25410 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65  ions in a single
25420 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20 0a   WITH clause.  .
25430 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  The following ta
25440 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66 61  ble records a fa
25450 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f  mily tree:..<blo
25460 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
25470 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69 6c  EATE TABLE famil
25480 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  y(.  name TEXT P
25490 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 6f  RIMARY KEY,.  mo
254a0 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45  m TEXT REFERENCE
254b0 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64 20  S family,.  dad 
254c0 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
254d0 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20 44  family,.  born D
254e0 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64 20  ATETIME,.  died 
254f0 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c  DATETIME, -- NUL
25500 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76 65  L if still alive
25510 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74  .  -- other cont
25520 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ent.);.</pre></b
25530 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
25540 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62 6c  he "family" tabl
25550 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
25560 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72 67  the earlier "org
25570 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20 74  " table except t
25580 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20 61  hat .now there a
25590 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20 74  re two parents t
255a0 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a 57  o each member..W
255b0 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 61  e want to know a
255c0 6c 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73 74  ll living ancest
255d0 6f 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66 72  ors of Alice, fr
255e0 6f 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f 75  om oldest to you
255f0 6e 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e 61  ngest..An ordina
25600 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
25610 65 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61 72  expression, "par
25620 65 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66 69  ent_of", is defi
25630 6e 65 64 20 66 69 72 73 74 2e 20 20 54 68 61 74  ned first.  That
25640 0a 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73  .ordinary CTE is
25650 20 61 20 76 69 65 77 20 74 68 61 74 20 63 61 6e   a view that can
25660 20 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e 64   be used to find
25670 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66 20   all parents of 
25680 61 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e 20  any.individual. 
25690 20 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20 43   That ordinary C
256a0 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64 20  TE is then used 
256b0 69 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f 72  in the "ancestor
256c0 5f 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75 72  _of_alice".recur
256d0 73 69 76 65 20 43 54 45 2e 20 20 54 68 65 20 72  sive CTE.  The r
256e0 65 63 75 72 73 69 76 65 20 43 54 45 20 69 73 20  ecursive CTE is 
256f0 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65  then used in the
25700 20 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a 3c   final query:..<
25710 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
25720 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
25730 20 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d 65    parent_of(name
25740 2c 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20 20  , parent) AS.   
25750 20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 6d   (SELECT name, m
25760 6f 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20 55  om FROM family U
25770 4e 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d 65  NION SELECT name
25780 2c 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69 6c  , dad FROM famil
25790 79 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f 6f  y),.  ancestor_o
257a0 66 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41 53  f_alice(name) AS
257b0 0a 20 20 20 20 28 53 45 4c 45 43 54 20 70 61 72  .    (SELECT par
257c0 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f  ent FROM parent_
257d0 6f 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 41  of WHERE name='A
257e0 6c 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f 4e  lice'.     UNION
257f0 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54   ALL.     SELECT
25800 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72   parent FROM par
25810 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63 65  ent_of JOIN ance
25820 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55 53  stor_of_alice US
25830 49 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45 43  ING(name)).SELEC
25840 54 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46 52  T family.name FR
25850 4f 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  OM ancestor_of_a
25860 6c 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57 48  lice, family. WH
25870 45 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  ERE ancestor_of_
25880 61 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c  alice.name=famil
25890 79 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64 69  y.name.   AND di
258a0 65 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44 45  ed IS NULL. ORDE
258b0 52 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65  R BY born;.</pre
258c0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
258d0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
258e0 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex2</tcl>.<h4
258f0 3e 51 75 65 72 69 65 73 20 41 67 61 69 6e 73 74  >Queries Against
25900 20 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c   A Graph</h4>..<
25910 70 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e 74  p>A version cont
25920 72 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53 29  rol system (VCS)
25930 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20   will typically 
25940 73 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76 69  store the evolvi
25950 6e 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 61  ng.versions of a
25960 20 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64 69   project as a di
25970 72 65 63 74 65 64 20 61 63 79 63 6c 69 63 20 67  rected acyclic g
25980 72 61 70 68 20 28 44 41 47 29 2e 20 20 43 61 6c  raph (DAG).  Cal
25990 6c 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20 6f  l each.version o
259a0 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61 20  f the project a 
259b0 22 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73 69  "checkin".  A si
259c0 6e 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61 6e  ngle.checkin can
259d0 20 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d 6f   have zero or mo
259e0 72 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f 73  re parents.  Mos
259f0 74 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63 65  t checkins (exce
25a00 70 74 20 74 68 65 0a 66 69 72 73 74 29 20 68 61  pt the.first) ha
25a10 76 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72 65  ve a single pare
25a20 6e 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20 63  nt, but in the c
25a30 61 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c 20  ase of a merge, 
25a40 61 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74 20  a checkin.might 
25a50 68 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72 65  have two or thre
25a60 65 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74  e or more parent
25a70 73 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f 20  s.  A schema to 
25a80 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63 68  keep track of.ch
25a90 65 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20 6f  eckins and the o
25aa0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
25ab0 65 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20 6c  ey occur might l
25ac0 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69  ook something li
25ad0 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  ke.this:..<block
25ae0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
25af0 54 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69 6e  TE TABLE checkin
25b00 28 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20 50  (.  id INTEGER P
25b10 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 74  RIMARY KEY,.  mt
25b20 69 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20 74  ime INTEGER -- t
25b30 69 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74 68  imestamp when th
25b40 69 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75 72  is checkin occur
25b50 72 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54 41  red.);.CREATE TA
25b60 42 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d 28  BLE derivedfrom(
25b70 0a 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45 52  .  xfrom INTEGER
25b80 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45   NOT NULL REFERE
25b90 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d 2d  NCES checkin, --
25ba0 20 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e 0a   parent checkin.
25bb0 20 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e 4f    xto INTEGER NO
25bc0 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45  T NULL REFERENCE
25bd0 53 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d 20  S checkin,   -- 
25be0 64 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e 0a  derived checkin.
25bf0 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 66    PRIMARY KEY(xf
25c00 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45 41  rom,xto).);.CREA
25c10 54 45 20 49 4e 44 45 58 20 64 65 72 69 76 65 64  TE INDEX derived
25c20 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65 72  from_back ON der
25c30 69 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66 72  ivedfrom(xto,xfr
25c40 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  om);.</pre></blo
25c50 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69  ckquote>..<p>Thi
25c60 73 20 67 72 61 70 68 20 69 73 20 61 63 79 63 6c  s graph is acycl
25c70 69 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73 75  ic.  And we assu
25c80 6d 65 20 74 68 61 74 20 74 68 65 20 6d 74 69 6d  me that the mtim
25c90 65 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c 64  e of every.child
25ca0 20 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20 6c   checkin is no l
25cb0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74 69  ess than the mti
25cc0 6d 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70 61  me of all its pa
25cd0 72 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c 69  rents.  But.unli
25ce0 6b 65 20 74 68 65 20 65 61 72 6c 69 65 72 20 65  ke the earlier e
25cf0 78 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67 72  xamples, this gr
25d00 61 70 68 20 6d 69 67 68 74 20 68 61 76 65 20 6d  aph might have m
25d10 75 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f 66  ultiple paths of
25d20 0a 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67 74  .differing lengt
25d30 68 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20 74  hs between any t
25d40 77 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70  wo checkins...<p
25d50 3e 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77  >We want to know
25d60 20 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73 74   the twenty most
25d70 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72   recent ancestor
25d80 73 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20 6f  s in time (out o
25d90 66 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73 20  f.the thousands 
25da0 61 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f 66  and thousands of
25db0 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 68   ancestors in th
25dc0 65 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f 72  e whole DAG) for
25dd0 0a 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45 4c  .checkin "@BASEL
25de0 49 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79 20  INE".  (A query 
25df0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
25e00 69 73 20 75 73 65 64 0a 62 79 20 74 68 65 20 3c  is used.by the <
25e10 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77  a href="http://w
25e20 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72  ww.fossil-scm.or
25e30 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20 56  g/">Fossil</a> V
25e40 43 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20 4e  CS to.show the N
25e50 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63   most recent anc
25e60 65 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65 63  estors of a chec
25e70 6b 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  k.  For example:
25e80 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  .<a href="http:/
25e90 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
25ea0 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74  src/timeline?p=t
25eb0 72 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70 3a  runk&n=30">http:
25ec0 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
25ed0 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d  /src/timeline?p=
25ee0 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29  trunk&n=30</a>.)
25ef0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25f00 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
25f10 56 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69 64  VE.  ancestor(id
25f20 2c 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20 20  ,mtime) AS (.   
25f30 20 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69 6d   SELECT id, mtim
25f40 65 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 57  e FROM checkin W
25f50 48 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49 4e  HERE id=@BASELIN
25f60 45 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20  E.    UNION.    
25f70 53 45 4c 45 43 54 20 64 65 72 69 76 65 64 66 72  SELECT derivedfr
25f80 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b 69  om.xfrom, checki
25f90 6e 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46 52  n.mtime.      FR
25fa0 4f 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65 72  OM ancestor, der
25fb0 69 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b 69  ivedfrom, checki
25fc0 6e 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e 63  n.     WHERE anc
25fd0 65 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65 64  estor.id=derived
25fe0 66 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20 20  from.xto.       
25ff0 41 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d 64  AND checkin.id=d
26000 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d  erivedfrom.xfrom
26010 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63  .     ORDER BY c
26020 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53  heckin.mtime DES
26030 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30 0a  C.     LIMIT 20.
26040 20 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f    ).SELECT * FRO
26050 4d 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20 61  M checkin JOIN a
26060 6e 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69 64  ncestor USING(id
26070 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
26080 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20  quote>..<p>.The 
26090 22 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69  "ORDER BY checki
260a0 6e 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74 65  n.mtime DESC" te
260b0 72 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  rm in the recurs
260c0 69 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65 73  ive-select makes
260d0 0a 74 68 65 20 71 75 65 72 79 20 72 75 6e 20 6d  .the query run m
260e0 75 63 68 20 66 61 73 74 65 72 20 62 79 20 70 72  uch faster by pr
260f0 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f 6d  eventing it from
26100 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e 63   following.branc
26110 68 65 73 20 74 68 61 74 20 6d 65 72 67 65 20 63  hes that merge c
26120 68 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e  heckins.from lon
26130 67 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44 45  g ago.  The ORDE
26140 52 20 42 59 20 66 6f 72 63 65 73 20 74 68 65 20  R BY forces the 
26150 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
26160 20 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68 65   to focus.on the
26170 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68 65   most recent che
26180 63 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73 20  ckins, the ones 
26190 77 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f 75  we want.  Withou
261a0 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a 6f  t the ORDER BY.o
261b0 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
261c0 73 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75 6c  select, one woul
261d0 64 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20 63  d be forced to c
261e0 6f 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70 6c  ompute the compl
261f0 65 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75 73  ete set of.thous
26200 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72  ands of ancestor
26210 73 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c 6c  s, sort them all
26220 20 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e 20   by mtime, then 
26230 74 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77 65  take the top twe
26240 6e 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20 42  nty..The ORDER B
26250 59 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73 65  Y essentially se
26260 74 73 20 75 70 20 61 20 70 72 69 6f 72 69 74 79  ts up a priority
26270 20 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72 63   queue that.forc
26280 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65  es the recursive
26290 20 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20 61   query to look a
262a0 74 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  t the most recen
262b0 74 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72 73  t ancestors firs
262c0 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65 20  t,.allowing the 
262d0 75 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63  use of a LIMIT c
262e0 6c 61 75 73 65 20 74 6f 20 72 65 73 74 72 69 63  lause to restric
262f0 74 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20 74  t the scope of t
26300 68 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73 74  he.query to just
26310 20 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f 66   the checkins of
26320 20 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63 6c   interest...<tcl
26330 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69 74  >hd_fragment wit
26340 68 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c  horderby</tcl>.<
26350 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44  h4>Controlling D
26360 65 70 74 68 2d 46 69 72 73 74 20 56 65 72 73 75  epth-First Versu
26370 73 20 42 72 65 61 64 74 68 2d 46 69 72 73 74 20  s Breadth-First 
26380 53 65 61 72 63 68 20 4f 66 20 61 20 54 72 65 65  Search Of a Tree
26390 0a 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59 3c  .Using ORDER BY<
263a0 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45  /h4>..<p>An ORDE
263b0 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 74  R BY clause on t
263c0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
263d0 65 63 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  ect can be used 
263e0 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74 68  to control.wheth
263f0 65 72 20 74 68 65 20 73 65 61 72 63 68 20 6f 66  er the search of
26400 20 61 20 74 72 65 65 20 69 73 20 64 65 70 74 68   a tree is depth
26410 2d 66 69 72 73 74 20 6f 72 20 62 72 65 61 64 74  -first or breadt
26420 68 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c 6c  h-first.  To.ill
26430 75 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c 6c  ustrate, we will
26440 20 75 73 65 20 61 20 76 61 72 69 61 74 69 6f 6e   use a variation
26450 20 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74 61   on the "org" ta
26460 62 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61 6d  ble from an exam
26470 70 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68 6f  ple.above, witho
26480 75 74 20 74 68 65 20 22 68 65 69 67 68 74 22 20  ut the "height" 
26490 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74 68  column, and with
264a0 20 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61 20   some real data 
264b0 69 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63  inserted:..<bloc
264c0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
264d0 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20  ATE TABLE org(. 
264e0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
264f0 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54  RY KEY,.  boss T
26500 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f  EXT REFERENCES o
26510 72 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f 57  rg.) WITHOUT ROW
26520 49 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ID;.INSERT INTO 
26530 6f 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69 63  org VALUES('Alic
26540 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54  e',NULL);.INSERT
26550 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
26560 28 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29 3b  ('Bob','Alice');
26570 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
26580 20 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27 2c   VALUES('Cindy',
26590 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54  'Alice');.INSERT
265a0 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
265b0 28 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b 0a  ('Dave','Bob');.
265c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
265d0 56 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27 42  VALUES('Emma','B
265e0 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ob');.INSERT INT
265f0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46 72  O org VALUES('Fr
26600 65 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49 4e  ed','Cindy');.IN
26610 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
26620 4c 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69 6e  LUES('Gail','Cin
26630 64 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  dy');.</pre></bl
26640 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65  ockquote>..<p>He
26650 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74 6f  re is a query to
26660 20 73 68 6f 77 20 74 68 65 20 74 72 65 65 20 73   show the tree s
26670 74 72 75 63 74 75 72 65 20 69 6e 20 61 20 62 72  tructure in a br
26680 65 61 64 74 68 2d 66 69 72 73 74 20 70 61 74 74  eadth-first patt
26690 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ern:..<blockquot
266a0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
266b0 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61  URSIVE.  under_a
266c0 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29  lice(name,level)
266d0 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
266e0 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20  ('Alice',0).    
266f0 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
26700 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75  LECT org.name, u
26710 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
26720 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72  +1.      FROM or
26730 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69  g JOIN under_ali
26740 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75  ce ON org.boss=u
26750 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a  nder_alice.name.
26760 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 0a       ORDER BY 2.
26770 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74    ).SELECT subst
26780 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31  r('..........',1
26790 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d  ,level*3) || nam
267a0 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69  e FROM under_ali
267b0 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
267c0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
267d0 22 4f 52 44 45 52 20 42 59 20 32 22 20 28 77 68  "ORDER BY 2" (wh
267e0 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73 61  ich means the sa
267f0 6d 65 20 61 73 20 22 4f 52 44 45 52 20 42 59 20  me as "ORDER BY 
26800 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
26810 6c 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69 67  l+1").causes hig
26820 68 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68  her levels in th
26830 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 63  e organization c
26840 68 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c 6c  hart (with small
26850 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65  er "level" value
26860 73 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73 73  s).to be process
26870 65 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c 74  ed first, result
26880 69 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74 68  ing in a breadth
26890 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20 20  -first search.  
268a0 54 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a 0a  The output is:..
268b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
268c0 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e  >.Alice....Bob..
268d0 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61  ..Cindy.......Da
268e0 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e  ve.......Emma...
268f0 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47  ....Fred.......G
26900 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ail.</pre></bloc
26910 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74 20  kquote>..<p>But 
26920 69 66 20 77 65 20 63 68 61 6e 67 65 20 74 68 65  if we change the
26930 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
26940 20 74 6f 20 61 64 64 20 74 68 65 20 22 44 45 53   to add the "DES
26950 43 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68 61  C" modifier, tha
26960 74 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f 77  t will.cause low
26970 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68 65  er levels in the
26980 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28 77   organization (w
26990 69 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76 65  ith larger "leve
269a0 6c 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62 65  l" values) to be
269b0 0a 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74  .processed first
269c0 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69 76   by the recursiv
269d0 65 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c 74  e-select, result
269e0 69 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d 66  ing in a depth-f
269f0 69 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c 62  irst search:..<b
26a00 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
26a10 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
26a20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d   under_alice(nam
26a30 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20  e,level) AS (.  
26a40 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
26a50 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  ,0).    UNION AL
26a60 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67  L.    SELECT org
26a70 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69  .name, under_ali
26a80 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20  ce.level+1.     
26a90 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75   FROM org JOIN u
26aa0 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72  nder_alice ON or
26ab0 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69  g.boss=under_ali
26ac0 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44  ce.name.     ORD
26ad0 45 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43 3c  ER BY 2 <b>DESC<
26ae0 2f 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20 73  /b>.  ).SELECT s
26af0 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e  ubstr('.........
26b00 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c  .',1,level*3) ||
26b10 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72   name FROM under
26b20 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
26b30 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
26b40 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68  The output of th
26b50 69 73 20 72 65 76 69 73 65 64 20 71 75 65 72 79  is revised query
26b60 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
26b70 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e  e><pre>.Alice...
26b80 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a  .Bob.......Dave.
26b90 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69  ......Emma....Ci
26ba0 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e  ndy.......Fred..
26bb0 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e  .....Gail.</pre>
26bc0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
26bd0 70 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45 52  p>When the ORDER
26be0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d   BY clause is om
26bf0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72  itted from the r
26c00 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
26c10 20 74 68 65 0a 71 75 65 75 65 20 62 65 68 61 76   the.queue behav
26c20 65 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77 68  es as a FIFO, wh
26c30 69 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ich results in a
26c40 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73   breadth-first s
26c50 65 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64  earch....<tcl>hd
26c60 5f 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65 6c  _fragment mandel
26c70 62 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74 68  brot {compute th
26c80 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65 74  e Mandelbrot set
26c90 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c  }</tcl>.<h4>Outl
26ca0 61 6e 64 69 73 68 20 52 65 63 75 72 73 69 76 65  andish Recursive
26cb0 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c   Query Examples<
26cc0 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h4>..<p>The fol
26cd0 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f 6d  lowing query com
26ce0 70 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78 69  putes an approxi
26cf0 6d 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d 61  mation of the Ma
26d00 6e 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e 64  ndelbrot Set.and
26d10 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65 73   outputs the res
26d20 75 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72 74  ult as ASCII-art
26d30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26d40 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
26d50 49 56 45 0a 20 20 78 61 78 69 73 28 78 29 20 41  IVE.  xaxis(x) A
26d60 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29 20  S (VALUES(-2.0) 
26d70 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
26d80 20 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61 78   x+0.05 FROM xax
26d90 69 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31 2e  is WHERE x&lt;1.
26da0 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20 41  2),.  yaxis(y) A
26db0 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29 20  S (VALUES(-1.0) 
26dc0 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
26dd0 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78 69   y+0.1 FROM yaxi
26de0 73 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e 30  s WHERE y&lt;1.0
26df0 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78 2c  ),.  m(iter, cx,
26e00 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28 0a   cy, x, y) AS (.
26e10 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c      SELECT 0, x,
26e20 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f   y, 0.0, 0.0 FRO
26e30 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a 20  M xaxis, yaxis. 
26e40 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
26e50 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20   SELECT iter+1, 
26e60 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20  cx, cy, x*x-y*y 
26e70 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20  + cx, 2.0*x*y + 
26e80 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20 20  cy FROM m .     
26e90 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a 79  WHERE (x*x + y*y
26ea0 29 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20 69  ) &lt; 4.0 AND i
26eb0 74 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a 20  ter&lt;28.  ),. 
26ec0 20 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79   m2(iter, cx, cy
26ed0 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
26ee0 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78 2c  T max(iter), cx,
26ef0 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50   cy FROM m GROUP
26f00 20 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a   BY cx, cy.  ),.
26f10 20 20 61 28 74 29 20 41 53 20 28 0a 20 20 20 20    a(t) AS (.    
26f20 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e  SELECT group_con
26f30 63 61 74 28 20 73 75 62 73 74 72 28 27 20 2e 2b  cat( substr(' .+
26f40 2a 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f  *#', 1+min(iter/
26f50 37 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a 20  7,4), 1), '') . 
26f60 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50     FROM m2 GROUP
26f70 20 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45 43   BY cy.  ).SELEC
26f80 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72  T group_concat(r
26f90 74 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46  trim(t),x'0a') F
26fa0 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ROM a;.</pre></b
26fb0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49  lockquote>..<p>I
26fc0 6e 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68  n this query, th
26fd0 65 20 22 78 61 78 69 73 22 20 61 6e 64 20 22 79  e "xaxis" and "y
26fe0 61 78 69 73 22 20 43 54 45 73 20 64 65 66 69 6e  axis" CTEs defin
26ff0 65 20 74 68 65 20 67 72 69 64 20 6f 66 20 70 6f  e the grid of po
27000 69 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20 74  ints for.which t
27010 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65  he Mandelbrot Se
27020 74 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78  t will be approx
27030 69 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72 6f  imated.  Each ro
27040 77 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65 72  w in the."m(iter
27050 2c 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54 45  ,cx,cy,x,y)" CTE
27060 20 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74 65   means that afte
27070 72 20 22 69 74 65 72 22 20 69 74 65 72 61 74 69  r "iter" iterati
27080 6f 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62  ons, the Mandelb
27090 72 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73 74  rot.iteration st
270a0 61 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79 20  arting at cx,cy 
270b0 68 61 73 20 72 65 61 63 68 65 64 20 70 6f 69 6e  has reached poin
270c0 74 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62  t x,y.  The numb
270d0 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
270e0 0a 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65  .in this example
270f0 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32   is limited to 2
27100 38 20 28 77 68 69 63 68 20 73 65 76 65 72 65 6c  8 (which severel
27110 79 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65 73  y limits the res
27120 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63  olution of.the c
27130 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20  omputation, but 
27140 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 66 6f  is sufficient fo
27150 72 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e  r low-resolution
27160 20 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70 75   ASCII-art outpu
27170 74 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65 72  t)..The "m2(iter
27180 2c 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f 6c  ,cx,cy)" CTE hol
27190 64 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ds the maximum n
271a0 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
271b0 6f 6e 73 20 72 65 61 63 68 65 64 20 77 68 65 6e  ons reached when
271c0 0a 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f 69  .starting at poi
271d0 6e 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c  nt cx,cy..Finall
271e0 79 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  y, each row in t
271f0 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68 6f  he "a(t)" CTE ho
27200 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77 68  lds a string .wh
27210 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ich is a single 
27220 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70  line of the outp
27230 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54 68  ut ASCII-art..Th
27240 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
27250 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a 75  nt at the end ju
27260 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20 22  st queries the "
27270 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69 65  a" CTE to.retrie
27280 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20  ve all lines of 
27290 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62  ASCII-art, one b
272a0 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69  y one...<p>Runni
272b0 6e 67 20 74 68 65 20 71 75 65 72 79 20 61 62 6f  ng the query abo
272c0 76 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20  ve in an SQLite 
272d0 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68  [command-line sh
272e0 65 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20  ell] results.in 
272f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75  the following ou
27300 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tput:..<blockquo
27310 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20  te><pre>.       
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
27340 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  .#.             
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27360 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20        ..#*...   
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27390 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  +####+..        
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
273c0 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20  ....   +.       
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23      ..##+*######
273f0 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20  ####+.++++.     
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27410 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23       .+.########
27420 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
27430 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
27440 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
27450 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
27460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27470 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
27480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27490 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
274a0 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23  ...+#######++###
274b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274c0 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20  ####..          
274d0 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
274e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274f0 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23  ######.. #######
27500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27520 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20  ######....      
27530 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23      ....+*######
27540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27550 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20  ##########..    
27560 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23           ...+###
27570 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23  ####++##########
27580 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20  #############.. 
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
275a0 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
275b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
275c0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
275d0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23  .............+##
275e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275f0 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20  #+.+.           
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27610 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +.##############
27620 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27640 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23    ..##+*########
27650 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20  ##+.++++.       
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
27680 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23             ..+##
276b0 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20          ..#*... 
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20     ....#.       
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a               +..
27730 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
27740 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  te>..<tcl>hd_fra
27750 67 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f  gment sudoku {so
27760 6c 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c  lve Sudoku puzzl
27770 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68  es} </tcl>.<p>Th
27780 69 73 20 6e 65 78 74 20 71 75 65 72 79 20 73 6f  is next query so
27790 6c 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70 75  lves a Sudoku pu
277a0 7a 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74 65  zzle.  The state
277b0 20 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20 69   of the puzzle i
277c0 73 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s.defined by an 
277d0 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72  81-character str
277e0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
277f0 61 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66 72  ading entries fr
27800 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f  om the.puzzle bo
27810 78 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72 6f  x row by row fro
27820 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
27830 61 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f  and then from to
27840 70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61  p to bottom..Bla
27850 6e 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74 68  nk squares in th
27860 65 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e  e puzzle are den
27870 6f 74 65 64 20 62 79 20 61 20 22 2e 22 20 63 68  oted by a "." ch
27880 61 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73 20  aracter.  .Thus 
27890 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67  the input string
278a0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
278b0 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e  53..7....6..195.
278c0 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36  ...98....6.8...6
278d0 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e  ...34..8.3..17..
278e0 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e  .2...6.6....28..
278f0 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37  ..419..5....8..7
27900 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  9.</blockquote>.
27910 0a 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20  .<p>Corresponds 
27920 74 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65  to a puzzle like
27930 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75   this:..<blockqu
27940 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
27950 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69  er="1" cellpaddi
27960 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="5">.<tr><td>
27970 35 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20  5<td>3<td> <td> 
27980 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>7<td> <td> <
27990 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td> <td>.<tr><td
279a0 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >6<td> <td> <td>
279b0 31 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20  1<td>9<td>5<td> 
279c0 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td> <td>.<tr><t
279d0 64 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64  d> <td>9<td>8<td
279e0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
279f0 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c   <td>6<td>.<tr><
27a00 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>8<td> <td> <t
27a10 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64  d> <td>6<td> <td
27a20 3e 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72  > <td> <td>3.<tr
27a30 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20  ><td>4<td> <td> 
27a40 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c  <td>8<td> <td>3<
27a50 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c  td> <td> <td>1.<
27a60 74 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64  tr><td>7<td> <td
27a70 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e  > <td> <td>2<td>
27a80 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36   <td> <td> <td>6
27a90 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c  .<tr><td> <td>6<
27aa0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27ab0 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64  d> <td>2<td>8<td
27ac0 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20  >.<tr><td> <td> 
27ad0 3c 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c  <td> <td>4<td>1<
27ae0 74 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>9<td> <td> <t
27af0 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64  d>5.<tr><td> <td
27b00 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27b10 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  8<td> <td> <td>7
27b20 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  <td>9.</table>.<
27b30 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
27b40 3e 54 68 69 73 20 69 73 20 74 68 65 20 71 75 65  >This is the que
27b50 72 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20 74  ry that solves t
27b60 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f  he puzzle:..<blo
27b70 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
27b80 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 69  TH RECURSIVE.  i
27b90 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 0a 20  nput(sud) AS (. 
27ba0 20 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e 37     VALUES('53..7
27bb0 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
27bc0 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
27bd0 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
27be0 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
27bf0 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20  ..5....8..79'). 
27c00 20 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c 20   ),.  digits(z, 
27c10 6c 70 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c  lp) AS (.    VAL
27c20 55 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20 20  UES('1', 1).    
27c30 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
27c40 0a 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20 41  .    CAST(lp+1 A
27c50 53 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46 52  S TEXT), lp+1 FR
27c60 4f 4d 20 64 69 67 69 74 73 20 57 48 45 52 45 20  OM digits WHERE 
27c70 6c 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20 78  lp&lt;9.  ),.  x
27c80 28 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20 20  (s, ind) AS (.  
27c90 20 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69 6e    SELECT sud, in
27ca0 73 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46 52  str(sud, '.') FR
27cb0 4f 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e 49  OM input.    UNI
27cc0 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43  ON ALL.    SELEC
27cd0 54 0a 20 20 20 20 20 20 73 75 62 73 74 72 28 73  T.      substr(s
27ce0 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a  , 1, ind-1) || z
27cf0 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e   || substr(s, in
27d00 64 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73 74  d+1),.      inst
27d10 72 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20  r( substr(s, 1, 
27d20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73  ind-1) || z || s
27d30 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c  ubstr(s, ind+1),
27d40 20 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f 4d   '.' ).     FROM
27d50 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a 0a   x, digits AS z.
27d60 20 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30 0a      WHERE ind>0.
27d70 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45 58        AND NOT EX
27d80 49 53 54 53 20 28 0a 20 20 20 20 20 20 20 20 20  ISTS (.         
27d90 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20     SELECT 1.    
27da0 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 64            FROM d
27db0 69 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20 20  igits AS lp.    
27dc0 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 7a           WHERE z
27dd0 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
27de0 28 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20 6c  (ind-1)/9)*9 + l
27df0 70 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 20  p, 1).          
27e00 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73        OR z.z = s
27e10 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
27e20 29 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39 20  )%9) + (lp-1)*9 
27e30 2b 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20 20  + 1, 1).        
27e40 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d          OR z.z =
27e50 20 73 75 62 73 74 72 28 73 2c 20 28 28 28 69 6e   substr(s, (((in
27e60 64 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20 33  d-1)/3) % 3) * 3
27e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e80 20 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e 64           + ((ind
27e90 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20 6c  -1)/27) * 27 + l
27ea0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
27eb0 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70            + ((lp
27ec0 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29  -1) / 3) * 6, 1)
27ed0 0a 20 20 20 20 20 20 20 20 20 29 0a 20 20 29 0a  .         ).  ).
27ee0 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78 20  SELECT s FROM x 
27ef0 57 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70  WHERE ind=0;.</p
27f00 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
27f10 0a 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74 22  ..<p>The "input"
27f20 20 43 54 45 20 64 65 66 69 6e 65 73 20 74 68 65   CTE defines the
27f30 20 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a 54   input puzzle..T
27f40 68 65 20 22 64 69 67 69 74 73 22 20 43 54 45 20  he "digits" CTE 
27f50 64 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65 20  defines a table 
27f60 74 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20 64  that holds all d
27f70 69 67 69 74 73 20 62 65 74 77 65 65 6e 20 31 20  igits between 1 
27f80 61 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b 20  and 9..The work 
27f90 6f 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20 70  of solving the p
27fa0 75 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74 61  uzzle is underta
27fb0 6b 65 6e 20 62 79 20 74 68 65 20 22 78 22 20 43  ken by the "x" C
27fc0 54 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e 20  TE..An entry in 
27fd0 78 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20 74  x(s,ind) means t
27fe0 68 61 74 20 74 68 65 20 38 31 2d 63 68 61 72 61  hat the 81-chara
27ff0 63 74 65 72 20 73 74 72 69 6e 67 20 22 73 22 20  cter string "s" 
28000 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b  is a valid.sudok
28010 75 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61 73  u puzzle (it has
28020 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20 61   no conflicts) a
28030 6e 64 20 74 68 61 74 20 74 68 65 20 66 69 72 73  nd that the firs
28040 74 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61 63  t unknown charac
28050 74 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74 69  ter.is at positi
28060 6f 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e 64  on "ind", or ind
28070 3d 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72 61  ==0 if all chara
28080 63 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20 61  cter positions a
28090 72 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54 68  re filled in..Th
280a0 65 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69 73  e goal, then, is
280b0 20 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74 72   to compute entr
280c0 69 65 73 20 66 6f 72 20 22 78 22 20 77 69 74 68  ies for "x" with
280d0 20 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e 0a   an "ind" of 0..
280e0 0a 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20 77  .<p>The solver w
280f0 6f 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20 6e  orks by adding n
28100 65 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  ew entries to th
28110 65 20 22 78 22 20 72 65 63 75 72 73 69 76 65 20  e "x" recursive 
28120 74 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72 69  table..Given pri
28130 6f 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65 20  or entries, the 
28140 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
28150 20 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20 69   tries to fill i
28160 6e 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a 70  n a single new.p
28170 6f 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c 6c  osition with all
28180 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20   values between 
28190 31 20 61 6e 64 20 39 20 74 68 61 74 20 61 63 74  1 and 9 that act
281a0 75 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74 68  ually work in th
281b0 61 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54 68  at.position.  Th
281c0 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22 4e  e complicated "N
281d0 4f 54 20 45 58 49 53 54 53 22 20 73 75 62 71 75  OT EXISTS" subqu
281e0 65 72 79 20 69 73 20 74 68 65 20 6d 61 67 69 63  ery is the magic
281f0 20 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f 75   that.figures ou
28200 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  t whether or not
28210 20 65 61 63 68 20 63 61 6e 64 69 64 61 74 65 20   each candidate 
28220 22 73 22 20 73 74 72 69 6e 67 20 69 73 20 61 20  "s" string is a 
28230 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a  valid.sudoku puz
28240 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e  zle or not...<p>
28250 54 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65 72  The final answer
28260 20 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f 6f   is found by loo
28270 6b 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69 6e  king for a strin
28280 67 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a 49  g with ind==0..I
28290 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73  f the original s
282a0 75 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64 69  udoku problem di
282b0 64 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e 69  d not have a uni
282c0 71 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74 68  que solution, th
282d0 65 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69 6c  en.the query wil
282e0 6c 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f 73  l return all pos
282f0 73 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73 2e  sible solutions.
28300 20 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61    If the origina
28310 6c 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75 6e  l problem.was un
28320 73 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20 6e  solvable, then n
28330 6f 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 72  o rows will be r
28340 65 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68 69  eturned.  In thi
28350 73 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69 71  s case, the uniq
28360 75 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a 3c  ue.answer is:..<
28370 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34 36  blockquote>.5346
28380 37 38 39 31 32 36 37 32 31 39 35 33 34 38 31 39  7891267219534819
28390 38 33 34 32 35 36 37 38 35 39 37 36 31 34 32 33  8342567859761423
283a0 34 32 36 38 35 33 37 39 31 37 31 33 39 32 34 38  4268537917139248
283b0 35 36 39 36 31 35 33 37 32 38 34 32 38 37 34 31  5696153728428741
283c0 39 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c 2f  9635345286179.</
283d0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
283e0 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61 73  The solution was
283f0 20 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65 73   computed in les
28400 73 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c 69  s than 300 milli
28410 73 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f 64  seconds on a mod
28420 65 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e 2e  ern.workstation.
28430 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e  ..<h3>Limitation
28440 73 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f 68  s And Caveats</h
28450 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  3>..<ul>.<li><p>
28460 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65  .The WITH clause
28470 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
28480 77 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54 45  within a [CREATE
28490 20 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c   TRIGGER]..<li><
284a0 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75  p>.The WITH clau
284b0 73 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 61  se must appear a
284c0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
284d0 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 5b  of a top-level [
284e0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
284f0 74 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67 69  t.or at the begi
28500 6e 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71 75  nning of a subqu
28510 65 72 79 2e 20 20 54 68 65 20 57 49 54 48 20 63  ery.  The WITH c
28520 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
28530 70 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68 65  prepended to.the
28540 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73 65   second or subse
28550 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61  quent SELECT sta
28560 74 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d  tement of a [com
28570 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a 3c  pound select]..<
28580 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a 31  li><p>.The SQL:1
28590 39 39 39 20 73 70 65 63 20 72 65 71 75 69 72 65  999 spec require
285a0 73 20 74 68 61 74 20 74 68 65 20 52 45 43 55 52  s that the RECUR
285b0 53 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f 6c  SIVE keyword fol
285c0 6c 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79 0a  low WITH in any.
285d0 57 49 54 48 20 63 6c 61 75 73 65 20 74 68 61 74  WITH clause that
285e0 20 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63 75   includes a recu
285f0 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
28600 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  le expression.  
28610 48 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f 6d  However, for.com
28620 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
28630 53 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f 72  SqlServer and Or
28640 61 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f 65  acle, SQLite doe
28650 73 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74 68  s not enforce th
28660 69 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a  is rule..</ul>..
28670 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
28680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
286a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
286b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
286c0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
286d0 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
286e0 45 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63 75  ECT query}..Recu
286f0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
28700 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c  am select-stmt.<
28710 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53  /tcl>...<p>The S
28720 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28730 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72 79  is used to query
28740 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
28750 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20  The.result of a 
28760 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f  SELECT is zero o
28770 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64  r more rows of d
28780 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20 72  ata where each r
28790 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e  ow.has a fixed n
287a0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
287b0 2e 20 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  .  A SELECT stat
287c0 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 6d  ement does not m
287d0 61 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73 20  ake.any changes 
287e0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  to the database.
287f0 0a 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65 63  ..<p>The "[selec
28800 74 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78 20  t-stmt]" syntax 
28810 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61 74  diagram above at
28820 74 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20 61  tempts to show a
28830 73 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53 45  s much of the.SE
28840 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73  LECT statement s
28850 79 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62 6c  yntax as possibl
28860 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64 69  e in a single di
28870 61 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20 73  agram, because s
28880 6f 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e 64  ome readers.find
28890 20 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20 20   that helpful.  
288a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b  The following "[
288b0 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d  factored-select-
288c0 73 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c 74  stmt]" is an alt
288d0 65 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78 20  ernative.syntax 
288e0 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 65 78  diagrams that ex
288f0 70 72 65 73 73 65 73 20 74 68 65 20 73 61 6d 65  presses the same
28900 20 73 79 6e 74 61 78 20 62 75 74 20 74 72 69 65   syntax but trie
28910 73 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20 73  s to break the s
28920 79 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74 6f  yntax .down into
28930 20 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73 2e   smaller chunks.
28940 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
28950 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 2d  eBubbleDiagram -
28960 2d 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64 65  -initially-hidde
28970 6e 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63  n factored-selec
28980 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f  t-stmt select-co
28990 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f  re.</tcl>..<p>No
289a0 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72  te that there ar
289b0 65 20 70 61 74 68 73 20 74 68 72 6f 75 67 68 20  e paths through 
289c0 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
289d0 61 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f 74  ams that.are not
289e0 20 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61 63   allowed in prac
289f0 74 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61 6d  tice.  Some exam
28a00 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41  ples:.<ul>.<li>A
28a10 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
28a20 20 63 61 6e 20 62 65 20 74 68 65 20 66 69 72 73   can be the firs
28a30 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20 5b  t element in a [
28a40 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
28a50 0a 20 20 20 20 74 68 61 74 20 75 73 65 73 20 61  .    that uses a
28a60 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c 20   [WITH] clause, 
28a70 62 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53 45  but a [simple SE
28a80 4c 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73 69  LECT] that consi
28a90 73 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74 20  sts of.    just 
28aa0 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73  a [VALUES] claus
28ab0 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 63  e cannot be prec
28ac0 65 64 65 64 20 62 79 20 61 20 5b 57 49 54 48 5d  eded by a [WITH]
28ad0 20 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68 65   clause..<li>The
28ae0 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20 6d   [WITH] clause m
28af0 75 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ust occur on the
28b00 20 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f 66   first SELECT of
28b10 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
28b20 45 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61 6e  ECT]..    It can
28b30 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f  not follow a [co
28b40 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d  mpound-operator]
28b50 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61 6e  ..</ul>.These an
28b60 64 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72 20  d other similar 
28b70 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
28b80 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62 65  ons are describe
28b90 64 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a 0a  d in the text...
28ba0 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
28bb0 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 6d  atement is the m
28bc0 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64 20  ost complicated 
28bd0 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 53  command in the S
28be0 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20  QL language..To 
28bf0 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69 70  make the descrip
28c00 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20 66  tion easier to f
28c10 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74  ollow, some of t
28c20 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c 6f  he passages belo
28c30 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20 77  w describe.the w
28c40 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74 75  ay the data retu
28c50 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54  rned by a SELECT
28c60 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
28c70 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73 65  termined as a se
28c80 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20 49  ries of.steps. I
28c90 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
28ca0 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20 74  o keep in mind t
28cb0 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72 65  hat this is pure
28cc0 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65 20  ly illustrative 
28cd0 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e 65  -.in practice ne
28ce0 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f 72  ither SQLite nor
28cf0 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 65   any other SQL e
28d00 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72 65  ngine is require
28d10 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69  d to follow .thi
28d20 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 73  s or any other s
28d30 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73 2e  pecific process.
28d40 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
28d50 6e 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74 20  nt simpleselect 
28d60 7b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d 3c  {simple SELECT}<
28d70 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65  /tcl>.<h3>Simple
28d80 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69   Select Processi
28d90 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ng</h3>..<p>The 
28da0 63 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43 54  core of a SELECT
28db0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20   statement is a 
28dc0 22 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22 20  "simple SELECT" 
28dd0 73 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73 65  shown by the.[se
28de0 6c 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20 5b  lect-core] and [
28df0 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74  simple-select-st
28e00 6d 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67 72  mt] syntax diagr
28e10 61 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e 20  ams below.  .In 
28e20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20 53  practice, most S
28e30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
28e40 20 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   are simple SELE
28e50 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a  CT statements...
28e60 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42  <tcl>.RecursiveB
28e70 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6d  ubbleDiagram sim
28e80 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20  ple-select-stmt 
28e90 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63  select-core.</tc
28ea0 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69 6e  l>..<p>Generatin
28eb0 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  g the results of
28ec0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
28ed0 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72  .statement is pr
28ee0 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75  esented as a fou
28ef0 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20 69  r step process i
28f00 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f  n the descriptio
28f10 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20  n below:..<ol>. 
28f20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63   <li> <p>[FROM c
28f30 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e  lause] processin
28f40 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  g: The input dat
28f50 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  a for the simple
28f60 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20   SELECT is.     
28f70 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68    determined. Th
28f80 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20  e input data is 
28f90 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c  either implicitl
28fa0 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77  y a single row w
28fb0 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c  ith 0.       col
28fc0 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20 69  umns (if there i
28fd0 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65  s no FROM clause
28fe0 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e  ) or is determin
28ff0 65 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a 20  ed by the FROM. 
29000 20 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20 20        clause..  
29010 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63  <li> <p>[WHERE c
29020 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e  lause] processin
29030 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  g: The input dat
29040 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73  a is filtered us
29050 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20  ing the WHERE.  
29060 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72       clause expr
29070 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e  ession.  .  <li>
29080 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52   <p>[GROUP BY|GR
29090 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61  OUP BY, HAVING a
290a0 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  nd result-column
290b0 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f   expression] pro
290c0 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20  cessing: .      
290d0 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   The set of resu
290e0 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75  lt rows is compu
290f0 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69  ted by aggregati
29100 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f  ng the data acco
29110 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20  rding to.       
29120 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61  any GROUP BY cla
29130 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74  use and calculat
29140 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73  ing the result-s
29150 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66  et expressions f
29160 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f  or the.       ro
29170 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  ws of the filter
29180 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
29190 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44  .  .  <li> <p>[D
291a0 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54  ISTINCT|DISTINCT
291b0 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72  /ALL keyword] pr
291c0 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65  ocessing: If the
291d0 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c   query is a "SEL
291e0 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49  ECT.       DISTI
291f0 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c  NCT" query, dupl
29200 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
29210 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
29220 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
29230 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ws..</ol>..<p>Th
29240 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65  ere are two type
29250 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45  s of simple SELE
29260 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61  CT statement - a
29270 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f  ggregate and .no
29280 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
29290 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53  ies. ^A simple S
292a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
292b0 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
292c0 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74  query if.it cont
292d0 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52  ains either a GR
292e0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72  OUP BY clause or
292f0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
29300 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
29310 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73  .in the result-s
29320 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  et. ^Otherwise, 
29330 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  if a simple SELE
29340 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61  CT contains no a
29350 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f  ggregate.functio
29360 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
29370 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61   clause, it is a
29380 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
29390 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20  uery...<p><b>1. 
293a0 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66  Determination of
293b0 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f   input data (FRO
293c0 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  M clause process
293d0 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ing).</b>.<tcl>h
293e0 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63  d_fragment fromc
293f0 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  lause</tcl>.<tcl
29400 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52  >hd_keywords {FR
29410 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  OM clause}</tcl>
29420 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64  ..<p>The input d
29430 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69  ata used by a si
29440 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72  mple SELECT quer
29450 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69  y is a set of <i
29460 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63  >N</i> rows .eac
29470 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d  h <i>M</i> colum
29480 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49  ns wide...<p>^(I
29490 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  f the FROM claus
294a0 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
294b0 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  m a simple SELEC
294c0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  T statement, the
294d0 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74  n the .input dat
294e0 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20  a is implicitly 
294f0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72  a single row zer
29500 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e  o columns wide)^
29510 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d   (i.e. <i>N</i>=
29520 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30  1 and.<i>M</i>=0
29530 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d  )...<p>If a FROM
29540 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
29550 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f  fied, the data o
29560 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65  n which a simple
29570 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70   SELECT query.op
29580 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f  erates comes fro
29590 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  m the one or mor
295a0 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
295b0 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73  ueries (SELECT s
295c0 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72  tatements.in par
295d0 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66  enthesis) specif
295e0 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ied following th
295f0 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20  e FROM keyword. 
29600 5e 41 20 73 75 62 71 75 65 72 79 20 73 70 65 63  ^A subquery spec
29610 69 66 69 65 64 0a 69 6e 20 74 68 65 20 74 61 62  ified.in the tab
29620 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72 79 20 66  le-or-subquery f
29630 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
29640 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20 0a 73  M clause in a .s
29650 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
29660 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65  tement is.handle
29670 64 20 61 73 20 69 66 20 69 74 20 77 61 73 20 61  d as if it was a
29680 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
29690 67 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  g the data retur
296a0 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
296b0 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 73 74   the.subquery st
296c0 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63  atement. ^Each c
296d0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62  olumn of the sub
296e0 71 75 65 72 79 20 68 61 73 20 74 68 65 0a 5b 63  query has the.[c
296f0 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69  ollation|collati
29700 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64  on sequence] and
29710 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74   [affinity] of t
29720 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
29730 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74   expression.in t
29740 68 65 20 73 75 62 71 75 65 72 79 20 73 74 61 74  he subquery stat
29750 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  ement...<p>^If t
29760 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73  here is only a s
29770 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 73  ingle table or s
29780 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
29790 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ROM.clause, then
297a0 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
297b0 75 73 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  used by the SELE
297c0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
297d0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
297e0 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e  the.named table.
297f0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
29800 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c  re than one tabl
29810 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
29820 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65   FROM clause.the
29830 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  n the contents o
29840 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64  f all tables and
29850 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73 0a 61  /or subqueries.a
29860 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61  re joined into a
29870 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20   single dataset 
29880 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
29890 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
298a0 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45  to operate on..E
298b0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64  xactly how the d
298c0 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20  ata is combined 
298d0 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73  depends on the s
298e0 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70  pecific [join-op
298f0 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69  erator] and.[joi
29900 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73  n-constraint] us
29910 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68  ed to connect th
29920 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
29930 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e  ueries together.
29940 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69  ..<p>All joins i
29950 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73  n SQLite are bas
29960 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73  ed on the cartes
29970 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
29980 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
29990 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
299a0 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66   ^The columns of
299b0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
299c0 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61  roduct dataset a
299d0 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61  re, in .order, a
299e0 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ll the columns o
299f0 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
29a00 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64  dataset followed
29a10 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75   by all the colu
29a20 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74  mns.of the right
29a30 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e  -hand dataset. ^
29a40 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69  There is a row i
29a50 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
29a60 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a  product dataset.
29a70 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e  formed by combin
29a80 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20  ing each unique 
29a90 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61  combination of a
29aa0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65   row from the le
29ab0 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67  ft-hand .and rig
29ac0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
29ad0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
29ae0 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d  ds, if the left-
29af0 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e  hand dataset con
29b00 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75  sists of.<i>N<su
29b10 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
29b20 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
29b30 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75  rows of .<i>M<su
29b40 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
29b50 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
29b60 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65  columns, and the
29b70 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
29b80 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e  set of.<i>N<sub>
29b90 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
29ba0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72  all></sub></i> r
29bb0 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e  ows of.<i>M<sub>
29bc0 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
29bd0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63  all></sub></i> c
29be0 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
29bf0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
29c00 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
29c10 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d  of .<i>N<sub><sm
29c20 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e  all>left</small>
29c30 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e 3c 73  </sub>&times;N<s
29c40 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c  ub><small>right<
29c50 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
29c60 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e  >.rows, each con
29c70 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75  taining .<i>M<su
29c80 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
29c90 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75  mall></sub>+M<su
29ca0 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
29cb0 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
29cc0 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e   columns.)^..<p>
29cd0 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  ^If the join-ope
29ce0 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53 53 20  rator is "CROSS 
29cf0 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f  JOIN", "INNER JO
29d00 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61  IN", "JOIN" or a
29d10 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64   comma.(",") and
29d20 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20   there is no ON 
29d30 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c  or USING clause,
29d40 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
29d50 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a   of the join is.
29d60 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65  simply the carte
29d70 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
29d80 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
29d90 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
29da0 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65 72 61  . .If join-opera
29db0 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20 4f 4e  tor does have ON
29dc0 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
29dd0 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68 61 6e  s, those are han
29de0 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  dled according t
29df0 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o.the following 
29e00 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a  bullet points:..
29e10 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  <ul>.  <li> <p>^
29e20 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20  (If there is an 
29e30 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e 20 74  ON clause then t
29e40 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e  he ON expression
29e50 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c 75   is.       evalu
29e60 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
29e70 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69  w of the cartesi
29e80 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20  an product as a 
29e90 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e  .       [boolean
29ea0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e   expression]. On
29eb0 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ly rows for whic
29ec0 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  h the expression
29ed0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a 20   evaluates to . 
29ee0 20 20 20 20 20 20 74 72 75 65 20 61 72 65 20 69        true are i
29ef0 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
29f00 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c   dataset.)^..  <
29f10 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72 65  li> <p>^If there
29f20 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61 75   is a USING clau
29f30 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65  se.       then e
29f40 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
29f50 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65  n names specifie
29f60 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
29f70 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f 20  the datasets to 
29f80 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68 65  .       both the
29f90 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
29fa0 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  of the join-oper
29fb0 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61 63 68  ator. ^(For each
29fc0 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64 0a 20   pair of named. 
29fd0 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74        columns, t
29fe0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c  he expression "l
29ff0 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73  hs.X = rhs.X" is
2a000 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2a010 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20  ach row of.     
2a020 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20    the cartesian 
2a030 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f  product as a [bo
2a040 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2a050 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2a060 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 61 6c   which.       al
2a070 6c 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  l such expressio
2a080 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ns evaluates to 
2a090 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2a0a0 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20  d from the.     
2a0b0 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e 20    result set.)^ 
2a0c0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
2a0d0 76 61 6c 75 65 73 20 61 73 20 61 20 72 65 73 75  values as a resu
2a0e0 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20 63 6c  lt of a USING cl
2a0f0 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20 20 20  ause, the.      
2a100 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f   normal rules fo
2a110 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e  r handling affin
2a120 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  ities, collation
2a130 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 4e   sequences and N
2a140 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c 75 65  ULL.       value
2a150 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73  s in comparisons
2a160 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c   apply. ^The col
2a170 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64 61 74  umn from the dat
2a180 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20 20 20  aset on the.    
2a190 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64     left-hand sid
2a1a0 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  e of the join-op
2a1b0 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69 64  erator is consid
2a1c0 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20 74 68  ered to be on th
2a1d0 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20 20  e left-hand.    
2a1e0 20 20 20 73 69 64 65 20 6f 66 20 74 68 65 20 63     side of the c
2a1f0 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
2a200 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20 70  or (=) for the p
2a210 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61  urposes of colla
2a220 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73 65 71  tion .       seq
2a230 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69 6e 69  uence and affini
2a240 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a  ty precedence...
2a250 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65         <p>^For e
2a260 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f 6c 75  ach pair of colu
2a270 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
2a280 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  y a USING clause
2a290 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20  , the column.   
2a2a0 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72 69 67      from the rig
2a2b0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
2a2c0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
2a2d0 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74 61 73  the joined datas
2a2e0 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20 20 20  et. ^This .     
2a2f0 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 64 69    is the only di
2a300 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2a310 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20   a USING clause 
2a320 61 6e 64 20 69 74 73 20 65 71 75 69 76 61 6c 65  and its equivale
2a330 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e  nt ON.       con
2a340 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e  straint...  <li>
2a350 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e 41 54   <p>^(If the NAT
2a360 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69 73 20  URAL keyword is 
2a370 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  in the join-oper
2a380 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20 20 20  ator then an.   
2a390 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49      implicit USI
2a3a0 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64 64  NG clause is add
2a3b0 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63  ed to the join-c
2a3c0 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20  onstraints. The 
2a3d0 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20  implicit.       
2a3e0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e  USING clause con
2a3f0 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68  tains each of th
2a400 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
2a410 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f  hat appear in bo
2a420 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65  th.       the le
2a430 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2a440 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73  d input datasets
2a450 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74  .)^ ^If the left
2a460 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
2a470 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61 74         input dat
2a480 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f  asets feature no
2a490 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e   common column n
2a4a0 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e  ames, then the N
2a4b0 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20  ATURAL keyword. 
2a4c0 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66        has no eff
2a4d0 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  ect on the resul
2a4e0 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20  ts of the join. 
2a4f0 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63  ^A USING or ON c
2a500 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20  lause may.      
2a510 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f   not be added to
2a520 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65   a join that spe
2a530 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55 52  cifies the NATUR
2a540 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c  AL keyword...  <
2a550 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20  li> <p>^(If the 
2a560 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2a570 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f   a "LEFT JOIN" o
2a580 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  r "LEFT OUTER JO
2a590 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20 20 20  IN", then.      
2a5a0 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68   after.       th
2a5b0 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69  e ON or USING fi
2a5c0 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20  ltering clauses 
2a5d0 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65  have been applie
2a5e0 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20  d, an extra row 
2a5f0 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64  is .       added
2a600 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66   to the output f
2a610 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
2a620 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74  he original left
2a630 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20  -hand input .   
2a640 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74      dataset that
2a650 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2a660 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69  no rows at all i
2a670 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a  n the composite.
2a680 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28         dataset (
2a690 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20  if any).)^ ^The 
2a6a0 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61  added rows conta
2a6b0 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  in NULL values i
2a6c0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20  n the columns.  
2a6d0 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20       that would 
2a6e0 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
2a6f0 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66   values copied f
2a700 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61  rom the right-ha
2a710 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20  nd input.       
2a720 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e  dataset.  .</ul>
2a730 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65  ..<p>^(When more
2a740 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73   than two tables
2a750 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65   are joined toge
2a760 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20  ther as part of 
2a770 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74  a FROM clause,.t
2a780 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f  he join operatio
2a790 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64  ns are processed
2a7a0 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c   in order from l
2a7b0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2a7c0 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74   other .words, t
2a7d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28  he FROM clause (
2a7e0 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f  A join-op-1 B jo
2a7f0 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f  in-op-2 C) is co
2a800 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a  mputed as .((A j
2a810 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e  oin-op-1 B) join
2a820 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63  -op-2 C).)^..<tc
2a830 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 72  l>hd_fragment cr
2a840 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20  ossjoin {treats 
2a850 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f  the CROSS JOIN o
2a860 70 65 72 61 74 6f 72 20 73 70 65 63 69 61 6c 6c  perator speciall
2a870 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53  y}</tcl>.<p><b>S
2a880 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63 69 61  ide note: Specia
2a890 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52  l handling of CR
2a8a0 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54  OSS JOIN.</b>.^T
2a8b0 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65  here is no diffe
2a8c0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
2a8d0 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20  e "INNER JOIN", 
2a8e0 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a  "JOIN" and "," j
2a8f0 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54  oin.operators. T
2a900 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65 74 65  hey are complete
2a910 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  ly interchangeab
2a920 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28  le in SQLite..^(
2a930 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22  The "CROSS JOIN"
2a940 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 70   join operator p
2a950 72 6f 64 75 63 65 73 20 74 68 65 20 73 61 6d 65  roduces the same
2a960 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 0a   result as the .
2a970 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
2a980 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70 65  OIN" and "," ope
2a990 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69 73  rators)^, but is
2a9a0 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c 68 61   .[CROSS JOIN|ha
2a9b0 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74 6c  ndled differentl
2a9c0 79 20 62 79 20 74 68 65 20 71 75 65 72 79 20 6f  y by the query o
2a9d0 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74 68 61  ptimizer].in tha
2a9e0 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74 68  t it prevents th
2a9f0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
2aa00 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e  r from reorderin
2aa10 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e 20  g.the tables in 
2aa20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70  the join.  An ap
2aa30 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61  plication progra
2aa40 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68 65  mmer can use the
2aa50 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65   CROSS JOIN .ope
2aa60 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74 6c  rator to directl
2aa70 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65 20  y influence the 
2aa80 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 69  algorithm that i
2aa90 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c  s chosen to impl
2aaa0 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43 54  ement.the SELECT
2aab0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f   statement.  Avo
2aac0 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20 4a  id using CROSS J
2aad0 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73 70  OIN except in sp
2aae0 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f 6e  ecific situation
2aaf0 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c 20  s .where manual 
2ab00 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 71  control of the q
2ab10 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
2ab20 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f 69  s desired.  Avoi
2ab30 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f  d using.CROSS JO
2ab40 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20  IN early in the 
2ab50 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61  development of a
2ab60 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 73  n application as
2ab70 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c   doing so is.a <
2ab80 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63  a href="http://c
2ab90 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50  2.com/cgi/wiki?P
2aba0 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a 61  rematureOptimiza
2abb0 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a  tion">premature.
2abc0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e  optimization</a>
2abd0 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20 68  .  The special h
2abe0 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
2abf0 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c 69   JOIN is an SQLi
2ac00 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61 74  te-specific.feat
2ac10 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20 61  ure and is not a
2ac20 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72   part of standar
2ac30 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a  d SQL..       ..
2ac40 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2ac50 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63   whereclause</tc
2ac60 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2ac70 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73  rds {WHERE claus
2ac80 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32  e}</tcl>.<p><b>2
2ac90 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  . WHERE clause f
2aca0 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c  iltering.</b>..<
2acb0 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20 63  p>^(If a WHERE c
2acc0 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
2acd0 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65 78  ed, the WHERE ex
2ace0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
2acf0 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20  uated for .each 
2ad00 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74  row in the input
2ad10 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c   data as a [bool
2ad20 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
2ad30 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77   Only rows for w
2ad40 68 69 63 68 20 74 68 65 0a 57 48 45 52 45 20 63  hich the.WHERE c
2ad50 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
2ad60 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72   evaluates to tr
2ad70 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
2ad80 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2ad90 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69   before.continui
2ada0 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72 65 20  ng.)^  Rows are 
2adb0 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
2adc0 65 20 72 65 73 75 6c 74 20 69 66 20 74 68 65 20  e result if the 
2add0 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65 76 61  WHERE clause.eva
2ade0 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
2adf0 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a   false or NULL..
2ae00 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e 20 6f  .<p>For a JOIN o
2ae10 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72 20  r INNER JOIN or 
2ae20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68 65 72  CROSS JOIN, ther
2ae30 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
2ae40 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20 63 6f  ce between .a co
2ae50 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73 73  nstraint express
2ae60 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45 52 45  ion in the WHERE
2ae70 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e 65 20   clause and one 
2ae80 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73 65  in the ON clause
2ae90 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f 72 20  .  However,.for 
2aea0 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72 20 4c  a LEFT JOIN or L
2aeb0 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 2c 20  EFT OUTER JOIN, 
2aec0 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  the difference i
2aed0 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61 6e 74  s very important
2aee0 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20 4a 4f  .  .In a LEFT JO
2aef0 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20 4e 55  IN,.the extra NU
2af00 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65 20 72  LL row for the r
2af10 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c 65 20  ight-hand table 
2af20 69 73 20 61 64 64 65 64 20 61 66 74 65 72 20 4f  is added after O
2af30 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  N clause process
2af40 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65 20 57  ing.but before W
2af50 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
2af60 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e 73 74  essing.  A const
2af70 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  raint of the for
2af80 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e  m "left.x=right.
2af90 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c 61 75  y".in an ON clau
2afa0 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66 6f 72  se will therefor
2afb0 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67 68 20  e allow through 
2afc0 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d 4e 55  the added all-NU
2afd0 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65 0a 72  LL rows of the.r
2afe0 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42 75 74  ight table.  But
2aff0 20 69 66 20 74 68 61 74 20 73 61 6d 65 20 63 6f   if that same co
2b000 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e 20 74  nstraint is in t
2b010 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2b020 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67 68 74  a NULL in."right
2b030 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65 6e 74  .y" will prevent
2b040 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2b050 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22  "left.x=right.y"
2b060 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72 75 65   from being true
2b070 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63 6c 75  , and.thus exclu
2b080 64 65 20 74 68 61 74 20 72 6f 77 20 66 72 6f 6d  de that row from
2b090 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 70   the output...<p
2b0a0 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f  ><b>3. Generatio
2b0b0 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20  n of the set of 
2b0c0 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e  result rows.</b>
2b0d0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2b0e0 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c  t resultset</tcl
2b0f0 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
2b100 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65  ds {result-set e
2b110 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f  xpressions} {GRO
2b120 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  UP BY}</tcl>..<p
2b130 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20  >Once the input 
2b140 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52  data from the FR
2b150 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65  OM clause has be
2b160 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  en filtered by t
2b170 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
2b180 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61  expression (if a
2b190 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20  ny), the set of 
2b1a0 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20  result rows for 
2b1b0 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
2b1c0 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65  CT are calculate
2b1d0 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74  d. Exactly how t
2b1e0 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65  his is done depe
2b1f0 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74  nds on whether t
2b200 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
2b210 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  T is an aggregat
2b220 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61  e or non-aggrega
2b230 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68  te query, and wh
2b240 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47  ether or not a G
2b250 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77  ROUP.BY clause w
2b260 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  as specified...<
2b270 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  p> The list of e
2b280 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65  xpressions betwe
2b290 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e  en the SELECT an
2b2a0 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20  d FROM keywords 
2b2b0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20  is known as.the 
2b2c0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2b2d0 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72  n list.  ^If a r
2b2e0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2b2f0 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20   is the special 
2b300 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74  expression."*" t
2b310 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2b320 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
2b330 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  a are substitute
2b340 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65  d for that one e
2b350 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20  xpression..^(If 
2b360 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2b370 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61  s the alias of a
2b380 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2b390 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
2b3a0 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62  lause.followed b
2b3b0 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20  y ".*" then all 
2b3c0 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65  columns from the
2b3d0 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20   named table or 
2b3e0 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62  subquery are.sub
2b3f0 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65  stituted for the
2b400 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69   single expressi
2b410 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e  on.)^ ^(It is an
2b420 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20   error to use a 
2b430 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22  "*" or."alias.*"
2b440 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61   expression in a
2b450 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72  ny context other
2b460 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20 65   than a result e
2b470 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29  xpression list.)
2b480 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20 61  ^.^(It is also a
2b490 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
2b4a0 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a   "*" or "alias.*
2b4b0 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
2b4c0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a  a simple SELECT.
2b4d0 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73 20  query that does 
2b4e0 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d 20  not have a FROM 
2b4f0 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e  clause.)^..<p> ^
2b500 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  (The number of c
2b510 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f  olumns in the ro
2b520 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 61  ws returned by a
2b530 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2b540 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75 61  tatement.is equa
2b550 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  l to the number 
2b560 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  of expressions i
2b570 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
2b580 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66 74  ression list aft
2b590 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 20  er.substitution 
2b5a0 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a  of * and alias.*
2b5b0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20   expressions.)^ 
2b5c0 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20  Each result row 
2b5d0 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62 79  is calculated by
2b5e0 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
2b5f0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2b600 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2b610 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20 72  sion list with r
2b620 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e 67  espect to a.sing
2b630 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74 20  le row of input 
2b640 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67 67  data or, for agg
2b650 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c 20  regate queries, 
2b660 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
2b670 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e  a group.of rows.
2b680 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2b690 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  ^If the SELECT s
2b6a0 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2b6b0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
2b6c0 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a  uery</b>, then .
2b6d0 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73 73      each express
2b6e0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2b6f0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2b700 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  t is evaluated f
2b710 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a 20  or each row in. 
2b720 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20 66     the dataset f
2b730 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20 57  iltered by the W
2b740 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20  HERE clause...  
2b750 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
2b760 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2b770 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
2b780 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
2b790 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c   a GROUP.    BY<
2b7a0 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  /b> clause, then
2b7b0 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
2b7c0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2b7d0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
2b7e0 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 6f  .    evaluated o
2b7f0 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20 65  nce across the e
2b800 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20 5e  ntire dataset. ^
2b810 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61  Each non-aggrega
2b820 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20  te expression.  
2b830 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d    in the result-
2b840 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  set is evaluated
2b850 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72 62   once for an arb
2b860 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
2b870 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68 65  d row of.    the
2b880 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20 73   dataset. ^The s
2b890 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79 20  ame arbitrarily 
2b8a0 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73 20  selected row is 
2b8b0 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20 20  used for each.  
2b8c0 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20    non-aggregate 
2b8d0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c  expression. ^Or,
2b8e0 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74 20   if the dataset 
2b8f0 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f  contains zero ro
2b900 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  ws, then .    ea
2b910 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  ch non-aggregate
2b920 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
2b930 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
2b940 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e   a row consistin
2b950 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20 6f  g.    entirely o
2b960 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a  f NULL values...
2b970 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c     <p>^The singl
2b980 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d  e row of result-
2b990 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65 64  set data created
2b9a0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
2b9b0 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20 20  he aggregate.   
2b9c0 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61   and non-aggrega
2b9d0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  te expressions i
2b9e0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2b9f0 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75 6c   forms the resul
2ba00 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67 72  t of an.    aggr
2ba10 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2ba20 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20 63  out a GROUP BY c
2ba30 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72 65  lause. ^An aggre
2ba40 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f  gate query witho
2ba50 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20 42  ut a.    GROUP B
2ba60 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73 20  Y clause always 
2ba70 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20  returns exactly 
2ba80 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61 2c  one row of data,
2ba90 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20 61   even if there a
2baa0 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77 73  re.    zero rows
2bab0 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e 0a   of input data..
2bac0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74  .  <li><p>^(If t
2bad0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2bae0 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
2baf0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2bb00 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
2bb10 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
2bb20 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65 78  n each of the ex
2bb30 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69 66  pressions specif
2bb40 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
2bb50 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20  he.    GROUP BY 
2bb60 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75 61  clause is evalua
2bb70 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
2bb80 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74 2e   of the dataset.
2bb90 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69 73   Each row.    is
2bba0 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20 74   then assigned t
2bbb0 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73 65  o a "group" base
2bbc0 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
2bbd0 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  ; rows for which
2bbe0 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 73  .    the results
2bbf0 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
2bc00 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70 72  he GROUP BY expr
2bc10 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65 20  essions are the 
2bc20 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61 73 73  same get.    ass
2bc30 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61 6d  igned to the sam
2bc40 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20  e group.)^ ^For 
2bc50 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2bc60 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e  grouping rows, N
2bc70 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73 20  ULL .    values 
2bc80 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65  are considered e
2bc90 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c  qual. ^The usual
2bca0 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c   rules for [coll
2bcb0 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20  ation|selecting 
2bcc0 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20  a.    collation 
2bcd0 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20 77  sequence] with w
2bce0 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65 20  hich to compare 
2bcf0 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70 6c  text values appl
2bd00 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  y when evaluatin
2bd10 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  g.    expression
2bd20 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
2bd30 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65 78  clause.  ^The ex
2bd40 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
2bd50 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2bd60 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c  .    do <em>not<
2bd70 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20  /em> have to be 
2bd80 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
2bd90 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72   appear in the r
2bda0 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20  esult. ^The.    
2bdb0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
2bdc0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2bdd0 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67 72   may not be aggr
2bde0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2bdf0 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20  s...    <p>^(If 
2be00 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
2be10 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74  is specified, it
2be20 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
2be30 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f 75  ce for each grou
2be40 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20 61  p .    of rows a
2be50 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2be60 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65  ression]. If the
2be70 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
2be80 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48 41  ating the.    HA
2be90 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 66  VING clause is f
2bea0 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70 20  alse, the group 
2beb0 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e 20  is discarded.)^ 
2bec0 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20 63  ^If the HAVING c
2bed0 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e 20  lause is.    an 
2bee0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2bef0 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c  sion, it is eval
2bf00 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c  uated across all
2bf10 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
2bf20 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48 41  up. ^If.    a HA
2bf30 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  VING clause is a
2bf40 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2bf50 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2bf60 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68 20   evaluated with 
2bf70 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20 61  respect.    to a
2bf80 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
2bf90 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d 20  lected row from 
2bfa0 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  the group.  ^The
2bfb0 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73 69   HAVING expressi
2bfc0 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65 72  on may.    refer
2bfd0 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
2bfe0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
2bff0 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
2c000 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
2c010 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45  .</p>..    <p>^E
2c020 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
2c030 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2c040 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74   is then evaluat
2c050 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
2c060 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72 6f  .    group of ro
2c070 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  ws. ^If the expr
2c080 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67 67  ession is an agg
2c090 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2c0a0 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65 76  n, it is .    ev
2c0b0 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61  aluated across a
2c0c0 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  ll rows in the g
2c0d0 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73 65  roup. ^Otherwise
2c0e0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2c0f0 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61 20  d against.    a 
2c100 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72 69  single arbitrari
2c110 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66 72  ly chosen row fr
2c120 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67 72  om within the gr
2c130 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20 69  oup. ^If there i
2c140 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e 20  s more.    than 
2c150 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  one non-aggregat
2c160 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  e expression in 
2c170 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c 20  the result-set, 
2c180 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20  then all such.  
2c190 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72    expressions ar
2c1a0 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  e evaluated for 
2c1b0 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20  the same row... 
2c1c0 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75     <p>^Each grou
2c1d0 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 73  p of input datas
2c1e0 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62 75  et rows contribu
2c1f0 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  tes a single row
2c200 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65 74   to the .    set
2c210 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e   of result rows.
2c220 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69 6c   ^Subject to fil
2c230 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74 65  tering associate
2c240 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54 49  d with the DISTI
2c250 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c  NCT.    keyword,
2c260 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2c270 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2c280 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2c290 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
2c2a0 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69 73      BY clause is
2c2b0 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
2c2c0 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75 70   number of group
2c2d0 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75 63  s of rows produc
2c2e0 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a 20  ed by applying. 
2c2f0 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59 20     the GROUP BY 
2c300 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75 73  and HAVING claus
2c310 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65 72  es to the filter
2c320 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
2c330 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34  ..</ul>..<p><b>4
2c340 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70  . Removal of dup
2c350 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44 49 53  licate rows (DIS
2c360 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67  TINCT processing
2c370 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66  ).</b>.<tcl>hd_f
2c380 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74  ragment distinct
2c390 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2c3a0 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43  eywords {DISTINC
2c3b0 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e  T}</tcl>..<p>^On
2c3c0 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20  e of the ALL or 
2c3d0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
2c3e0 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65  s may follow the
2c3f0 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20   SELECT keyword 
2c400 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c  in a .simple SEL
2c410 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
2c420 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  If the simple SE
2c430 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54  LECT is a SELECT
2c440 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65   ALL, then the.e
2c450 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72 65 73  ntire set of res
2c460 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65 74  ult rows are ret
2c470 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
2c480 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72  ECT. ^If neither
2c490 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54   ALL or.DISTINCT
2c4a0 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68   are present, th
2c4b0 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
2c4c0 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72  is as if ALL wer
2c4d0 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49  e specified. .^I
2c4e0 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  f the simple SEL
2c4f0 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20  ECT is a SELECT 
2c500 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64  DISTINCT, then d
2c510 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72  uplicate rows ar
2c520 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74  e removed.from t
2c530 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
2c540 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20   rows before it 
2c550 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f  is returned. ^Fo
2c560 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2c570 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c  f.detecting dupl
2c580 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20  icate rows, two 
2c590 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
2c5a0 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
2c5b0 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72   equal. ^The.nor
2c5c0 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73 65  mal rules for se
2c5d0 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61 74  lecting a collat
2c5e0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ion sequence to 
2c5f0 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
2c600 75 65 73 20 77 69 74 68 0a 61 70 70 6c 79 2e 0a  ues with.apply..
2c610 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65  .<tcl>.hd_fragme
2c620 6e 74 20 63 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d  nt compound {com
2c630 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b 63  pound select} {c
2c640 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 20 7b  ompound query} {
2c650 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 7d  compound SELECT}
2c660 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   {compound SELEC
2c670 54 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  Ts}.</tcl>.<h3>C
2c680 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74 20 53  ompound Select S
2c690 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a  tatements</h3>..
2c6a0 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20 5b  <p>Two or more [
2c6b0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 73  simple SELECT] s
2c6c0 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65  tatements may be
2c6d0 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65 74   connected toget
2c6e0 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63 6f  her to form.a co
2c6f0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75 73  mpound SELECT us
2c700 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20 55  ing the UNION, U
2c710 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
2c720 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f 70  ECT or EXCEPT op
2c730 65 72 61 74 6f 72 2c 0a 61 73 20 73 68 6f 77 6e  erator,.as shown
2c740 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
2c750 67 20 64 69 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c  g diagram:..<tcl
2c760 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
2c770 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e  eDiagram compoun
2c780 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f  d-select-stmt.</
2c790 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63  tcl>..<p>^In a c
2c7a0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
2c7b0 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75  all the constitu
2c7c0 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74  ent SELECTs must
2c7d0 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65   return the same
2c7e0 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75   .number of resu
2c7f0 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20  lt columns. ^As 
2c800 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f  the components o
2c810 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  f a compound SEL
2c820 45 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d 70  ECT must.be simp
2c830 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2c840 65 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20 6e  ents, they may n
2c850 6f 74 20 63 6f 6e 74 61 69 6e 20 5b 4f 52 44 45  ot contain [ORDE
2c860 52 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d  R BY] or [LIMIT]
2c870 20 63 6c 61 75 73 65 73 2e 0a 5e 5b 4f 52 44 45   clauses..^[ORDE
2c880 52 20 42 59 5d 20 61 6e 64 20 5b 4c 49 4d 49 54  R BY] and [LIMIT
2c890 5d 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f 6e  ] clauses may on
2c8a0 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68 65 20  ly occur at the 
2c8b0 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69 72  end of the entir
2c8c0 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  e compound.SELEC
2c8d0 54 2c 20 61 6e 64 20 74 68 65 6e 20 6f 6e 6c 79  T, and then only
2c8e0 20 69 66 20 74 68 65 20 66 69 6e 61 6c 20 65 6c   if the final el
2c8f0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f 6d  ement of the com
2c900 70 6f 75 6e 64 20 69 73 20 6e 6f 74 20 61 20 5b  pound is not a [
2c910 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2e 0a  VALUES] clause..
2c920 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20  .<p>^A compound 
2c930 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75  SELECT created u
2c940 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f  sing UNION ALL o
2c950 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
2c960 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
2c970 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
2c980 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
2c990 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74  UNION ALL operat
2c9a0 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20  or, and all the 
2c9b0 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
2c9c0 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
2c9d0 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e  t of it. ^The UN
2c9e0 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72  ION operator wor
2c9f0 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  ks the same way 
2ca00 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78  as.UNION ALL, ex
2ca10 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63  cept that duplic
2ca20 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
2ca30 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69  oved from the fi
2ca40 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  nal result set..
2ca50 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  ^The INTERSECT o
2ca60 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
2ca70 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
2ca80 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
2ca90 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a  of the left and.
2caa0 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
2cab0 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72  ^The EXCEPT oper
2cac0 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65  ator returns the
2cad0 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20   subset of rows 
2cae0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
2caf0 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74  left SELECT that
2cb00 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65   are not also re
2cb10 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69  turned by the ri
2cb20 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e  ght-hand SELECT.
2cb30 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73   ^Duplicate.rows
2cb40 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2cb50 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  m the results of
2cb60 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45   INTERSECT and E
2cb70 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20  XCEPT operators 
2cb80 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c  before the.resul
2cb90 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65  t set is returne
2cba0 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20  d...<p>^For the 
2cbb0 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
2cbc0 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74  rmining duplicat
2cbd0 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72  e rows for the r
2cbe0 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75  esults of compou
2cbf0 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd.SELECT operat
2cc00 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ors, NULL values
2cc10 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
2cc20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e  equal to other N
2cc30 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64  ULL values and.d
2cc40 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
2cc50 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
2cc60 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  . ^The collation
2cc70 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74   sequence used t
2cc80 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74  o compare .two t
2cc90 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
2cca0 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74  termined as if t
2ccb0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
2ccc0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
2ccd0 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61  -hand.SELECT sta
2cce0 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65  tements were the
2ccf0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
2cd00 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
2cd10 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a   the equals (=).
2cd20 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74  operator, except
2cd30 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72   that greater pr
2cd40 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20  ecedence is not 
2cd50 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f  assigned to a co
2cd60 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63  llation .sequenc
2cd70 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
2cd80 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c   the postfix COL
2cd90 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e  LATE operator. ^
2cda0 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e  No affinity.tran
2cdb0 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20  sformations are 
2cdc0 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76  applied to any v
2cdd0 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61  alues when compa
2cde0 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72  ring rows as par
2cdf0 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20  t of a.compound 
2ce00 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57  SELECT. ..<p>^(W
2ce10 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
2ce20 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73  e simple SELECTs
2ce30 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69   are connected i
2ce40 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  nto a compound S
2ce50 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75  ELECT,.they grou
2ce60 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
2ce70 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77  ight. In other w
2ce80 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42  ords, if "A", "B
2ce90 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c  " and "C" are al
2cea0 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  l.simple SELECT 
2ceb0 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f  statements, (A o
2cec0 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f  p B op C) is pro
2ced0 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70  cessed as ((A op
2cee0 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f   B) op C).)^..</
2cef0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
2cf00 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72  ment orderby {or
2cf10 64 65 72 20 62 79 7d 20 7b 4f 52 44 45 52 20 42  der by} {ORDER B
2cf20 59 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  Y}</tcl>.<h3>The
2cf30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2cf40 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 53  </h3>..<p>If a S
2cf50 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2cf60 74 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f 72  that returns mor
2cf70 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 64  e than one row d
2cf80 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 0a  oes not have an.
2cf90 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2cfa0 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
2cfb0 69 63 68 20 74 68 65 20 72 6f 77 73 20 61 72 65  ich the rows are
2cfc0 20 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64   returned is und
2cfd0 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20 61  efined..Or, if a
2cfe0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2cff0 74 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20 4f  t does have an O
2d000 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
2d010 74 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  then the list of
2d020 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74 74  .expressions att
2d030 61 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52 44  ached to the ORD
2d040 45 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65 20  ER BY determine 
2d050 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
2d060 63 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74 75  ch rows.are retu
2d070 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
2d080 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 20 5b 63 6f  ...<p>.^In a [co
2d090 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 73  mpound SELECT] s
2d0a0 74 61 74 65 6d 65 6e 74 2c 20 6f 6e 6c 79 20 74  tatement, only t
2d0b0 68 65 20 6c 61 73 74 20 6f 72 20 72 69 67 68 74  he last or right
2d0c0 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45  -most [simple SE
2d0d0 4c 45 43 54 5d 0a 6d 61 79 20 68 61 76 65 20 61  LECT].may have a
2d0e0 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
2d0f0 65 2e 20 5e 54 68 61 74 20 4f 52 44 45 52 20 42  e. ^That ORDER B
2d100 59 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 61 70  Y clause will ap
2d110 70 6c 79 20 61 63 72 6f 73 73 20 61 6c 6c 20 65  ply across all e
2d120 6c 65 6d 65 6e 74 73 20 6f 66 0a 74 68 65 20 63  lements of.the c
2d130 6f 6d 70 6f 75 6e 64 2e 20 5e 49 66 20 74 68 65  ompound. ^If the
2d140 20 72 69 67 68 74 2d 6d 6f 73 74 20 65 6c 65 6d   right-most elem
2d150 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75  ent of a [compou
2d160 6e 64 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20  nd SELECT] is a 
2d170 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2c  [VALUES] clause,
2d180 0a 74 68 65 6e 20 6e 6f 20 4f 52 44 45 52 20 42  .then no ORDER B
2d190 59 20 63 6c 61 75 73 65 20 69 73 20 61 6c 6c 6f  Y clause is allo
2d1a0 77 65 64 20 6f 6e 20 74 68 61 74 20 73 74 61 74  wed on that stat
2d1b0 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f 77  ement....<p>^Row
2d1c0 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72 74  s are first sort
2d1d0 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ed based on the 
2d1e0 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c 75  results of.evalu
2d1f0 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d  ating the left-m
2d200 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ost expression i
2d210 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 6c  n the ORDER BY l
2d220 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20 61  ist, then ties a
2d230 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76 61  re broken.by eva
2d240 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63 6f  luating the seco
2d250 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  nd left-most exp
2d260 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20 6f  ression and so o
2d270 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  n. The order in 
2d280 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20 66  which.two rows f
2d290 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52 44  or which all ORD
2d2a0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d2b0 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65 71  s evaluate to eq
2d2c0 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a 72  ual values are.r
2d2d0 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66  eturned is undef
2d2e0 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44 45  ined. ^Each ORDE
2d2f0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2d300 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
2d310 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e  y followed.by on
2d320 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64  e of the keyword
2d330 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20 76  s ASC (smaller v
2d340 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
2d350 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45 53  ed first) or DES
2d360 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65 73  C (larger.values
2d370 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69   are returned fi
2d380 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68 65  rst). ^If neithe
2d390 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61 72  r ASC or DESC ar
2d3a0 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f 77  e specified, row
2d3b0 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e 20  s.are sorted in 
2d3c0 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c 6c  ascending (small
2d3d0 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74 29  er values first)
2d3e0 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75 6c   order by defaul
2d3f0 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44 45  t...<p>Each ORDE
2d400 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2d410 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
2d420 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
2d430 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
2d440 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2d450 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
2d460 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
2d470 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69 6f  en the.expressio
2d480 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
2d490 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
2d4a0 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   K-th column of 
2d4b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 28  the result set.(
2d4c0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d 62  columns are numb
2d4d0 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
2d4e0 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67  o right starting
2d4f0 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c   with 1)...<li><
2d500 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
2d510 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2d520 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74   an identifier t
2d530 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
2d540 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66 20  to.the alias of 
2d550 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  one of the outpu
2d560 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20  t columns, then 
2d570 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2d580 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e 20  s considered.an 
2d590 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20 63  alias for that c
2d5a0 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  olumn...<li><p>^
2d5b0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
2d5c0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2d5d0 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74 68  ssion is any oth
2d5e0 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  er expression, i
2d5f0 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64 20  t .is evaluated 
2d600 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65 64  and the returned
2d610 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 6f   value used to o
2d620 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74 20  rder the output 
2d630 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53 45  rows. ^If.the SE
2d640 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2d650 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  s a simple SELEC
2d660 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45 52  T, then an ORDER
2d670 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20   BY may contain 
2d680 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65 78  any.arbitrary ex
2d690 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77 65  pressions. ^Howe
2d6a0 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ver, if the SELE
2d6b0 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64  CT is a compound
2d6c0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f 52   SELECT, then.OR
2d6d0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2d6e0 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
2d6f0 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70 75  aliases to outpu
2d700 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 62  t columns must b
2d710 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73 61  e exactly.the sa
2d720 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73 73  me as an express
2d730 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20 6f  ion used as an o
2d740 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f  utput column..</
2d750 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ol>..<p>^For the
2d760 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f 72   purposes of sor
2d770 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75 65  ting rows, value
2d780 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  s are compared i
2d790 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 61  n the same way.a
2d7a0 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73 6f  s for [compariso
2d7b0 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e 20  n expressions]. 
2d7c0 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
2d7d0 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63  quence used to c
2d7e0 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74 20  ompare.two text 
2d7f0 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
2d800 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ined as follows:
2d810 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ol>.  <li><p>
2d820 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
2d830 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2d840 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
2d850 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
2d860 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69 78  ng.  the postfix
2d870 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   [COLLATE operat
2d880 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73 70  or], then the sp
2d890 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69 6f  ecified collatio
2d8a0 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20 20  n sequence is.  
2d8b0 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  used..  <li><p>^
2d8c0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
2d8d0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2d8e0 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69 61  ssion is an alia
2d8f0 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  s to an expressi
2d900 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62 65  on.  that has be
2d910 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  en assigned a co
2d920 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2d930 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66   using the postf
2d940 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20 6f  ix .  [COLLATE o
2d950 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
2d960 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
2d970 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20 74  uence assigned t
2d980 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20 20  o the aliased.  
2d990 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
2d9a0 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  ed..  <li><p>^Ot
2d9b0 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
2d9c0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2d9d0 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  ion is a column 
2d9e0 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a 20  or an alias of. 
2d9f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
2da00 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c  hat is a column,
2da10 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
2da20 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
2da30 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20 63  ence for.  the c
2da40 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20 0a  olumn is used. .
2da50 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
2da60 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52 59  ise, the [BINARY
2da70 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  ] collation sequ
2da80 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c 2f  ence is used..</
2da90 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f  ol>..<p>In a [co
2daa0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 73  mpound SELECT] s
2dab0 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52  tatement, all OR
2dac0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2dad0 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61  ns are handled.a
2dae0 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e  s aliases for on
2daf0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  e of the result 
2db00 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
2db10 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66 20 61 6e  ompound..^(If an
2db20 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2db30 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69  sion is not an i
2db40 6e 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68  nteger alias, th
2db50 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
2db60 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  es.the left-most
2db70 20 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63   SELECT in the c
2db80 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65  ompound for a re
2db90 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
2dba0 20 6d 61 74 63 68 65 73 20 65 69 74 68 65 72 0a   matches either.
2dbb0 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68  the second or th
2dbc0 69 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e  ird rules above.
2dbd0 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66   If a match is f
2dbe0 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68  ound, the search
2dbf0 20 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65   stops and.the e
2dc00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e  xpression is han
2dc10 64 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73  dled as an alias
2dc20 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
2dc30 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68  column that it h
2dc40 61 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20  as been.matched 
2dc50 61 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69  against. Otherwi
2dc60 73 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c  se, the next SEL
2dc70 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74  ECT to the right
2dc80 20 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73   is tried, and s
2dc90 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d  o on.)^.^If no m
2dca0 61 74 63 68 69 6e 67 20 65 78 70 72 65 73 73 69  atching expressi
2dcb0 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20  on can be found 
2dcc0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  in the result co
2dcd0 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e  lumns of any.con
2dce0 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c  stituent SELECT,
2dcf0 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
2dd00 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74   ^Each term of t
2dd10 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
2dd20 73 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20  se is.processed 
2dd30 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d  separately and m
2dd40 61 79 20 62 65 20 6d 61 74 63 68 65 64 20 61 67  ay be matched ag
2dd50 61 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c  ainst result col
2dd60 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72  umns from differ
2dd70 65 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ent.SELECT state
2dd80 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d  ments in the com
2dd90 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  pound.</p>..<tcl
2dda0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6d  >hd_fragment lim
2ddb0 69 74 6f 66 66 73 65 74 20 7b 4c 49 4d 49 54 7d  itoffset {LIMIT}
2ddc0 20 7b 4f 46 46 53 45 54 7d 3c 2f 74 63 6c 3e 0a   {OFFSET}</tcl>.
2ddd0 3c 68 33 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c  <h3>The LIMIT cl
2dde0 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ause</h3>..<p>^T
2ddf0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
2de00 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65  is used to place
2de10 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
2de20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
2de30 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62   rows.returned b
2de40 79 20 74 68 65 20 65 6e 74 69 72 65 20 53 45 4c  y the entire SEL
2de50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
2de60 3c 70 3e 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  <p>^In a [compou
2de70 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c 79  nd SELECT], only
2de80 20 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69 67   the.last or rig
2de90 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20  ht-most [simple 
2dea0 53 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e 74  SELECT] may cont
2deb0 61 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  ain a LIMIT clau
2dec0 73 65 2e 20 20 0a 5e 49 6e 20 61 20 5b 63 6f 6d  se.  .^In a [com
2ded0 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 0a  pound SELECT], .
2dee0 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
2def0 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65 20   applies to the 
2df00 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 2c  entire compound,
2df10 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66 69   not just the fi
2df20 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 5e 49 66 20  nal SELECT..^If 
2df30 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b  the right-most [
2df40 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 69  simple SELECT] i
2df50 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61 75  s a [VALUES clau
2df60 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d 49  se] then no LIMI
2df70 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c 6f  T clause.is allo
2df80 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63  wed...<p>^Any sc
2df90 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
2dfa0 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  may be used in t
2dfb0 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  he .LIMIT clause
2dfc0 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74 20  , so long as it 
2dfd0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e 20  evaluates to an 
2dfe0 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61 6c  integer or a val
2dff0 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c  ue that can be.l
2e000 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
2e010 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
2e020 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72 65  r. ^If the expre
2e030 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2e040 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75 65  to a NULL .value
2e050 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76 61   or any other va
2e060 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
2e070 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
2e080 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
2e090 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72 20  teger, an.error 
2e0a0 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66  is returned. ^If
2e0b0 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
2e0c0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2e0d0 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
2e0e0 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65 20  lue,.then there 
2e0f0 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e  is no upper boun
2e100 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  d on the number 
2e110 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2e120 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  . ^Otherwise, th
2e130 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e 73  e.SELECT returns
2e140 20 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77   the first N row
2e150 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  s of its result 
2e160 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65 20  set only, where 
2e170 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a 74  N is the value.t
2e180 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65 78  hat the LIMIT ex
2e190 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2e1a0 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20 74  es to. ^Or, if t
2e1b0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2e1c0 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72 6e  ent would.return
2e1d0 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f 77   less than N row
2e1e0 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d 49  s without a LIMI
2e1f0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  T clause, then t
2e200 68 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c 74  he entire result
2e210 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65 64   set is.returned
2e220 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70 72  . ..<p>^The expr
2e230 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64 20  ession attached 
2e240 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  to the optional 
2e250 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68  OFFSET clause th
2e260 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61 0a  at may follow a.
2e270 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75 73  LIMIT clause mus
2e280 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65 20  t also evaluate 
2e290 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6f  to an integer, o
2e2a0 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
2e2b0 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
2e2c0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
2e2d0 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61 6e   integer. ^If an
2e2e0 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20   expression has 
2e2f0 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
2e300 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  ,.then the first
2e310 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69 74   M rows are omit
2e320 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ted from the res
2e330 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65 64  ult set returned
2e340 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a 73   by the SELECT.s
2e350 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65  tatement and the
2e360 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72 65   next N rows are
2e370 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72 65   returned, where
2e380 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68 65   M and N are the
2e390 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68 65   values that.the
2e3a0 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d 49   OFFSET and LIMI
2e3b0 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75 61  T clauses evalua
2e3c0 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69 76  te to, respectiv
2e3d0 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65  ely. ^Or, if the
2e3e0 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72 65   SELECT.would re
2e3f0 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4d  turn less than M
2e400 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64 69  +N rows if it di
2e410 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49 4d  d not have a LIM
2e420 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
2e430 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77 73  the.first M rows
2e440 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64   are skipped and
2e450 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 72   the remaining r
2e460 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61 72 65  ows (if any) are
2e470 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74   returned. ^If t
2e480 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he.OFFSET clause
2e490 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
2e4a0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20  negative value, 
2e4b0 74 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  the results are 
2e4c0 74 68 65 20 73 61 6d 65 20 61 73 20 69 66 20 69  the same as if i
2e4d0 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64 20  t.had evaluated 
2e4e0 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e  to zero...<p>^In
2e4f0 73 74 65 61 64 20 6f 66 20 61 20 73 65 70 61 72  stead of a separ
2e500 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  ate OFFSET claus
2e510 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  e, the LIMIT cla
2e520 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 20  use may specify 
2e530 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72 65  two.scalar expre
2e540 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65 64  ssions separated
2e550 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e   by a comma. ^In
2e560 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
2e570 66 69 72 73 74 20 65 78 70 72 65 73 73 69 6f 6e  first expression
2e580 0a 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20  .is used as the 
2e590 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
2e5a0 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64  n and the second
2e5b0 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65 78   as the LIMIT ex
2e5c0 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20 69  pression..This i
2e5d0 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69 74  s counter-intuit
2e5e0 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73 69  ive, as when usi
2e5f0 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
2e600 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64 20  ause the second 
2e610 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72 65  of.the two expre
2e620 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f 46  ssions is the OF
2e630 46 53 45 54 20 61 6e 64 20 74 68 65 20 66 69 72  FSET and the fir
2e640 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a 54  st the LIMIT. .T
2e650 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66 20  his reversal of 
2e660 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20 6c  the offset and l
2e670 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69 6f  imit is intentio
2e680 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal.- it maximiz
2e690 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
2e6a0 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20   with other SQL 
2e6b0 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73  database systems
2e6c0 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61 76  ..However, to av
2e6d0 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 70  oid confusion, p
2e6e0 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 73  rogrammers are s
2e6f0 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61 67  trongly encourag
2e700 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66 6f  ed to use.the fo
2e710 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  rm of the LIMIT 
2e720 63 6c 61 75 73 65 20 74 68 61 74 20 75 73 65 73  clause that uses
2e730 20 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b 65   the "OFFSET" ke
2e740 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64 0a  yword and avoid.
2e750 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63 6c  using a LIMIT cl
2e760 61 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d 6d  ause with a comm
2e770 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66 73  a-separated offs
2e780 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  et...<tcl>hd_fra
2e790 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56 41  gment values {VA
2e7a0 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41 4c  LUES clause} VAL
2e7b0 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  UES</tcl>.<h3>Th
2e7c0 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 3c  e VALUES clause<
2e7d0 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70  /h3>..<p>^(The p
2e7e0 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c 69  hrase "VALUES(<i
2e7f0 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29 22  >expr-list</i>)"
2e800 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20   means the same 
2e810 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43 54  thing.as "SELECT
2e820 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69   <i>expr-list</i
2e830 3e 22 2e 29 5e 20 20 5e 28 54 68 65 20 70 68 72  >".)^  ^(The phr
2e840 61 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65  ase."VALUES(<i>e
2e850 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c  xpr-list-1</i>),
2e860 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73  ...,(<i>expr-lis
2e870 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20  t-N</i>)" means 
2e880 74 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20 61  the same.thing a
2e890 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70  s "SELECT <i>exp
2e8a0 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49  r-list-1</i> UNI
2e8b0 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e  ON ALL ... UNION
2e8c0 20 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65   ALL.SELECT <i>e
2e8d0 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e  xpr-list-N</i>".
2e8e0 29 5e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20 61  )^  Both forms a
2e8f0 72 65 20 74 68 65 20 73 61 6d 65 2c 20 65 78 63  re the same, exc
2e900 65 70 74 20 74 68 61 74 0a 74 68 65 20 6e 75 6d  ept that.the num
2e910 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
2e920 61 74 65 6d 65 6e 74 73 20 69 6e 20 61 20 63 6f  atements in a co
2e930 6d 70 6f 75 6e 64 20 69 73 20 6c 69 6d 69 74 65  mpound is limite
2e940 64 20 62 79 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d  d by.[SQLITE_LIM
2e950 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  IT_COMPOUND_SELE
2e960 43 54 5d 20 77 68 65 72 65 61 73 20 74 68 65 20  CT] whereas the 
2e970 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2e980 6e 20 61 0a 56 41 4c 55 45 53 20 63 6c 61 75 73  n a.VALUES claus
2e990 65 20 68 61 73 20 6e 6f 20 61 72 62 69 74 72 61  e has no arbitra
2e9a0 72 79 20 6c 69 6d 69 74 2e 0a 0a 3c 70 3e 54 68  ry limit...<p>Th
2e9b0 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65 73  ere are some res
2e9c0 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65  trictions on the
2e9d0 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45 53   use of a VALUES
2e9e0 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72 65   clause that are
2e9f0 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74 68  .not shown on th
2ea00 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
2ea10 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ul>.<li><p>
2ea20 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73  .^A VALUES claus
2ea30 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c  e cannot be foll
2ea40 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42  owed by [ORDER B
2ea50 59 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20  Y]...<li><p>.^A 
2ea60 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
2ea70 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  nnot be followed
2ea80 20 62 79 20 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f 75   by [LIMIT]..</u
2ea90 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54  l>...<h3>The WIT
2eaa0 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  H Clause</h3>..<
2eab0 70 3e 5e 53 45 4c 45 43 54 20 73 74 61 74 65 6d  p>^SELECT statem
2eac0 65 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74 69  ents may be opti
2ead0 6f 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64 20  onally preceded 
2eae0 62 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54  by a single.[WIT
2eaf0 48 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20 64  H clause] that d
2eb00 65 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  efines one or mo
2eb10 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  re [common table
2eb20 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f   expressions].fo
2eb30 72 20 75 73 65 20 77 69 74 68 69 6e 20 74 68 65  r use within the
2eb40 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2eb50 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
2eb60 6d 65 6e 74 20 74 61 62 66 75 6e 63 31 20 7b 74  ment tabfunc1 {t
2eb70 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63  able-valued func
2eb80 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 46 52 4f  tions in the FRO
2eb90 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
2eba0 3c 68 33 3e 54 61 62 6c 65 2d 76 61 6c 75 65 64  <h3>Table-valued
2ebb0 20 46 75 6e 63 74 69 6f 6e 73 20 49 6e 20 54 68   Functions In Th
2ebc0 65 20 46 52 4f 4d 20 43 6c 61 75 73 65 3c 2f 68  e FROM Clause</h
2ebd0 33 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61  3>..<p>A [virtua
2ebe0 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 6f  l table] that co
2ebf0 6e 74 61 69 6e 73 20 5b 68 69 64 64 65 6e 20 63  ntains [hidden c
2ec00 6f 6c 75 6d 6e 73 5d 20 63 61 6e 20 62 65 20 75  olumns] can be u
2ec10 73 65 64 20 6c 69 6b 65 0a 61 20 5b 74 61 62 6c  sed like.a [tabl
2ec20 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f  e-valued functio
2ec30 6e 5d 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  n] in the FROM c
2ec40 6c 61 75 73 65 2e 20 20 54 68 65 20 61 72 67 75  lause.  The argu
2ec50 6d 65 6e 74 73 20 74 6f 20 74 68 65 0a 74 61 62  ments to the.tab
2ec60 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69  le-valued functi
2ec70 6f 6e 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 72  on become constr
2ec80 61 69 6e 74 73 20 6f 6e 20 74 68 65 20 48 49 44  aints on the HID
2ec90 44 45 4e 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74  DEN columns of.t
2eca0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2ecb0 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 69 6e  .  Additional in
2ecc0 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62 65  formation can be
2ecd0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 5b 74   found in the.[t
2ece0 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63  able-valued func
2ecf0 74 69 6f 6e 73 7c 76 69 72 74 75 61 6c 20 74 61  tions|virtual ta
2ed00 62 6c 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ble documentatio
2ed10 6e 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  n]...<tcl>.#####
2ed20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed60 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2ed70 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20  n UPDATE update 
2ed80 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73  {UPDATE *UPDATEs
2ed90 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
2eda0 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65  leDiagram update
2edb0 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
2edc0 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74  >^An UPDATE stat
2edd0 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
2ede0 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74   modify a subset
2edf0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73   of the values s
2ee00 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f  tored in .zero o
2ee10 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74  r more rows of t
2ee20 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2ee30 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
2ee40 74 68 65 20 0a 5b 71 75 61 6c 69 66 69 65 64 2d  the .[qualified-
2ee50 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 73 70 65 63  table-name] spec
2ee60 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
2ee70 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2ee80 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  ement...<p>^If t
2ee90 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2eea0 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  ent does not hav
2eeb0 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  e a WHERE clause
2eec0 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  , all rows in th
2eed0 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69  e.table are modi
2eee0 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41  fied by the UPDA
2eef0 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  TE. ^Otherwise, 
2ef00 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63  the UPDATE affec
2ef10 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f  ts only those.ro
2ef20 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2ef30 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 5b 62   WHERE clause.[b
2ef40 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
2ef50 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73  n|boolean expres
2ef60 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e  sion is true]. ^
2ef70 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
2ef80 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52 45 20  or if the.WHERE 
2ef90 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20  clause does not 
2efa0 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65  evaluate to true
2efb0 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20   for any row in 
2efc0 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73  the table - this
2efd0 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74   just.means that
2efe0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2eff0 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65  ement affects ze
2f000 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65  ro rows...<p>The
2f010 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d   modifications m
2f020 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20  ade to each row 
2f030 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20 55  affected by an U
2f040 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2f050 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62  are.determined b
2f060 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  y the list of as
2f070 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77  signments follow
2f080 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79 77  ing the SET keyw
2f090 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e  ord. Each.assign
2f0a0 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 61  ment specifies a
2f0b0 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
2f0c0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74 6f  name</yyterm> to
2f0d0 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
2f0e0 20 0a 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e   .equals sign an
2f0f0 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65  d a.scalar expre
2f100 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67  ssion to the rig
2f110 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66  ht. ^For each af
2f120 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20  fected row, the 
2f130 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72  named columns.ar
2f140 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  e set to the val
2f150 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61  ues found by eva
2f160 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
2f170 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72  esponding scalar
2f180 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e   .expressions. ^
2f190 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  If a single colu
2f1a0 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20  mn-name appears 
2f1b0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69  more than once i
2f1c0 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73  n the list of.as
2f1d0 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73  signment express
2f1e0 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68  ions, all but th
2f1f0 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75  e rightmost occu
2f200 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65  rrence is ignore
2f210 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74  d. ^Columns.that
2f220 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
2f230 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  n the list of as
2f240 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65  signments are le
2f250 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e  ft unmodified. ^
2f260 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65  The scalar.expre
2f270 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72  ssions may refer
2f280 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   to columns of t
2f290 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64  he row being upd
2f2a0 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63  ated. ^In this c
2f2b0 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65  ase all.scalar e
2f2c0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
2f2d0 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
2f2e0 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
2f2f0 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54  are made...<p>^T
2f300 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f 52 20  he optional "OR 
2f310 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 63  <i>action</i>" c
2f320 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20 74  onflict clause t
2f330 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65 0a  hat follows the.
2f340 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64 20 61  UPDATE keyword a
2f350 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74  llows the user t
2f360 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70 65  o nominate a spe
2f370 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74  cific.constraint
2f380 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
2f390 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74  tion algorithm t
2f3a0 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69  o use during thi
2f3b0 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f 6d  s one UPDATE com
2f3c0 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20 74  mand..Refer to t
2f3d0 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69 74  he section entit
2f3e0 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led [ON CONFLICT
2f3f0 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
2f400 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c   information...<
2f410 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
2f420 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65 6d  on UPDATE Statem
2f430 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
2f440 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
2f450 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
2f460 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e  g additional syn
2f470 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73  tax restrictions
2f480 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54 45   apply to UPDATE
2f490 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
2f4a0 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68  .occur within th
2f4b0 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45  e body of a [CRE
2f4c0 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
2f4d0 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a  tement.  ..<ul>.
2f4e0 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79    <li><p>^The <y
2f4f0 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
2f500 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66  </yyterm> specif
2f510 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
2f520 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20 20 20  n UPDATE .      
2f530 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69 6e  statement within
2f540 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65 72  .      a trigger
2f550 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
2f560 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e 20  qualified. ^(In 
2f570 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2f580 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65 6d 61  .      <i>schema
2f590 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
2f5a0 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
2f5b0 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68  table name of th
2f5c0 65 20 55 50 44 41 54 45 20 69 73 0a 20 20 20 20  e UPDATE is.    
2f5d0 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69    not allowed wi
2f5e0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
2f5f0 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62   ^Unless the tab
2f600 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
2f610 74 72 69 67 67 65 72 0a 20 20 20 20 20 20 69 73  trigger.      is
2f620 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
2f630 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
2f640 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  e, the table bei
2f650 6e 67 20 75 70 64 61 74 65 64 20 62 79 20 74 68  ng updated by th
2f660 65 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 20  e.      trigger 
2f670 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73  program must res
2f680 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ide in the same 
2f690 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e 20  database as it. 
2f6a0 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20  ^If the table.  
2f6b0 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68 65      to which the
2f6c0 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
2f6d0 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54  ched is in the T
2f6e0 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68  EMP database, th
2f6f0 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71  en the.      unq
2f700 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
2f710 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2f720 20 75 70 64 61 74 65 64 20 69 73 20 72 65 73 6f   updated is reso
2f730 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
2f740 20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69 74   way.      as it
2f750 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65   is for a top-le
2f760 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62  vel statement (b
2f770 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73  y searching firs
2f780 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  t the TEMP datab
2f790 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20  ase,.      then 
2f7a0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2f7b0 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
2f7c0 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
2f7d0 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
2f7e0 72 65 0a 20 20 20 20 20 20 61 74 74 61 63 68 65  re.      attache
2f7f0 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  d)...  <li><p>^T
2f800 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
2f810 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
2f820 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  auses are not al
2f830 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a  lowed on UPDATE.
2f840 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
2f850 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
2f860 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
2f870 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
2f880 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
2f890 66 6f 72 20 55 50 44 41 54 45 20 61 72 65 20 75  for UPDATE are u
2f8a0 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 69  nsupported withi
2f8b0 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 73  n.      triggers
2f8c0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
2f8d0 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  the compilation 
2f8e0 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20  options used to 
2f8f0 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f  build SQLite..</
2f900 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  ul>..<h3>Optiona
2f910 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
2f920 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33  R BY Clauses</h3
2f930 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
2f940 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 20  e is built with 
2f950 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
2f960 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
2f970 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
2f980 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e  time option then
2f990 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   the syntax of t
2f9a0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2f9b0 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a  ent is extended.
2f9c0 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  with optional OR
2f9d0 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
2f9e0 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f   clauses)^ as fo
2f9f0 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  llows:</p>..<tcl
2fa00 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  >BubbleDiagram u
2fa10 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74  pdate-stmt-limit
2fa20 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66  ed</tcl>..<p>^If
2fa30 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
2fa40 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54  ment has a LIMIT
2fa50 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78   clause, the max
2fa60 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72  imum number of r
2fa70 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65  ows that.will be
2fa80 20 75 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e   updated is foun
2fa90 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
2faa0 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67  the accompanying
2fab0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
2fac0 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e  casting.it to an
2fad0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
2fae0 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  ^A negative valu
2faf0 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  e is interpreted
2fb00 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a   as "no limit"..
2fb10 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49  .<p>^If the LIMI
2fb20 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
2fb30 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65  luates to non-ne
2fb40 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e  gative value <i>
2fb50 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50  N</i> and the.UP
2fb60 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
2fb70 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
2fb80 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
2fb90 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
2fba0 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68  be updated in.th
2fbb0 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
2fbc0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
2fbd0 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
2fbe0 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20  ng to the ORDER 
2fbf0 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  BY and the.first
2fc00 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65   <i>N</i> update
2fc10 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44 41  d. ^(If the UPDA
2fc20 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  TE statement als
2fc30 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
2fc40 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20  clause,.then it 
2fc50 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
2fc60 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
2fc70 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
2fc80 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53  lue. If the OFFS
2fc90 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76  ET.expression ev
2fca0 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e  aluates to a non
2fcb0 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20  -negative value 
2fcc0 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74  <i>M</i>, then t
2fcd0 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69  he first <i>M</i
2fce0 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70  >.rows are skipp
2fcf0 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f  ed and the follo
2fd00 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f  wing <i>N</i> ro
2fd10 77 73 20 75 70 64 61 74 65 64 20 69 6e 73 74 65  ws updated inste
2fd20 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ad.)^..<p>^If th
2fd30 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
2fd40 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20  nt has no ORDER 
2fd50 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
2fd60 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f  all rows that.wo
2fd70 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69  uld be updated i
2fd80 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
2fd90 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
2fda0 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20  e are assembled 
2fdb0 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20  in an.arbitrary 
2fdc0 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70 70  order before app
2fdd0 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lying the LIMIT 
2fde0 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73  and OFFSET claus
2fdf0 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  es to determine 
2fe00 0a 77 68 69 63 68 20 61 72 65 20 61 63 74 75 61  .which are actua
2fe10 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70  lly updated...<p
2fe20 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20  >^(The ORDER BY 
2fe30 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44  clause on an UPD
2fe40 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
2fe50 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
2fe60 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f  termine which.ro
2fe70 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74  ws fall within t
2fe80 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72  he LIMIT. The or
2fe90 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
2fea0 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69  s are modified i
2feb0 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
2fec0 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
2fed0 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
2fee0 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
2fef0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
2ff00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff40 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d  #.Section VACUUM
2ff50 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a   vacuum VACUUM..
2ff60 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
2ff70 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74  iagram vacuum-st
2ff80 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20  mt.</tcl>..<p>. 
2ff90 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d   The VACUUM comm
2ffa0 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68 65  and rebuilds the
2ffb0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2ffc0 2e 20 54 68 65 72 65 20 61 72 65 20 73 65 76 65  . There are seve
2ffd0 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20 61  ral .  reasons a
2ffe0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69  n application mi
2fff0 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75  ght do this:..<u
30000 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55  l>.  <li> <p> ^U
30010 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
30020 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f  running in "auto
30030 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f  _vacuum=FULL" mo
30040 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72 67 65  de, when a large
30050 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20  .     amount of 
30060 64 61 74 61 20 69 73 20 64 65 6c 65 74 65 64 20  data is deleted 
30070 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
30080 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76 65 73  e file it leaves
30090 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a 20 20   behind empty.  
300a0 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22 66 72     space, or "fr
300b0 65 65 22 20 64 61 74 61 62 61 73 65 20 70 61 67  ee" database pag
300c0 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74  es. This means t
300d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
300e0 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65 20 6c   might.     be l
300f0 61 72 67 65 72 20 74 68 61 6e 20 73 74 72 69 63  arger than stric
30100 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20 5e  tly necessary. ^
30110 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 74  Running VACUUM t
30120 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20 0a 20  o rebuild the . 
30130 20 20 20 20 64 61 74 61 62 61 73 65 20 72 65 63      database rec
30140 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61 63 65  laims this space
30150 20 61 6e 64 20 72 65 64 75 63 65 73 20 74 68 65   and reduces the
30160 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
30170 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c  abase file...  <
30180 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e  li> <p> ^Frequen
30190 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74  t inserts, updat
301a0 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65 73 20  es, and deletes 
301b0 63 61 6e 20 63 61 75 73 65 20 74 68 65 20 64 61  can cause the da
301c0 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20  tabase file.    
301d0 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61 67 6d   to become fragm
301e0 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20 64 61  ented - where da
301f0 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  ta for a single 
30200 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
30210 73 20 73 63 61 74 74 65 72 65 64 20 0a 20 20 20  s scattered .   
30220 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64 61 74    around the dat
30230 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e  abase file. ^Run
30240 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e 73 75  ning VACUUM ensu
30250 72 65 73 20 74 68 61 74 20 65 61 63 68 20 74 61  res that each ta
30260 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69 6e 64  ble and.     ind
30270 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20 73 74  ex is largely st
30280 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  ored contiguousl
30290 79 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  y within the dat
302a0 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20  abase file. ^In 
302b0 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65 73 2c  some.     cases,
302c0 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f   VACUUM may also
302d0 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
302e0 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c 79 20  er of partially 
302f0 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69 6e 0a  filled pages in.
30300 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73       the databas
30310 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68 65 20  e, reducing the 
30320 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
30330 62 61 73 65 20 66 69 6c 65 20 66 75 72 74 68 65  base file furthe
30340 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  r...  <li> <p> ^
30350 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64 61  Normally, the da
30360 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73 69 7a  tabase [page_siz
30370 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  e] and whether o
30380 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61  r not the databa
30390 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72 74 73  se.     supports
303a0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d   [auto_vacuum] m
303b0 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75 72 65  ust be configure
303c0 64 20 62 65 66 6f 72 65 20 74 68 65 20 64 61 74  d before the dat
303d0 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 20 20  abase file is.  
303e0 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72 65 61     actually crea
303f0 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20 77  ted. ^However, w
30400 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69 74  hen not in [writ
30410 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64  e-ahead log] mod
30420 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b 70 61  e, the .     [pa
30430 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20  ge_size] and/or 
30440 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
30450 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e 20 65  operties of an e
30460 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
30470 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63 68 61   may be.     cha
30480 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20 74 68  nged by using th
30490 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61  e [page_size pra
304a0 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20 20  gma|page_size]  
304b0 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61 75  and/or .     [au
304c0 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d 61  to_vacuum|pragma
304d0 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72   auto_vacuum] pr
304e0 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e 20 69  agmas and then i
304f0 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55 55  mmediately VACUU
30500 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20 64 61  Ming.     the da
30510 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20 69 6e  tabase. ^When in
30520 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
30530 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74 68  g] mode, only th
30540 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  e [auto_vacuum].
30550 20 20 20 20 20 73 75 70 70 6f 72 74 20 70 72 6f       support pro
30560 70 65 72 74 79 20 63 61 6e 20 62 65 20 63 68 61  perty can be cha
30570 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43 55 55  nged using VACUU
30580 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56  M..</ul>..<p>^(V
30590 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73  ACUUM only works
305a0 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   on the main dat
305b0 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e 6f 74  abase. It is not
305c0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43   possible to VAC
305d0 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65 64 20  UUM an.attached 
305e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 29 5e  database file.)^
305f0 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
30600 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62   command works b
30610 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f  y copying the co
30620 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
30630 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65  tabase into.a te
30640 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
30650 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f   file and then o
30660 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
30670 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65  riginal with the
30680 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68   .contents of th
30690 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
306a0 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74  . ^When overwrit
306b0 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
306c0 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75  , a rollback.jou
306d0 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61  rnal or [write-a
306e0 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69  head log] WAL fi
306f0 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73 74 20  le is used just 
30700 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66  as it would be f
30710 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74  or any.other dat
30720 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f  abase transactio
30730 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74  n. ^This means t
30740 68 61 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69  hat when VACUUMi
30750 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a  ng a database, .
30760 61 73 20 6d 75 63 68 20 61 73 20 74 77 69 63 65  as much as twice
30770 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
30780 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
30790 73 65 20 66 69 6c 65 20 69 73 20 72 65 71 75 69  se file is requi
307a0 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b  red in free.disk
307b0 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65   space...<p>^The
307c0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
307d0 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b  may change the [
307e0 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20  ROWID | ROWIDs] 
307f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e  of entries in an
30800 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f  y.tables that do
30810 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70   not have an exp
30820 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50  licit [INTEGER P
30830 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70  RIMARY KEY]..</p
30840 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20  >..<p>^A VACUUM 
30850 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65  will fail if the
30860 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72  re is an open tr
30870 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66  ansaction, or if
30880 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f   there are one o
30890 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51  r.more active SQ
308a0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  L statements whe
308b0 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70  n it is run...<p
308c0 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74 65 20  >^(As of SQLite 
308d0 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20  version 3.1, an 
308e0 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75  alternative to u
308f0 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20  sing the VACUUM 
30900 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61  command to.recla
30910 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20 64  im space after d
30920 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c  ata has been del
30930 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63  eted is auto-vac
30940 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65  uum mode, enable
30950 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74  d using.the [aut
30960 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61  o_vacuum] pragma
30970 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f  .)^ ^When [auto_
30980 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c  vacuum] is enabl
30990 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
309a0 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61 79  e.free pages may
309b0 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66   be reclaimed af
309c0 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74  ter deleting dat
309d0 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 66  a, causing the f
309e0 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77  ile to shrink,.w
309f0 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e  ithout rebuildin
30a00 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  g the entire dat
30a10 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43 55  abase using VACU
30a20 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20 75 73  UM.  However, us
30a30 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d  ing.[auto_vacuum
30a40 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78  ] can lead to ex
30a50 74 72 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  tra database fil
30a60 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e  e fragmentation.
30a70 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75    And [auto_vacu
30a80 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d  um].does not com
30a90 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66  pact partially f
30aa0 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74  illed pages of t
30ab0 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 56  he database as V
30ac0 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70  ACUUM does...</p
30ad0 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
30ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b20 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
30b30 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e   {INDEXED BY} in
30b40 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45  dexedby {{INDEXE
30b50 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58  D BY} {NOT INDEX
30b60 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e  ED}}..</tcl>.<p>
30b70 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
30b80 70 68 72 61 73 65 20 66 6f 72 63 65 73 20 74 68  phrase forces th
30b90 65 20 5b 53 51 4c 69 74 65 20 71 75 65 72 79 20  e [SQLite query 
30ba0 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65 20  planner] to use 
30bb0 61 0a 70 61 72 74 69 63 75 6c 61 72 20 6e 61 6d  a.particular nam
30bc0 65 64 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b 44  ed index on a [D
30bd0 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54 5d  ELETE], [SELECT]
30be0 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  , or [UPDATE] st
30bf0 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44  atement..The IND
30c00 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69  EXED BY phrase i
30c10 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74 65  s an SQLite exte
30c20 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20 6e 6f 74  nsion and.is not
30c30 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68   portable to oth
30c40 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
30c50 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c 74  engines.</p>..<t
30c60 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
30c70 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
30c80 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
30c90 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
30ca0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 79 79 74  "INDEXED BY <yyt
30cb0 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  erm>index-name</
30cc0 79 79 74 65 72 6d 3e 22 20 70 68 72 61 73 65 20  yyterm>" phrase 
30cd0 73 70 65 63 69 66 69 65 73 20 0a 74 68 61 74 20  specifies .that 
30ce0 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a  the named index.
30cf0 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20  must be used in 
30d00 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70  order to look up
30d10 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70   values on the p
30d20 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a  receding table..
30d30 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65  ^If <yyterm>inde
30d40 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  x-name</yyterm> 
30d50 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f  does not exist o
30d60 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  r cannot be used
30d70 20 0a 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c   .for the query,
30d80 20 74 68 65 6e 20 74 68 65 20 70 72 65 70 61 72   then the prepar
30d90 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c  ation of the SQL
30da0 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73   statement fails
30db0 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44  ..^(The "NOT IND
30dc0 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65  EXED" clause spe
30dd0 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69  cifies that no i
30de0 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73  ndex shall be us
30df0 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e  ed when.accessin
30e00 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  g the preceding 
30e10 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
30e20 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
30e30 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
30e40 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
30e50 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
30e60 48 6f 77 65 76 65 72 2c 20 74 68 65 20 5b 72 6f  However, the [ro
30e70 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c 6c 20 62  wid].can still b
30e80 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75  e used to look u
30e90 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77  p entries even w
30ea0 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  hen "NOT INDEXED
30eb0 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  " is specified.)
30ec0 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53  ^</p>..<p>Some S
30ed0 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
30ee0 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d  nes provide non-
30ef0 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20  standard "hint" 
30f00 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68  mechanisms which
30f10 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
30f20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20 6f  give the query o
30f30 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61  ptimizer clues a
30f40 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63 65  bout what indice
30f50 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20  s it should.use 
30f60 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
30f70 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
30f80 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65   INDEX BY clause
30f90 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c   of SQLite is .<
30fa0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69  em>not</em> a hi
30fb0 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20  nting mechanism 
30fc0 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  and it should no
30fd0 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75 63  t be used as suc
30fe0 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20  h..^The INDEXED 
30ff0 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  BY clause does n
31000 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69  ot give the opti
31010 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75  mizer hints abou
31020 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f  t which index.to
31030 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74   use; it gives t
31040 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72  he optimizer a r
31050 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68  equirement of wh
31060 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ich index to use
31070 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79 20  ..^If the query 
31080 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61  optimizer is una
31090 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 69  ble to use the i
310a0 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20 62  ndex specified b
310b0 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63  y the.INDEX BY c
310c0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
310d0 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20  query will fail 
310e0 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  with an error.</
310f0 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58  p>..<p>The INDEX
31100 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
31110 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74  <em>not</em> int
31120 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
31130 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72 66   tuning.the perf
31140 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65  ormance of a que
31150 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20  ry.  The intent 
31160 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  of the INDEXED B
31170 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72  Y clause is.to r
31180 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20  aise a run-time 
31190 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d  error if a schem
311a0 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61  a change, such a
311b0 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72  s dropping or.cr
311c0 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c  eating an index,
311d0 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65 72   causes the quer
311e0 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d  y plan for a tim
311f0 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65 72  e-sensitive quer
31200 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68  y.to change.  Th
31210 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
31220 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  use is designed 
31230 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75  to help detect.u
31240 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72 79  ndesirable query
31250 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75   plan changes du
31260 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20  ring regression 
31270 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c 69 63 61  testing..Applica
31280 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70 65 72 73  tion .developers
31290 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20   are admonished 
312a0 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20  to omit all use 
312b0 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75  of INDEXED BY du
312c0 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ring.application
312d0 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65   design, impleme
312e0 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67  ntation, testing
312f0 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49  , and tuning.  I
31300 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f.INDEXED BY is 
31310 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c  to be used at al
31320 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  l, it should be 
31330 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
31340 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20  very.end of the 
31350 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63  development proc
31360 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e  ess when "lockin
31370 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e  g down" a design
31380 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41  .</p>..<h3>See A
31390 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a  lso:</h3>..<ol>.
313a0 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72  <li><p>The [quer
313b0 79 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c  y planner checkl
313c0 69 73 74 5d 20 64 65 73 63 72 69 62 65 73 20 73  ist] describes s
313d0 74 65 70 73 20 74 68 61 74 20 61 70 70 6c 69 63  teps that applic
313e0 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73  ation.developers
313f0 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e   should followin
31400 67 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76  g to help resolv
31410 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
31420 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65  problems..Notice
31430 20 74 68 65 20 74 68 61 74 20 74 68 65 20 75 73   the that the us
31440 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20  e of INDEXED BY 
31450 69 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74  is a last resort
31460 2c 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c  , to be used onl
31470 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72  y.when all other
31480 20 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c   measures fail.<
31490 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c  /p>..<li><p>[upl
314a0 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e  uscontrol|The un
314b0 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
314c0 5d 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ].can be used to
314d0 20 64 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d   disqualify term
314e0 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63  s in the WHERE c
314f0 6c 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62  lause from use b
31500 79 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66  y indices..Caref
31510 75 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20  ul use of unary 
31520 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  + can sometimes 
31530 68 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65  help prevent the
31540 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66   query planner f
31550 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70  rom.choosing a p
31560 6f 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75  oor index withou
31570 74 20 72 65 73 74 72 69 63 74 69 6e 67 20 69 74  t restricting it
31580 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70   to using one sp
31590 65 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61  ecific index..Ca
315a0 72 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20  reful placement 
315b0 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61  of unary + opera
315c0 74 6f 72 73 20 69 73 20 61 20 62 65 74 74 65 72  tors is a better
315d0 20 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74   method for cont
315e0 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69  rolling .which i
315f0 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64 20  ndices are used 
31600 62 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a  by a query.</p>.
31610 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c  .<li><p>The [sql
31620 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
31630 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
31640 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74  ace together wit
31650 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54  h the.[SQLITE_ST
31660 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41  MTSTATUS_FULLSCA
31670 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c  N_STEP] and [SQL
31680 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
31690 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62  ORT] verbs.can b
316a0 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  e used to detect
316b0 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65   at run-time whe
316c0 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  n an SQL stateme
316d0 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67  nt is not.making
316e0 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f   effective use o
316f0 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79  f indices.  Many
31700 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61   applications ma
31710 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20  y prefer to.use 
31720 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  the [sqlite3_stm
31730 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65  t_status()] inte
31740 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20  rface to detect 
31750 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74  index misuse.rat
31760 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44  her than the IND
31770 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64  EXED BY phrase d
31780 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f  escribed here.</
31790 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a  p>.</ol>..<tcl>.
317a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
317b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
317c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
317d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
317e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20  #############.# 
317f0 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  A list of keywor
31800 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20  ds.  A asterisk 
31810 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
31820 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69   keyword if it i
31830 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62  s on.# the fallb
31840 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20  ack list..#.set 
31850 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73  keyword_list [ls
31860 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20  ort {.   ABORT. 
31870 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a    ACTION.   ADD.
31880 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a     AFTER.   ALL.
31890 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
318a0 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53  YZE.   AND.   AS
318b0 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41 43  .   ASC.   ATTAC
318c0 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45  H.   AUTOINCREME
318d0 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20  NT.   BEFORE.   
318e0 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e  BEGIN.   BETWEEN
318f0 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44  .   BY.   CASCAD
31900 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53  E.   CASE.   CAS
31910 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f  T.   CHECK.   CO
31920 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a  LLATE.   COLUMN.
31930 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
31940 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41  FLICT.   CONSTRA
31950 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20  INT.   CREATE.  
31960 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e   CROSS.   CURREN
31970 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e  T_DATE.   CURREN
31980 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e  T_TIME.   CURREN
31990 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44  T_TIMESTAMP.   D
319a0 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55  ATABASE.   DEFAU
319b0 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20  LT.   DEFERRED. 
319c0 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20    DEFERRABLE.   
319d0 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20  DELETE.   DESC. 
319e0 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54    DETACH.   DIST
319f0 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20  INCT.   DROP.   
31a00 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45  END.   EACH.   E
31a10 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20  LSE.   ESCAPE.  
31a20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55   EXCEPT.   EXCLU
31a30 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20  SIVE.   EXISTS. 
31a40 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49    EXPLAIN.   FAI
31a50 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45  L.   FOR.   FORE
31a60 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46  IGN.   FROM.   F
31a70 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47  ULL.   GLOB.   G
31a80 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20  ROUP.   HAVING. 
31a90 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20    IF.   IGNORE. 
31aa0 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49    IMMEDIATE.   I
31ab0 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e  N.   INDEX.   IN
31ac0 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c  DEXED.   INITIAL
31ad0 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49  LY.   INNER.   I
31ae0 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44  NSERT.   INSTEAD
31af0 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20  .   INTERSECT.  
31b00 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49   INTO.   IS.   I
31b10 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20  SNULL.   JOIN.  
31b20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20   KEY.   LEFT.   
31b30 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20  LIKE.   LIMIT.  
31b40 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41   MATCH.   NATURA
31b50 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20  L.   NO.   NOT. 
31b60 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c    NOTNULL.   NUL
31b70 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45  L.   OF.   OFFSE
31b80 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20  T.   ON.   OR.  
31b90 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a   ORDER.   OUTER.
31ba0 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d     PLAN.   PRAGM
31bb0 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20  A.   PRIMARY.   
31bc0 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20  QUERY.   RAISE. 
31bd0 20 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 52    RECURSIVE.   R
31be0 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47  EFERENCES.   REG
31bf0 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20  EXP.   REINDEX. 
31c00 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e    RELEASE.   REN
31c10 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20  AME.   REPLACE. 
31c20 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49    RESTRICT.   RI
31c30 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a  GHT.   ROLLBACK.
31c40 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f     ROW.   SAVEPO
31c50 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20  INT.   SELECT.  
31c60 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20   SET.   TABLE.  
31c70 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41   TEMP.   TEMPORA
31c80 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f  RY.   THEN.   TO
31c90 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a  .   TRANSACTION.
31ca0 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e     TRIGGER.   UN
31cb0 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20  ION.   UNIQUE.  
31cc0 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47   UPDATE.   USING
31cd0 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41  .   VACUUM.   VA
31ce0 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20  LUES.   VIEW.   
31cf0 56 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48 0a  VIRTUAL.   WITH.
31d00 20 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57 48     WITHOUT.   WH
31d10 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a  EN.   WHERE.}]..
31d20 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c  hd_puts {<DIV cl
31d30 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e  ass="pdf_section
31d40 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c  ">}.Section {SQL
31d50 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65  ite Keywords} ke
31d60 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65  ywords {{*SQL ke
31d70 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77  yword} {SQL keyw
31d80 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b  ords}}.hd_puts {
31d90 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a  </DIV>}.</tcl>..
31da0 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64  <p>The SQL stand
31db0 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20  ard specifies a 
31dc0 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b  huge number of k
31dd0 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61  eywords which ma
31de0 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73  y not.be used as
31df0 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61   the names of ta
31e00 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63  bles, indices, c
31e10 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65  olumns, database
31e20 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a  s, user-defined.
31e30 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61  functions, colla
31e40 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74  tions, virtual t
31e50 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72  able modules, or
31e60 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64   any other named
31e70 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73   object..The lis
31e80 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73  t of keywords is
31e90 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65   so long that fe
31ea0 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d  w people can rem
31eb0 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a  ember them all..
31ec0 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64  For most SQL cod
31ed0 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62  e, your safest b
31ee0 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75  et is to never u
31ef0 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c  se any English l
31f00 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20  anguage.word as 
31f10 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73  the name of a us
31f20 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63  er-defined objec
31f30 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f  t.</p>..<p>If yo
31f40 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20  u want to use a 
31f50 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d  keyword as a nam
31f60 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71  e, you need to q
31f70 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a  uote it.  There.
31f80 61 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f 66  are four ways of
31f90 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64   quoting keyword
31fa0 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e  s in SQLite:</p>
31fb0 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ..<p>.<blockquot
31fc0 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09  e>.<table>.<tr>.
31fd0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
31fe0 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62  ><b>'keyword'</b
31ff0 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
32000 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  "20"></td>..<td>
32010 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69  ^A keyword in si
32020 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61  ngle quotes is a
32030 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e   string literal.
32040 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
32050 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
32060 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f  "><b>"keyword"</
32070 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
32080 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
32090 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65   in double-quote
320a0 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69  s is an identifi
320b0 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  er.</td></tr>..<
320c0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
320d0 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79  top"><b>&#91;key
320e0 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74  word&#93;</b></t
320f0 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
32100 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  >^A keyword encl
32110 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62  osed in square b
32120 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20  rackets is .    
32130 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
32140 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
32150 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
32160 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
32170 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
32180 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65   used by MS Acce
32190 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65  ss and SQL Serve
321a0 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65  r and is include
321b0 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a  d in SQLite for.
321c0 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62          compatib
321d0 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ility.</td></tr>
321e0 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
321f0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b  n="top"><b>&#96;
32200 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e  keyword&#96;</b>
32210 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
32220 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65  <td>^A keyword e
32230 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65  nclosed in grave
32240 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20   accents (ASCII 
32250 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20  code 96) is .   
32260 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
32270 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
32280 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
32290 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
322a0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
322b0 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20  s used by MySQL 
322c0 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
322d0 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
322e0 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
322f0 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
32300 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
32310 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46  uote>.</p>..<p>F
32320 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68  or resilience wh
32330 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69  en confronted wi
32340 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51  th historical SQ
32350 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51  L statements, SQ
32360 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69  Lite.will someti
32370 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f  mes bend the quo
32380 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65  ting rules above
32390 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
323a0 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64  <p>^If a keyword
323b0 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65   in single.quote
323c0 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c  s (ex: <b>'key'<
323d0 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27  /b> or <b>'glob'
323e0 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e  </b>) is used in
323f0 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
32400 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69  .an identifier i
32410 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68  s allowed but wh
32420 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
32430 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  eral is not allo
32440 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f  wed, then.the to
32450 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
32460 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74  d to be an ident
32470 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66  ifier instead of
32480 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
32490 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  l..</p></li>..<l
324a0 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f  i><p>^If a keywo
324b0 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f  rd in double.quo
324c0 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79  tes (ex: <b>"key
324d0 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f  "</b> or <b>"glo
324e0 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20  b"</b>) is used 
324f0 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
32500 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re.it cannot be 
32510 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69  resolved to an i
32520 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68  dentifier but wh
32530 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
32540 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c  eral.is allowed,
32550 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20   then the token 
32560 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
32570 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74   be a string lit
32580 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20  eral instead.of 
32590 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
325a0 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
325b0 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  p>Programmers ar
325c0 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20  e cautioned not 
325d0 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65  to use the two e
325e0 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69  xceptions descri
325f0 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69  bed in.the previ
32600 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65  ous bullets.  We
32610 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20   emphasize that 
32620 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20  they exist only 
32630 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20  so that old.and 
32640 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73  ill-formed SQL s
32650 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72  tatements will r
32660 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46  un correctly.  F
32670 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
32680 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 72  f.SQLite might r
32690 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74  aise errors inst
326a0 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67  ead of accepting
326b0 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73   the malformed.s
326c0 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65  tatements covere
326d0 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69  d by the excepti
326e0 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ons above.</p>..
326f0 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
32700 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
32710 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
32720 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
32730 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
32740 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
32750 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
32760 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
32770 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
32780 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
32790 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
327a0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
327b0 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
327c0 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
327d0 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
327e0 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
327f0 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20  .The list below 
32800 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62  shows all possib
32810 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64  le keywords used
32820 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66   by any build of
32830 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65  .SQLite regardle
32840 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74  ss of [compile-t
32850 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a  ime options].  .
32860 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20  Most reasonable 
32870 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75  configurations u
32880 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f  se most or all o
32890 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73  f these keywords
328a0 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f  ,.but some keywo
328b0 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  rds may be omitt
328c0 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67  ed when SQL lang
328d0 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72  uage features ar
328e0 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65  e.disabled..^(Re
328f0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
32900 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
32910 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20  figuration, any 
32920 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
32930 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f  is not on.the fo
32940 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f  llowing <tcl>hd_
32950 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  puts [llength $k
32960 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63  eyword_list]</tc
32970 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20  l> element.list 
32980 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64  is not a keyword
32990 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73   to the SQL pars
329a0 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f  er in SQLite:.</
329b0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
329c0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31  .<table width="1
329d0 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c  00%"><tr>.<td al
329e0 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
329f0 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
32a00 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  0%">.<tcl>.set n
32a10 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
32a20 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
32a30 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
32a40 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
32a50 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
32a60 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
32a70 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
32a80 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
32a90 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
32aa0 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
32ab0 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
32ac0 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
32ad0 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
32ae0 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
32af0 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
32b00 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c  puts "$word<br>\
32b10 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64  n".}.</tcl>.</td
32b20 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
32b30 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.