Documentation Source Text

Hex Artifact Content
Login

Artifact 1e417f215144d8cf30d0adf2d446f537b12518d8:


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 64 69 76 20 63 6c  hd_puts {<div cl
0d60: 61 73 73 3d 6e 6f 73 65 61 72 63 68 3e 7d 0a 20  ass=nosearch>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d80: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d90: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0da0: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0db0: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0dc0: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0dd0: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0de0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0df0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 20 20 68 64 5f  name</h2>".  hd_
0e00: 70 75 74 73 20 7b 3c 2f 64 69 76 3e 7d 0a 7d 0a  puts {</div>}.}.
0e10: 0a 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 23 23 23 23  ################
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20  .Section {ALTER 
0e70: 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c  TABLE} altertabl
0e80: 65 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d  e {{ALTER TABLE}
0e90: 20 7b 2a 41 4c 54 45 52 7d 7d 0a 0a 52 65 63 75   {*ALTER}}..Recu
0ea0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
0eb0: 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65 2d 73  am alter-table-s
0ec0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53  tmt.</tcl>..<p>S
0ed0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 61  QLite supports a
0ee0: 20 6c 69 6d 69 74 65 64 20 73 75 62 73 65 74 20   limited subset 
0ef0: 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45 2e 0a  of ALTER TABLE..
0f00: 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  The ALTER TABLE 
0f10: 63 6f 6d 6d 61 6e 64 20 69 6e 20 53 51 4c 69 74  command in SQLit
0f20: 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  e allows the use
0f30: 72 20 74 6f 20 72 65 6e 61 6d 65 20 61 20 74 61  r to rename a ta
0f40: 62 6c 65 0a 6f 72 20 74 6f 20 61 64 64 20 61 20  ble.or to add a 
0f50: 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e  new column to an
0f60: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e   existing table.
0f70: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65  .</p>..<p> ^(The
0f80: 20 52 45 4e 41 4d 45 20 54 4f 20 73 79 6e 74 61   RENAME TO synta
0f90: 78 20 63 68 61 6e 67 65 73 20 74 68 65 20 6e 61  x changes the na
0fa0: 6d 65 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74 61  me of <yyterm>ta
0fb0: 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
0fc0: 3e 0a 74 6f 20 3c 79 79 74 65 72 6d 3e 6e 65 77  >.to <yyterm>new
0fd0: 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  -table-name</yyt
0fe0: 65 72 6d 3e 2e 29 5e 0a 54 68 69 73 20 63 6f 6d  erm>.)^.This com
0ff0: 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62 65 20  mand .cannot be 
1000: 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61 20 74  used to move a t
1010: 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61 74 74  able between att
1020: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
1030: 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d 65 20   only to rename 
1040: 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20  .a table within 
1050: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
1060: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  e.</p>..<p> ^If 
1070: 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1080: 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72 69 67  renamed has trig
1090: 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65 73 2c  gers or indices,
10a0: 20 74 68 65 6e 20 74 68 65 73 65 20 72 65 6d 61   then these rema
10b0: 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f 20 74  in.attached to t
10c0: 68 65 20 74 61 62 6c 65 20 61 66 74 65 72 20 69  he table after i
10d0: 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e 61 6d  t has been renam
10e0: 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69  ed.  ^However, i
10f0: 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e 79 20  f there are.any 
1100: 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 73  view definitions
1110: 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  , or statements 
1120: 65 78 65 63 75 74 65 64 20 62 79 20 74 72 69 67  executed by trig
1130: 67 65 72 73 20 74 68 61 74 20 72 65 66 65 72 20  gers that refer 
1140: 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62 65 69  to.the table bei
1150: 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 73  ng renamed, thes
1160: 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61  e are not automa
1170: 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69 65 64  tically modified
1180: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 0a   to use the new.
1190: 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66 20 74  table name. If t
11a0: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 2c  his is required,
11b0: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 6f 72   the triggers or
11c0: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
11d0: 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70 70 65  s must be.droppe
11e0: 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 20  d and recreated 
11f0: 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 74  to use the new t
1200: 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68 61 6e  able name by han
1210: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  d..</p>..<blockq
1220: 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64  uote><table bord
1230: 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69  er="1" cellpaddi
1240: 6e 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64  ng="10">.<tr><td
1250: 3e 0a 3c 65 6d 3e 49 6d 70 6f 72 74 61 6e 74 20  >.<em>Important 
1260: 4e 6f 74 65 3a 3c 2f 65 6d 3e 0a 54 68 65 20 27  Note:</em>.The '
1270: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
1280: 52 45 4e 41 4d 45 20 54 4f 20 2e 2e 2e 27 20 63  RENAME TO ...' c
1290: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ommand does not 
12a0: 75 70 64 61 74 65 20 61 63 74 69 6f 6e 0a 73 74  update action.st
12b0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
12c0: 74 72 69 67 67 65 72 73 20 6f 72 20 53 45 4c 45  triggers or SELE
12d0: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  CT statements wi
12e0: 74 68 69 6e 20 76 69 65 77 73 2e 0a 49 66 20 74  thin views..If t
12f0: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1300: 65 6e 61 6d 65 64 20 69 73 20 72 65 66 65 72 65  enamed is refere
1310: 6e 63 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  nced from within
1320: 20 74 72 69 67 67 65 72 73 20 6f 72 20 76 69 65   triggers or vie
1330: 77 73 2c 0a 74 68 65 6e 20 74 68 6f 73 65 20 74  ws,.then those t
1340: 72 69 67 67 65 72 73 20 61 6e 64 20 76 69 65 77  riggers and view
1350: 73 20 6d 75 73 74 20 62 65 20 64 72 6f 70 70 65  s must be droppe
1360: 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 20  d and recreated 
1370: 73 65 70 61 72 61 74 65 6c 79 0a 62 79 20 74 68  separately.by th
1380: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 3c  e application..<
1390: 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65  /td></tr></table
13a0: 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
13b0: 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e  .<p>^If [foreign
13c0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
13d0: 5d 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f  ] are .[foreign_
13e0: 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e  keys pragma | en
13f0: 61 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61  abled] when a ta
1400: 62 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20  ble is renamed, 
1410: 74 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67  then any.[foreig
1420: 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52  n-key-clause | R
1430: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
1440: 73 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20  s] in any table 
1450: 28 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c  (either the.tabl
1460: 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20  e being renamed 
1470: 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61  or some other ta
1480: 62 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20  ble).that refer 
1490: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
14a0: 6e 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d  ng renamed are m
14b0: 6f 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72  odified to refer
14c0: 20 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64   .to the renamed
14d0: 20 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65   table by its ne
14e0: 77 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68  w name...<p> ^Th
14f0: 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e  e ADD COLUMN syn
1500: 74 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61  tax.is used to a
1510: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
1520: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
1530: 61 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63  able..^The new c
1540: 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20  olumn is always 
1550: 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20  appended to the 
1560: 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20  end of the list 
1570: 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75  of existing colu
1580: 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e  mns..The [column
1590: 2d 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e  -def] rule defin
15a0: 65 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72  es the character
15b0: 69 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65  istics of the ne
15c0: 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20  w column..^(The 
15d0: 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74  new column may t
15e0: 61 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66  ake any of the f
15f0: 6f 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c 65  orms permissible
1600: 20 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41   in a [CREATE TA
1610: 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20  BLE].statement, 
1620: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
1630: 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a  ng restrictions:
1640: 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65  )^.<ul>.<li>^The
1650: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1660: 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b  have a PRIMARY K
1670: 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e  EY or UNIQUE con
1680: 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c  straint.</li>.<l
1690: 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  i>^The column ma
16a0: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66  y not have a def
16b0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55  ault value of CU
16c0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
16d0: 45 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20 43  ENT_DATE, .    C
16e0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
16f0: 2c 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  , or an expressi
1700: 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65  on in parenthese
1710: 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20  s.</li>.<li>^If 
1720: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1730: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
1740: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
1750: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
1760: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
1770: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
1780: 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65  L..<li>^If [fore
1790: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
17a0: 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67  nts] are [foreig
17b0: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
17c0: 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20  enabled] and.   
17d0: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61   a column with a
17e0: 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c   [foreign-key-cl
17f0: 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45  ause | REFERENCE
1800: 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73  S clause].    is
1810: 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75   added, the colu
1820: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64  mn must have a d
1830: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
1840: 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  NULL..</ul>..<p>
1850: 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20  ^Note also that 
1860: 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b 43  when adding a [C
1870: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d  HECK constraint]
1880: 2c 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73  , the CHECK cons
1890: 74 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65  traint.is not te
18a0: 73 74 65 64 20 61 67 61 69 6e 73 74 20 70 72 65  sted against pre
18b0: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66  existing rows of
18c0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69   the table..^Thi
18d0: 73 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  s can result in 
18e0: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
18f0: 74 61 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a  tains data that.
1900: 69 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20  is in violation 
1910: 6f 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e  of the CHECK con
1920: 73 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65  straint.  Future
1930: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
1940: 69 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65  ite might.change
1950: 20 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45   to validate CHE
1960: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  CK constraints a
1970: 73 20 74 68 65 79 20 61 72 65 20 61 64 64 65 64  s they are added
1980: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 65  .</p>..<p> The e
1990: 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66  xecution time of
19a0: 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45   the ALTER TABLE
19b0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65   command is inde
19c0: 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61  pendent of.the a
19d0: 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e  mount of data in
19e0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
19f0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1a00: 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69  mand runs as qui
1a10: 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20  ckly.on a table 
1a20: 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20  with 10 million 
1a30: 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20  rows as it does 
1a40: 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  on a table with 
1a50: 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  1 row..</p>..<p>
1a60: 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e  After ADD COLUMN
1a70: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e   has been run on
1a80: 20 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61   a database, tha
1a90: 74 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  t database will 
1aa0: 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20  not.be readable 
1ab0: 62 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  by SQLite versio
1ac0: 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c  n 3.1.3 and earl
1ad0: 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ier.</p>..<tcl>h
1ae0: 64 5f 66 72 61 67 6d 65 6e 74 20 6f 74 68 65 72  d_fragment other
1af0: 61 6c 74 65 72 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  alter</tcl>.<h3>
1b00: 4d 61 6b 69 6e 67 20 4f 74 68 65 72 20 4b 69 6e  Making Other Kin
1b10: 64 73 20 4f 66 20 54 61 62 6c 65 20 53 63 68 65  ds Of Table Sche
1b20: 6d 61 20 43 68 61 6e 67 65 73 3c 2f 68 33 3e 0a  ma Changes</h3>.
1b30: 0a 3c 70 3e 20 54 68 65 20 6f 6e 6c 79 20 73 63  .<p> The only sc
1b40: 68 65 6d 61 20 61 6c 74 65 72 69 6e 67 20 63 6f  hema altering co
1b50: 6d 6d 61 6e 64 73 20 64 69 72 65 63 74 6c 79 20  mmands directly 
1b60: 73 75 70 70 6f 72 74 65 64 20 62 79 20 53 51 4c  supported by SQL
1b70: 69 74 65 20 61 72 65 20 74 68 65 0a 22 72 65 6e  ite are the."ren
1b80: 61 6d 65 20 74 61 62 6c 65 22 20 61 6e 64 20 22  ame table" and "
1b90: 61 64 64 20 63 6f 6c 75 6d 6e 22 20 63 6f 6d 6d  add column" comm
1ba0: 61 6e 64 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  ands shown above
1bb0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 70 70 6c  .  However, appl
1bc0: 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b  ications.can mak
1bd0: 65 20 6f 74 68 65 72 20 61 72 62 69 74 72 61 72  e other arbitrar
1be0: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
1bf0: 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 74 61 62   format of a tab
1c00: 6c 65 20 75 73 69 6e 67 20 61 20 73 69 6d 70 6c  le using a simpl
1c10: 65 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 6f 70  e.sequence of op
1c20: 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65 20 73 74  erations..The st
1c30: 65 70 73 20 74 6f 20 6d 61 6b 65 20 61 72 62 69  eps to make arbi
1c40: 74 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f  trary changes to
1c50: 20 74 68 65 20 73 63 68 65 6d 61 20 64 65 73 69   the schema desi
1c60: 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61 62 6c 65  gn of some table
1c70: 20 58 0a 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77   X.are as follow
1c80: 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ol>.<li><p>
1c90: 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  .If foreign key 
1ca0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
1cb0: 65 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62 6c 65  enabled,.disable
1cc0: 20 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41   them using [PRA
1cd0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73  GMA foreign_keys
1ce0: 20 7c 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67   | PRAGMA foreig
1cf0: 6e 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c  n_keys=OFF]...<l
1d00: 69 3e 3c 70 3e 0a 53 74 61 72 74 20 61 20 74 72  i><p>.Start a tr
1d10: 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e  ansaction...<li>
1d20: 3c 70 3e 0a 52 65 6d 65 6d 62 65 72 20 74 68 65  <p>.Remember the
1d30: 20 66 6f 72 6d 61 74 20 6f 66 20 61 6c 6c 20 69   format of all i
1d40: 6e 64 65 78 65 73 20 61 6e 64 20 74 72 69 67 67  ndexes and trigg
1d50: 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1d60: 69 74 68 20 74 61 62 6c 65 20 58 2e 0a 54 68 69  ith table X..Thi
1d70: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 69  s information wi
1d80: 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 69 6e 20  ll be needed in 
1d90: 73 74 65 70 20 38 20 62 65 6c 6f 77 2e 20 20 4f  step 8 below.  O
1da0: 6e 65 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  ne way to do thi
1db0: 73 20 69 73 0a 74 6f 20 72 75 6e 20 61 20 71 75  s is.to run a qu
1dc0: 65 72 79 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c  ery like the fol
1dd0: 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45 43 54 20 74  lowing:.SELECT t
1de0: 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71  ype, sql FROM sq
1df0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1e00: 45 20 74 62 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a  E tbl_name='X'..
1e10: 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52  .<li><p>.Use [CR
1e20: 45 41 54 45 20 54 41 42 4c 45 5d 20 74 6f 20 63  EATE TABLE] to c
1e30: 6f 6e 73 74 72 75 63 74 20 61 20 6e 65 77 20 74  onstruct a new t
1e40: 61 62 6c 65 20 22 6e 65 77 5f 58 22 20 74 68 61  able "new_X" tha
1e50: 74 20 69 73 20 69 6e 20 74 68 65 20 64 65 73 69  t is in the desi
1e60: 72 65 64 0a 72 65 76 69 73 65 64 20 66 6f 72 6d  red.revised form
1e70: 61 74 20 6f 66 20 74 61 62 6c 65 20 58 2e 20 20  at of table X.  
1e80: 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74  Make sure that t
1e90: 68 65 20 6e 61 6d 65 20 22 6e 65 77 5f 58 22 20  he name "new_X" 
1ea0: 64 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c 69 64 65  does not collide
1eb0: 0a 77 69 74 68 20 61 6e 79 20 65 78 69 73 74 69  .with any existi
1ec0: 6e 67 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 6f  ng table name, o
1ed0: 66 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c  f course...<li><
1ee0: 70 3e 0a 54 72 61 6e 73 66 65 72 20 63 6f 6e 74  p>.Transfer cont
1ef0: 65 6e 74 20 66 72 6f 6d 20 58 20 69 6e 74 6f 20  ent from X into 
1f00: 6e 65 77 5f 58 20 75 73 69 6e 67 20 61 20 73 74  new_X using a st
1f10: 61 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e  atement.like: IN
1f20: 53 45 52 54 20 49 4e 54 4f 20 6e 65 77 5f 58 20  SERT INTO new_X 
1f30: 53 45 4c 45 43 54 20 2e 2e 2e 20 46 52 4f 4d 20  SELECT ... FROM 
1f40: 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70  X...<li><p>.Drop
1f50: 20 74 68 65 20 6f 6c 64 20 74 61 62 6c 65 20 58   the old table X
1f60: 3a 20 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  :  [DROP TABLE |
1f70: 20 44 52 4f 50 20 54 41 42 4c 45 20 58 5d 2e 0a   DROP TABLE X]..
1f80: 0a 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e 67 65 20  .<li><p>.Change 
1f90: 74 68 65 20 6e 61 6d 65 20 6f 66 20 6e 65 77 5f  the name of new_
1fa0: 58 20 74 6f 20 58 20 75 73 69 6e 67 3a 20 41 4c  X to X using: AL
1fb0: 54 45 52 20 54 41 42 4c 45 20 6e 65 77 5f 58 20  TER TABLE new_X 
1fc0: 52 45 4e 41 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c  RENAME TO X...<l
1fd0: 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54  i><p>.Use [CREAT
1fe0: 45 20 49 4e 44 45 58 5d 20 61 6e 64 20 5b 43 52  E INDEX] and [CR
1ff0: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 74 6f  EATE TRIGGER] to
2000: 20 72 65 63 6f 6e 73 74 72 75 63 74 20 69 6e 64   reconstruct ind
2010: 65 78 65 73 20 61 6e 64 20 74 72 69 67 67 65 72  exes and trigger
2020: 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s.associated wit
2030: 68 20 74 61 62 6c 65 20 58 2e 20 20 50 65 72 68  h table X.  Perh
2040: 61 70 73 20 75 73 65 20 74 68 65 20 6f 6c 64 20  aps use the old 
2050: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 74 72  format of the tr
2060: 69 67 67 65 72 73 20 61 6e 64 0a 69 6e 64 65 78  iggers and.index
2070: 65 73 20 73 61 76 65 64 20 66 72 6f 6d 20 73 74  es saved from st
2080: 65 70 20 33 20 61 62 6f 76 65 20 61 73 20 61 20  ep 3 above as a 
2090: 67 75 69 64 65 2c 20 6d 61 6b 69 6e 67 20 63 68  guide, making ch
20a0: 61 6e 67 65 73 20 61 73 20 61 70 70 72 6f 70 72  anges as appropr
20b0: 69 61 74 65 0a 66 6f 72 20 74 68 65 20 61 6c 74  iate.for the alt
20c0: 65 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70  eration...<li><p
20d0: 3e 49 66 20 61 6e 79 20 76 69 65 77 73 20 72 65  >If any views re
20e0: 66 65 72 20 74 6f 20 74 61 62 6c 65 20 58 20 69  fer to table X i
20f0: 6e 20 61 20 77 61 79 20 74 68 61 74 20 69 73 20  n a way that is 
2100: 61 66 66 65 63 74 65 64 20 62 79 20 74 68 65 0a  affected by the.
2110: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 74  schema change, t
2120: 68 65 6e 20 64 72 6f 70 20 74 68 6f 73 65 20 76  hen drop those v
2130: 69 65 77 73 20 75 73 69 6e 67 20 5b 44 52 4f 50  iews using [DROP
2140: 20 56 49 45 57 5d 20 61 6e 64 20 72 65 63 72 65   VIEW] and recre
2150: 61 74 65 20 74 68 65 6d 0a 77 69 74 68 20 77 68  ate them.with wh
2160: 61 74 65 76 65 72 20 63 68 61 6e 67 65 73 20 61  atever changes a
2170: 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  re necessary to 
2180: 61 63 63 6f 6d 6d 6f 64 61 74 65 20 74 68 65 20  accommodate the 
2190: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0a 75 73  schema change.us
21a0: 69 6e 67 20 5b 43 52 45 41 54 45 20 56 49 45 57  ing [CREATE VIEW
21b0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66  ]...<li><p>.If f
21c0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
21d0: 72 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67  raints were orig
21e0: 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 0a 74  inally enabled.t
21f0: 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41 20  hen run [PRAGMA 
2200: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
2210: 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  k] to verify tha
2220: 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68 61  t the schema.cha
2230: 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65 61  nge did not brea
2240: 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b 65  k any foreign ke
2250: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a  y constraints...
2260: 0a 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20  .<li><p>.Commit 
2270: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
2280: 73 74 61 72 74 65 64 20 69 6e 20 73 74 65 70 20  started in step 
2290: 32 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66  2...<li><p>.If f
22a0: 6f 72 65 69 67 6e 20 6b 65 79 73 20 63 6f 6e 73  oreign keys cons
22b0: 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69  traints were ori
22c0: 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 2c  ginally enabled,
22d0: 20 72 65 65 6e 61 62 6c 65 20 74 68 65 6d 20 6e   reenable them n
22e0: 6f 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ow..</ol>..<p>Th
22f0: 65 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76  e procedure abov
2300: 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  e is completely 
2310: 67 65 6e 65 72 61 6c 20 61 6e 64 20 77 69 6c 6c  general and will
2320: 20 77 6f 72 6b 20 65 76 65 6e 20 69 66 20 74 68   work even if th
2330: 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20  e.schema change 
2340: 63 61 75 73 65 73 20 74 68 65 20 69 6e 66 6f 72  causes the infor
2350: 6d 61 74 69 6f 6e 20 73 74 6f 72 65 64 20 69 6e  mation stored in
2360: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 63 68   the table to ch
2370: 61 6e 67 65 2e 0a 53 6f 20 74 68 65 20 66 75 6c  ange..So the ful
2380: 6c 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76  l procedure abov
2390: 65 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  e is appropriate
23a0: 20 66 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20   for dropping a 
23b0: 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67  column,.changing
23c0: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
23d0: 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67 20 6f 72  lumns, adding or
23e0: 20 72 65 6d 6f 76 69 6e 67 20 61 20 55 4e 49 51   removing a UNIQ
23f0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 72  UE constraint.or
2400: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 64   PRIMARY KEY, ad
2410: 64 69 6e 67 20 43 48 45 43 4b 20 6f 72 20 46 4f  ding CHECK or FO
2420: 52 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54  REIGN KEY or NOT
2430: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
2440: 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e 67 20 74  s,.or changing t
2450: 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  he datatype for 
2460: 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72 20 65 78  a column, for ex
2470: 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c  ample.  However,
2480: 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e 64 20 66   a simpler.and f
2490: 61 73 74 65 72 20 70 72 6f 63 65 64 75 72 65 20  aster procedure 
24a0: 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
24b0: 65 20 75 73 65 64 20 66 6f 72 0a 73 6f 6d 65 20  e used for.some 
24c0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 64 6f 20  changes that do 
24d0: 6e 6f 20 61 66 66 65 63 74 20 74 68 65 20 6f 6e  no affect the on
24e0: 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74 20 69 6e  -disk content in
24f0: 20 61 6e 79 20 77 61 79 2e 0a 54 68 65 20 66 6f   any way..The fo
2500: 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c 65 72 20  llowing simpler 
2510: 70 72 6f 63 65 64 75 72 65 20 69 73 20 61 70 70  procedure is app
2520: 72 6f 70 72 69 61 74 65 20 66 6f 72 20 72 65 6d  ropriate for rem
2530: 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f 72 20 46  oving.CHECK or F
2540: 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f  OREIGN KEY or NO
2550: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
2560: 74 73 2c 0a 72 65 6e 61 6d 69 6e 67 20 63 6f 6c  ts,.renaming col
2570: 75 6d 6e 73 2c 20 6f 72 20 61 64 64 69 6e 67 20  umns, or adding 
2580: 6f 72 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 63  or removing or c
2590: 68 61 6e 67 69 6e 67 20 64 65 66 61 75 6c 74 20  hanging default 
25a0: 76 61 6c 75 65 73 20 6f 6e 0a 61 20 63 6f 6c 75  values on.a colu
25b0: 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70  mn...<ol>.<lI><p
25c0: 3e 20 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  > Start a transa
25d0: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  ction...<li><p> 
25e0: 52 75 6e 20 5b 50 52 41 47 4d 41 20 73 63 68 65  Run [PRAGMA sche
25f0: 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 74 6f 20 64  ma_version] to d
2600: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 63 75 72  etermine the cur
2610: 72 65 6e 74 20 73 63 68 65 6d 61 0a 76 65 72 73  rent schema.vers
2620: 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ion number.  Thi
2630: 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c 20 62 65  s number will be
2640: 20 6e 65 65 64 65 64 20 66 6f 72 20 73 74 65 70   needed for step
2650: 20 36 20 62 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c   6 below...<li><
2660: 70 3e 20 41 63 74 69 76 61 74 65 20 73 63 68 65  p> Activate sche
2670: 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67  ma editing using
2680: 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62   .[PRAGMA writab
2690: 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47  le_schema | PRAG
26a0: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
26b0: 6d 61 3d 4f 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e  ma=ON]...<li><p>
26c0: 20 52 75 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d   Run an [UPDATE]
26d0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68   statement to ch
26e0: 61 6e 67 65 20 74 68 65 20 64 65 66 69 6e 69 74  ange the definit
26f0: 69 6f 6e 20 6f 66 20 74 61 62 6c 65 20 58 0a 69  ion of table X.i
2700: 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 6d 61  n the [sqlite_ma
2710: 73 74 65 72 20 74 61 62 6c 65 5d 3a 20 0a 55 50  ster table]: .UP
2720: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
2730: 65 72 20 53 45 54 20 73 71 6c 3d 2e 2e 2e 20 57  er SET sql=... W
2740: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
2750: 27 20 41 4e 44 20 6e 61 6d 65 3d 27 58 27 3b 0a  ' AND name='X';.
2760: 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c  <p><em>Caution:<
2770: 2f 65 6d 3e 20 20 4d 61 6b 69 6e 67 20 61 20 63  /em>  Making a c
2780: 68 61 6e 67 65 20 74 6f 20 74 68 65 20 73 71 6c  hange to the sql
2790: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
27a0: 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c 6c 0a   like this will.
27b0: 72 65 6e 64 65 72 20 74 68 65 20 64 61 74 61 62  render the datab
27c0: 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e 64 20  ase corrupt and 
27d0: 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20 74 68  unreadable if th
27e0: 65 20 63 68 61 6e 67 65 20 63 6f 6e 74 61 69 6e  e change contain
27f0: 73 0a 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72  s.a syntax error
2800: 2e 20 20 49 74 20 69 73 20 73 75 67 67 65 73 74  .  It is suggest
2810: 65 64 20 74 68 61 74 20 63 61 72 65 66 75 6c 20  ed that careful 
2820: 74 65 73 74 69 6e 67 20 6f 66 20 74 68 65 20 55  testing of the U
2830: 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
2840: 62 65 20 64 6f 6e 65 20 6f 6e 20 61 20 73 65 70  be done on a sep
2850: 61 72 61 74 65 20 62 6c 61 6e 6b 20 64 61 74 61  arate blank data
2860: 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75 73  base prior to us
2870: 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74 61  ing it on.a data
2880: 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  base containing 
2890: 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 2e 0a  important data..
28a0: 0a 3c 6c 69 3e 3c 70 3e 20 49 66 20 74 68 65 20  .<li><p> If the 
28b0: 63 68 61 6e 67 65 20 74 6f 20 74 61 62 6c 65 20  change to table 
28c0: 58 20 61 6c 73 6f 20 61 66 66 65 63 74 73 20 6f  X also affects o
28d0: 74 68 65 72 20 74 61 62 6c 65 73 20 6f 72 20 69  ther tables or i
28e0: 6e 64 65 78 65 73 20 6f 72 0a 74 72 69 67 67 65  ndexes or.trigge
28f0: 72 73 20 61 72 65 20 76 69 65 77 73 20 77 69 74  rs are views wit
2900: 68 69 6e 20 73 63 68 65 6d 61 2c 20 74 68 65 6e  hin schema, then
2910: 20 72 75 6e 20 5b 55 50 44 41 54 45 5d 20 73 74   run [UPDATE] st
2920: 61 74 65 6d 65 6e 74 73 20 74 6f 20 6d 6f 64 69  atements to modi
2930: 66 79 0a 74 68 6f 73 65 20 6f 74 68 65 72 20 74  fy.those other t
2940: 61 62 6c 65 73 20 69 6e 64 65 78 65 73 20 61 6e  ables indexes an
2950: 64 20 76 69 65 77 73 20 74 6f 6f 2e 20 20 46 6f  d views too.  Fo
2960: 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68  r example, if th
2970: 65 20 6e 61 6d 65 20 6f 66 0a 61 20 63 6f 6c 75  e name of.a colu
2980: 6d 6e 20 63 68 61 6e 67 65 73 2c 20 61 6c 6c 20  mn changes, all 
2990: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
29a0: 74 72 61 69 6e 74 73 2c 20 74 72 69 67 67 65 72  traints, trigger
29b0: 73 2c 20 69 6e 64 65 78 65 73 2c 20 61 6e 64 0a  s, indexes, and.
29c0: 76 69 65 77 73 20 74 68 61 74 20 72 65 66 65 72  views that refer
29d0: 20 74 6f 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   to that column 
29e0: 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
29f0: 2e 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e  ..<p><em>Caution
2a00: 3a 3c 2f 65 6d 3e 20 20 4f 6e 63 65 20 61 67 61  :</em>  Once aga
2a10: 69 6e 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67  in, making chang
2a20: 65 73 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  es to the sqlite
2a30: 5f 6d 61 73 74 65 72 20 0a 74 61 62 6c 65 20 6c  _master .table l
2a40: 69 6b 65 20 74 68 69 73 20 77 69 6c 6c 20 72 65  ike this will re
2a50: 6e 64 65 72 20 74 68 65 20 64 61 74 61 62 61 73  nder the databas
2a60: 65 20 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e  e corrupt and un
2a70: 72 65 61 64 61 62 6c 65 20 69 66 20 74 68 65 20  readable if the 
2a80: 0a 63 68 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73  .change contains
2a90: 20 61 6e 20 65 72 72 6f 72 2e 20 20 43 61 72 65   an error.  Care
2aa0: 66 75 6c 6c 79 20 74 65 73 74 20 6f 66 20 74 68  fully test of th
2ab0: 69 73 20 65 6e 74 69 72 65 20 70 72 6f 63 65 64  is entire proced
2ac0: 75 72 65 0a 6f 6e 20 61 20 73 65 70 61 72 61 74  ure.on a separat
2ad0: 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  e test database 
2ae0: 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20 69  prior to using i
2af0: 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65 20  t on.a database 
2b00: 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f 72  containing impor
2b10: 74 61 6e 74 20 64 61 74 61 20 61 6e 64 2f 6f 72  tant data and/or
2b20: 20 6d 61 6b 65 20 62 61 63 6b 75 70 20 63 6f 70   make backup cop
2b30: 69 65 73 20 6f 66 0a 69 6d 70 6f 72 74 61 6e 74  ies of.important
2b40: 20 64 61 74 61 62 61 73 65 73 20 70 72 69 6f 72   databases prior
2b50: 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68 69 73   to running this
2b60: 20 70 72 6f 63 65 64 75 72 65 2e 0a 0a 3c 6c 69   procedure...<li
2b70: 3e 3c 70 3e 20 49 6e 63 72 65 6d 65 6e 74 20 74  ><p> Increment t
2b80: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
2b90: 6e 20 6e 75 6d 62 65 72 20 75 73 69 6e 67 0a 5b  n number using.[
2ba0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
2bb0: 72 73 69 6f 6e 20 7c 20 50 52 41 47 4d 41 20 73  rsion | PRAGMA s
2bc0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3d 58 5d  chema_version=X]
2bd0: 20 77 68 65 72 65 20 58 20 69 73 20 6f 6e 65 0a   where X is one.
2be0: 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6f 6c  more than the ol
2bf0: 64 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  d schema version
2c00: 20 6e 75 6d 62 65 72 20 66 6f 75 6e 64 20 69 6e   number found in
2c10: 20 73 74 65 70 20 32 20 61 62 6f 76 65 2e 0a 0a   step 2 above...
2c20: 3c 6c 69 3e 3c 70 3e 20 44 69 73 61 62 6c 65 20  <li><p> Disable 
2c30: 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67 20 75  schema editing u
2c40: 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20 77 72  sing .[PRAGMA wr
2c50: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20 7c 20  itable_schema | 
2c60: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
2c70: 73 63 68 65 6d 61 3d 4f 46 46 5d 2e 0a 0a 3c 6c  schema=OFF]...<l
2c80: 69 3e 3c 70 3e 20 28 4f 70 74 69 6f 6e 61 6c 29  i><p> (Optional)
2c90: 20 52 75 6e 20 5b 50 52 41 47 4d 41 20 69 6e 74   Run [PRAGMA int
2ca0: 65 67 72 69 74 79 5f 63 68 65 63 6b 5d 20 74 6f  egrity_check] to
2cb0: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
2cc0: 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 20  .schema changes 
2cd0: 64 69 64 20 6e 6f 74 20 64 61 6d 61 67 65 20 74  did not damage t
2ce0: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 6c  he database...<l
2cf0: 69 3e 3c 70 3e 20 43 6f 6d 6d 69 74 20 74 68 65  i><p> Commit the
2d00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
2d10: 72 74 65 64 20 6f 6e 20 73 74 65 70 20 31 20 61  rted on step 1 a
2d20: 62 6f 76 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  bove..</ol>..<p>
2d30: 49 66 20 73 6f 6d 65 20 66 75 74 75 72 65 20 76  If some future v
2d40: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2d50: 20 61 64 64 73 20 6e 65 77 20 41 4c 54 45 52 20   adds new ALTER 
2d60: 54 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69  TABLE capabiliti
2d70: 65 73 2c 20 0a 74 68 6f 73 65 20 63 61 70 61 62  es, .those capab
2d80: 69 6c 69 74 69 65 73 20 77 69 6c 6c 20 76 65 72  ilities will ver
2d90: 79 20 6c 69 6b 65 6c 79 20 75 73 65 20 6f 6e 65  y likely use one
2da0: 20 6f 66 20 74 68 65 20 74 77 6f 20 70 72 6f 63   of the two proc
2db0: 65 64 75 72 65 73 0a 6f 75 74 6c 69 6e 65 64 20  edures.outlined 
2dc0: 61 62 6f 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 23 20  above...<tcl>.# 
2dd0: 20 4f 6e 65 20 6f 66 20 74 68 65 20 72 65 61 73   One of the reas
2de0: 6f 6e 73 20 74 68 61 74 0a 23 20 53 51 4c 69 74  ons that.# SQLit
2df0: 65 20 64 6f 65 73 20 6e 6f 74 20 63 75 72 72 65  e does not curre
2e00: 6e 74 6c 79 20 73 75 70 70 6f 72 74 20 6d 6f 72  ntly support mor
2e10: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61  e ALTER TABLE ca
2e20: 70 61 62 69 6c 69 74 69 65 73 20 69 73 20 74 68  pabilities is th
2e30: 61 74 0a 23 20 74 68 65 20 70 72 6f 63 65 64 75  at.# the procedu
2e40: 72 65 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 69  re shown above i
2e50: 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 61  s difficult to a
2e60: 75 74 6f 6d 61 74 65 20 66 6f 72 20 61 6e 20 61  utomate for an a
2e70: 72 62 69 74 72 61 72 79 20 73 63 68 65 6d 61 2e  rbitrary schema.
2e80: 0a 23 20 50 61 72 74 69 63 75 6c 61 72 6c 79 20  .# Particularly 
2e90: 74 72 6f 75 62 6c 65 73 6f 6d 65 20 61 72 65 61  troublesome area
2ea0: 73 20 61 72 65 20 69 64 65 6e 74 69 66 79 69 6e  s are identifyin
2eb0: 67 20 61 6c 6c 20 76 69 65 77 73 20 61 73 73 6f  g all views asso
2ec0: 63 69 61 74 65 64 20 77 69 74 68 0a 23 20 74 61  ciated with.# ta
2ed0: 62 6c 65 20 58 20 69 6e 20 73 74 65 70 20 31 20  ble X in step 1 
2ee0: 61 6e 64 20 63 72 65 61 74 69 6e 67 20 6e 65 77  and creating new
2ef0: 20 76 69 65 77 73 20 61 6e 64 20 74 72 69 67 67   views and trigg
2f00: 65 72 73 20 74 68 61 74 20 61 72 65 20 63 6f 6d  ers that are com
2f10: 70 61 74 69 62 6c 65 0a 23 20 77 69 74 68 20 74  patible.# with t
2f20: 68 65 20 61 6c 74 65 72 65 64 20 73 63 68 65 6d  he altered schem
2f30: 61 20 66 6f 72 20 74 61 62 6c 65 20 58 20 69 6e  a for table X in
2f40: 20 73 74 65 70 20 36 2e 20 20 49 74 20 69 73 20   step 6.  It is 
2f50: 61 20 74 72 69 63 6b 79 20 62 75 74 20 73 6f 6c  a tricky but sol
2f60: 76 61 62 6c 65 0a 23 20 70 72 6f 62 6c 65 6d 20  vable.# problem 
2f70: 74 6f 20 63 72 65 61 74 65 20 63 6f 64 65 20 74  to create code t
2f80: 68 61 74 20 77 69 6c 6c 20 70 65 72 66 6f 72 6d  hat will perform
2f90: 20 74 68 65 20 73 74 65 70 73 20 61 62 6f 76 65   the steps above
2fa0: 20 0a 23 20 66 6f 72 20 22 72 65 61 73 6f 6e 61   .# for "reasona
2fb0: 62 6c 65 22 20 73 63 68 65 6d 61 73 20 63 6f 6d  ble" schemas com
2fc0: 6d 6f 6e 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70  monly found in p
2fd0: 72 61 63 74 69 63 65 2e 20 20 0a 23 20 42 75 74  ractice.  .# But
2fe0: 20 74 68 65 72 65 20 65 78 69 73 74 20 6d 61 6c   there exist mal
2ff0: 65 76 6f 6c 65 6e 74 20 73 63 68 65 6d 61 73 20  evolent schemas 
3000: 66 6f 72 20 77 68 69 63 68 0a 23 20 74 68 65 73  for which.# thes
3010: 65 20 73 74 65 70 73 20 61 72 65 20 6d 61 64 64  e steps are madd
3020: 65 6e 69 6e 67 6c 79 20 64 69 66 66 69 63 75 6c  eningly difficul
3030: 74 20 74 6f 20 64 6f 20 63 6f 72 72 65 63 74 6c  t to do correctl
3040: 79 2e 20 20 52 61 74 68 65 72 20 74 68 61 6e 20  y.  Rather than 
3050: 63 72 65 61 74 65 0a 23 20 41 4c 54 45 52 20 54  create.# ALTER T
3060: 41 42 4c 45 20 66 65 61 74 75 72 65 73 20 74 68  ABLE features th
3070: 61 74 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  at work correctl
3080: 79 20 39 39 2e 39 25 20 6f 66 20 74 68 65 20 74  y 99.9% of the t
3090: 69 6d 65 20 62 75 74 20 70 6f 73 73 69 62 6c 79  ime but possibly
30a0: 0a 23 20 63 6f 72 72 75 70 74 20 74 68 65 20 73  .# corrupt the s
30b0: 63 68 65 6d 61 20 6f 6e 20 74 68 65 20 6f 74 68  chema on the oth
30c0: 65 72 20 30 2e 31 25 2c 20 74 68 65 20 53 51 4c  er 0.1%, the SQL
30d0: 69 74 65 20 64 65 76 65 6c 6f 70 65 72 73 20 68  ite developers h
30e0: 61 76 65 20 64 65 63 69 64 65 64 0a 23 20 74 6f  ave decided.# to
30f0: 20 70 75 73 68 20 74 68 65 20 70 72 6f 62 6c 65   push the proble
3100: 6d 20 69 6e 74 6f 20 74 68 65 20 61 70 70 6c 69  m into the appli
3110: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 77  cation domain, w
3120: 68 65 72 65 20 69 74 20 69 73 20 6d 75 63 68 20  here it is much 
3130: 65 61 73 69 65 72 0a 23 20 74 6f 20 73 6f 6c 76  easier.# to solv
3140: 65 2e 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 74 63 6c  e..</tcl>...<tcl
3150: 3e 0a 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 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31a0: 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a  .Section {ANALYZ
31b0: 45 7d 20 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59  E} analyze ANALY
31c0: 5a 45 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  ZE..RecursiveBub
31d0: 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c 79  bleDiagram analy
31e0: 7a 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ze-stmt.</tcl>..
31f0: 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45  <p> ^The ANALYZE
3200: 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73   command gathers
3210: 20 73 74 61 74 69 73 74 69 63 73 20 61 62 6f 75   statistics abou
3220: 74 20 74 61 62 6c 65 73 20 61 6e 64 0a 69 6e 64  t tables and.ind
3230: 69 63 65 73 20 61 6e 64 20 73 74 6f 72 65 73 20  ices and stores 
3240: 74 68 65 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e  the collected in
3250: 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e  formation.in [in
3260: 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d 20 6f  ternal tables] o
3270: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
3280: 68 65 72 65 20 74 68 65 20 71 75 65 72 79 20 6f  here the query o
3290: 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a 61 63 63  ptimizer can.acc
32a0: 65 73 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  ess the informat
32b0: 69 6f 6e 20 61 6e 64 20 75 73 65 20 69 74 20 74  ion and use it t
32c0: 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62 65 74 74  o help make bett
32d0: 65 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  er query plannin
32e0: 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e  g choices..^If n
32f0: 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  o arguments are 
3300: 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74 74 61 63  given, all attac
3310: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
3320: 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66  e.analyzed.  ^If
3330: 20 61 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69   a schema name i
3340: 73 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61  s given as the a
3350: 72 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20 61 6c  rgument, then al
3360: 6c 20 74 61 62 6c 65 73 0a 61 6e 64 20 69 6e 64  l tables.and ind
3370: 69 63 65 73 20 69 6e 20 74 68 61 74 20 6f 6e 65  ices in that one
3380: 20 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e   database are an
3390: 61 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20 74 68  alyzed.  .^If th
33a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
33b0: 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 6e  table name, then
33c0: 20 6f 6e 6c 79 20 74 68 61 74 20 74 61 62 6c 65   only that table
33d0: 20 61 6e 64 20 74 68 65 0a 69 6e 64 69 63 65 73   and the.indices
33e0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
33f0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20   that table are 
3400: 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74  analyzed.  ^If t
3410: 68 65 20 61 72 67 75 6d 65 6e 74 0a 69 73 20 61  he argument.is a
3420: 6e 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20 74 68  n index name, th
3430: 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65  en only that one
3440: 20 69 6e 64 65 78 20 69 73 20 61 6e 61 6c 79 7a   index is analyz
3450: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ed.</p>..<p> ^Th
3460: 65 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d  e default implem
3470: 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65 73 20  entation stores 
3480: 61 6c 6c 20 73 74 61 74 69 73 74 69 63 73 20 69  all statistics i
3490: 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65  n a single.table
34a0: 20 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74 65 5f   named "[sqlite_
34b0: 73 74 61 74 31 5d 22 2e 20 20 5e 49 66 20 53 51  stat1]".  ^If SQ
34c0: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
34d0: 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
34e0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
34f0: 6f 70 74 69 6f 6e 20 61 6e 64 20 77 69 74 68 6f  option and witho
3500: 75 74 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  ut the [SQLITE_E
3510: 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f 70 74  NABLE_STAT4].opt
3520: 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69  ion, then additi
3530: 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64  onal histogram d
3540: 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64  ata is.collected
3550: 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b   and stored in [
3560: 73 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e 0a 20  sqlite_stat3].. 
3570: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
3580: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
3590: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
35a0: 54 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20 74 68  TAT4] option, th
35b0: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
35c0: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
35d0: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
35e0: 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f  ored in [sqlite_
35f0: 73 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20 76 65  stat4]..Older ve
3600: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
3610: 20 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20   would make use 
3620: 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73  of the [sqlite_s
3630: 74 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e  tat2] table.when
3640: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b   compiled with [
3650: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
3660: 41 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63  AT2] but all rec
3670: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ent versions of.
3680: 53 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68  SQLite ignore th
3690: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
36a0: 61 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68  able..Future enh
36b0: 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72  ancements may cr
36c0: 65 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20  eate.additional 
36d0: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
36e0: 5d 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  ] with the same 
36f0: 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63  name pattern exc
3700: 65 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64  ept with.final d
3710: 69 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e  igit larger than
3720: 20 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74 68 65   "4"..All of the
3730: 73 65 20 74 61 62 6c 65 73 20 61 72 65 20 63 6f  se tables are co
3740: 6c 6c 65 63 74 69 76 65 6c 79 20 72 65 66 65 72  llectively refer
3750: 72 65 64 20 74 6f 20 61 73 20 22 73 74 61 74 69  red to as "stati
3760: 73 74 69 63 73 20 74 61 62 6c 65 73 22 2e 0a 3c  stics tables"..<
3770: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f  /p>..<p> ^The co
3780: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
3790: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 63  tistics tables c
37a0: 61 6e 20 62 65 20 71 75 65 72 69 65 64 20 75 73  an be queried us
37b0: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64  ing [SELECT].and
37c0: 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20   can be changed 
37d0: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
37e0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E], [INSERT], an
37f0: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
3800: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
3810: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
3820: 77 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69 73 74  works on statist
3830: 69 63 73 20 74 61 62 6c 65 73 0a 61 73 20 6f 66  ics tables.as of
3840: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
3850: 33 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20 5b 41  3.7.9.)^.^The [A
3860: 4c 54 45 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d  LTER TABLE] comm
3870: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72  and does not wor
3880: 6b 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  k on statistics 
3890: 74 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70 72 69  tables..Appropri
38a0: 61 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20  ate care should 
38b0: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61  be used when cha
38c0: 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nging the conten
38d0: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
38e0: 69 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e  ics.tables as in
38f0: 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61  valid content ca
3900: 6e 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  n cause SQLite t
3910: 6f 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63  o select ineffic
3920: 69 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73  ient.query plans
3930: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65  .  Generally spe
3940: 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c  aking, one shoul
3950: 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65  d not modify the
3960: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20   content of.the 
3970: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
3980: 73 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69  s by any mechani
3990: 73 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e  sm other than in
39a0: 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59  voking the.ANALY
39b0: 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65  ZE command.  .Se
39c0: 65 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e 74 72  e "[Manual Contr
39d0: 6f 6c 20 4f 66 20 51 75 65 72 79 20 50 6c 61 6e  ol Of Query Plan
39e0: 73 20 55 73 69 6e 67 20 53 51 4c 49 54 45 5f 53  s Using SQLITE_S
39f0: 54 41 54 20 54 61 62 6c 65 73 5d 22 20 66 6f 72  TAT Tables]" for
3a00: 0a 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d 61  .further informa
3a10: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  tion.</p>..<p> ^
3a20: 53 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65  Statistics gathe
3a30: 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61  red by ANALYZE a
3a40: 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63  re not automatic
3a50: 61 6c 6c 79 20 75 70 64 61 74 65 64 20 61 73 0a  ally updated as.
3a60: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
3a70: 68 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  he database chan
3a80: 67 65 73 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ges.  If the con
3a90: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
3aa0: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 73 69 67  base.changes sig
3ab0: 6e 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69  nificantly, or i
3ac0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
3ad0: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3ae0: 68 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63  hen one should.c
3af0: 6f 6e 73 69 64 65 72 20 72 65 72 75 6e 6e 69 6e  onsider rerunnin
3b00: 67 20 74 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f  g the ANALYZE co
3b10: 6d 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74  mmand in order t
3b20: 6f 20 75 70 64 61 74 65 20 74 68 65 20 73 74 61  o update the sta
3b30: 74 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70  tistics.</p>..<p
3b40: 3e 20 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e  > The query plan
3b50: 6e 65 72 20 6c 6f 61 64 73 20 74 68 65 20 63 6f  ner loads the co
3b60: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
3b70: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 69  tistics tables.i
3b80: 6e 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20  nto memory when 
3b90: 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65  the schema is re
3ba0: 61 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77 68 65  ad.  ^Hence, whe
3bb0: 6e 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  n an application
3bc0: 0a 63 68 61 6e 67 65 73 20 74 68 65 20 73 74 61  .changes the sta
3bd0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 64  tistics tables d
3be0: 69 72 65 63 74 6c 79 2c 20 53 51 4c 69 74 65 20  irectly, SQLite 
3bf0: 77 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64 69 61  will not immedia
3c00: 74 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68 65 20  tely.notice the 
3c10: 63 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61 70 70  changes. ^An app
3c20: 6c 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72  lication.can for
3c30: 63 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  ce the query pla
3c40: 6e 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74  nner to reread t
3c50: 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61  he statistics ta
3c60: 62 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a  bles by running.
3c70: 3c 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74  <b>ANALYZE sqlit
3c80: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f  e_master</b>. </
3c90: 70 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a  p>..<p> ..<tcl>.
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 23 23 23 23 23 23  ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
3cf0: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
3d00: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
3d10: 7b 61 74 74 61 63 68 65 64 20 2a 41 54 54 41 43  {attached *ATTAC
3d20: 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  H}..RecursiveBub
3d30: 62 6c 65 44 69 61 67 72 61 6d 20 61 74 74 61 63  bleDiagram attac
3d40: 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  h-stmt.</tcl>..<
3d50: 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48 20 44  p> ^The ATTACH D
3d60: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
3d70: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
3d80: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
3d90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61   the current [da
3da0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3db0: 6e 5d 2e 20 0a 44 61 74 61 62 61 73 65 20 66 69  n]. .Database fi
3dc0: 6c 65 73 20 74 68 61 74 20 77 65 72 65 20 70 72  les that were pr
3dd0: 65 76 69 6f 75 73 6c 79 20 61 74 74 61 63 68 65  eviously attache
3de0: 64 20 63 61 6e 20 62 65 20 72 65 6d 6f 76 65 64  d can be removed
3df0: 20 75 73 69 6e 67 0a 74 68 65 20 5b 44 45 54 41   using.the [DETA
3e00: 43 48 20 44 41 54 41 42 41 53 45 5d 20 63 6f 6d  CH DATABASE] com
3e10: 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66  mand...<p>^The f
3e20: 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ilename for the 
3e30: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61  database to be a
3e40: 74 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76  ttached is the v
3e50: 61 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72  alue of.the expr
3e60: 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
3e70: 72 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53  rs before the AS
3e80: 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66   keyword..^The f
3e90: 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  ilename of the d
3ea0: 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20  atabase follows 
3eb0: 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  the same semanti
3ec0: 63 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61  cs as the.filena
3ed0: 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b  me argument to [
3ee0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20  sqlite3_open()] 
3ef0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  and [sqlite3_ope
3f00: 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65  n_v2()]; the.spe
3f10: 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d  cial name "[:mem
3f20: 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69  ory:]" results i
3f30: 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20  n an [in-memory 
3f40: 64 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e  database] and an
3f50: 0a 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65  .empty string re
3f60: 73 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74  sults in a new t
3f70: 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
3f80: 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  e..^The filename
3f90: 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65   argument can be
3fa0: 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65   a [URI filename
3fb0: 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d  ] if URI filenam
3fc0: 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20  e processing.is 
3fd0: 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61  enable on the da
3fe0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3ff0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default 
4000: 62 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a  behavior is for.
4010: 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f  URI filenames to
4020: 20 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f   be disabled, ho
4030: 77 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74  wever that might
4040: 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74   change in a fut
4050: 75 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53  ure release.of S
4060: 51 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63  QLite, so applic
4070: 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73  ation developers
4080: 20 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20   are advised to 
4090: 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79  plan accordingly
40a0: 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74  ...<p>The name t
40b0: 68 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72  hat occurs after
40c0: 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
40d0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
40e0: 68 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64  he database.used
40f0: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
4100: 51 4c 69 74 65 2e 0a 5e 54 68 65 20 73 63 68 65  QLite..^The sche
4110: 6d 61 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27 20  ma-names 'main' 
4120: 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66 65  and .'temp' refe
4130: 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64 61  r to the main da
4140: 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20 64  tabase and the d
4150: 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
4160: 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c   .temporary tabl
4170: 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20 61  es.  ^The main a
4180: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
4190: 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74 61  s cannot be atta
41a0: 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65 64  ched or.detached
41b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62  .</p>..<p> ^(Tab
41c0: 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63 68  les in an attach
41d0: 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e 20  ed database can 
41e0: 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 75  be referred to u
41f0: 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78 20  sing the syntax 
4200: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 2e  .<i>schema-name.
4210: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29  table-name</i>.)
4220: 5e 20 20 5e 49 66 20 74 68 65 20 6e 61 6d 65 20  ^  ^If the name 
4230: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  of the table is 
4240: 75 6e 69 71 75 65 0a 61 63 72 6f 73 73 20 61 6c  unique.across al
4250: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
4260: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 69  ases and the mai
4270: 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62  n and temp datab
4280: 61 73 65 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c  ases, then the.<
4290: 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
42a0: 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20  > prefix is not 
42b0: 72 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74  required.  ^If t
42c0: 77 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  wo or more table
42d0: 73 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64  s in.different d
42e0: 61 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68  atabases have th
42f0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20  e same name and 
4300: 74 68 65 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  the .<i>schema-n
4310: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
4320: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
4330: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
4340: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
4350: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
4360: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
4370: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
4380: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
4390: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
43a0: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
43b0: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
43c0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
43d0: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
43e0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
43f0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
4400: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
4410: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
4420: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
4430: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
4440: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
4450: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
4460: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
4470: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
4480: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
4490: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
44a0: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
44b0: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
44c0: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
44d0: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
44e0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
44f0: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
4500: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
4510: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
4520: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
4530: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
4540: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
4550: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
4560: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
4570: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
4580: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
4590: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
45a0: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
45b0: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
45c0: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
45d0: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
45e0: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
45f0: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
4600: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
4610: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
4620: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4630: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
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 23 23 23 23 23 23 23 23 23  ################
4660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4680: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4690: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
46a0: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
46b0: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
46c0: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65  IT ROLLBACK}..Re
46d0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
46e0: 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a  gram begin-stmt.
46f0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
4700: 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74  iagram commit-st
4710: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
4720: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
4730: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
4740: 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20  <p>.^No changes 
4750: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
4760: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
4770: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
4780: 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f  saction..^Any co
4790: 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67  mmand that chang
47a0: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
47b0: 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20  (basically, any 
47c0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65  SQL command.othe
47d0: 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29  r than [SELECT])
47e0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
47f0: 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e  lly start a tran
4800: 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69  saction if.one i
4810: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
4820: 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d   effect.  ^Autom
4830: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
4840: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
4850: 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e  e committed when
4860: 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20   the last query 
4870: 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a  finishes..</p>..
4880: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
4890: 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  s can be started
48a0: 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20   manually using 
48b0: 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e  the BEGIN.comman
48c0: 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73  d.  ^(Such trans
48d0: 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20  actions usually 
48e0: 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68  persist until th
48f0: 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72  e next.COMMIT or
4900: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
4910: 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61  d.  But a transa
4920: 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20  ction will also 
4930: 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65  .ROLLBACK if the
4940: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
4950: 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72  sed or if an err
4960: 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68  or occurs.and th
4970: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c  e ROLLBACK confl
4980: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
4990: 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
49a0: 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65  ified.)^.See the
49b0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
49c0: 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49  n the [ON CONFLI
49d0: 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61  CT].clause for a
49e0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
49f0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
4a00: 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63  ROLLBACK.conflic
4a10: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
4a20: 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  orithm..</p>..<p
4a30: 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49  >.^END TRANSACTI
4a40: 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  ON is an alias f
4a50: 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a  or COMMIT..</p>.
4a60: 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69  .<p> ^(Transacti
4a70: 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ons created usin
4a80: 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54  g BEGIN...COMMIT
4a90: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a   do not nest.)^.
4aa0: 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e  ^For nested tran
4ab0: 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68  sactions, use th
4ac0: 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e  e [SAVEPOINT] an
4ad0: 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d  d [RELEASE] comm
4ae0: 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41  ands..The "TO SA
4af0: 56 45 50 4f 49 4e 54 20 3c 79 79 74 65 72 6d 3e  VEPOINT <yyterm>
4b00: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 63  name</yyterm>" c
4b10: 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c  lause of the ROL
4b20: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68  LBACK command sh
4b30: 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61  own.in the synta
4b40: 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20  x diagram above 
4b50: 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62  is only applicab
4b60: 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54  le to [SAVEPOINT
4b70: 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  ].transactions. 
4b80: 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20   ^An attempt to 
4b90: 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e  invoke the BEGIN
4ba0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a   command within.
4bb0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
4bc0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
4bd0: 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73  error, regardles
4be0: 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65  s of whether.the
4bf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
4c00: 20 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56   started by [SAV
4c10: 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69  EPOINT] or a pri
4c20: 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43  or BEGIN..^The C
4c30: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e  OMMIT command an
4c40: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
4c50: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74  ommand without t
4c60: 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72  he TO clause.wor
4c70: 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53  k the same on [S
4c80: 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61  AVEPOINT] transa
4c90: 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64  ctions as they d
4ca0: 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69  o with transacti
4cb0: 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42  ons.started by B
4cc0: 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  EGIN.</p>..<tcl>
4cd0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65  hd_fragment imme
4ce0: 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d  diate {BEGIN IMM
4cf0: 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45  EDIATE} {BEGIN E
4d00: 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a  XCLUSIVE}</tcl>.
4d10: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
4d20: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
4d30: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
4d40: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54   exclusive.  .^T
4d50: 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73  he default trans
4d60: 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20  action behavior 
4d70: 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65  is deferred..^De
4d80: 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61  ferred means tha
4d90: 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61  t no locks are a
4da0: 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64  cquired.on the d
4db0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
4dc0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
4dd0: 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e  rst accessed.  ^
4de0: 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65  Thus with a.defe
4df0: 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rred transaction
4e00: 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74  , the BEGIN stat
4e10: 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65  ement itself doe
4e20: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
4e30: 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c  .filesystem.  ^L
4e40: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
4e50: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
4e60: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
4e70: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
4e80: 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a  ^The first read.
4e90: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
4ea0: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
4eb0: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
4ec0: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
4ed0: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
4ee0: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
4ef0: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
4f00: 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71  ^Because the acq
4f10: 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b  uisition of.lock
4f20: 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e  s is deferred un
4f30: 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65  til they are nee
4f40: 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69  ded, it is possi
4f50: 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
4f60: 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65  .thread or proce
4f70: 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20  ss could create 
4f80: 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73  a separate trans
4f90: 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65  action and write
4fa0: 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65   to.the database
4fb0: 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e   after the BEGIN
4fc0: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
4fd0: 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75  thread has execu
4fe0: 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61  ted..^If the tra
4ff0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
5000: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
5010: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
5020: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
5030: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
5040: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
5050: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
5060: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
5070: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
5080: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
5090: 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49  .  ^After a BEGI
50a0: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f  N IMMEDIATE, .no
50b0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
50c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c   connection] wil
50d0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
50e0: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
50f0: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
5100: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
5110: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
5120: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
5130: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
5140: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
5150: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
5160: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
5170: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
5180: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
5190: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
51a0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
51b0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
51c0: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
51d0: 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61  , no other [data
51e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
51f0: 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61   except for [rea
5200: 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63  d_uncommitted].c
5210: 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20  onnections will 
5220: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
5230: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
5240: 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63   no other connec
5250: 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63  tion without.exc
5260: 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  eption will be a
5270: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ble to write the
5280: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
5290: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
52a0: 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70  is.complete..</p
52b0: 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c  >..<p>.^(An impl
52c0: 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  icit transaction
52d0: 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   (a transaction 
52e0: 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20  that is started 
52f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e  automatically,.n
5300: 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ot a transaction
5310: 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49   started by BEGI
5320: 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20  N) is committed 
5330: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
5340: 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69  en.the last acti
5350: 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e  ve statement fin
5360: 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d  ishes.  A statem
5370: 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65  ent finishes whe
5380: 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73  n its.prepared s
5390: 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c  tatement is [sql
53a0: 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72  ite3_reset() | r
53b0: 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65  eset] or.[sqlite
53c0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66  3_finalize() | f
53d0: 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f  inalized].  An o
53e0: 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  pen [sqlite3_blo
53f0: 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72  b] used for.incr
5400: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
5410: 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e   counts as an un
5420: 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65  finished stateme
5430: 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  nt.  The [sqlite
5440: 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73  3_blob].finishes
5450: 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c   when it is [sql
5460: 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28  ite3_blob_close(
5470: 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c  ) | closed].)^.<
5480: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
5490: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
54a0: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
54b0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
54c0: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
54d0: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
54e0: 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72  ments.  ^However
54f0: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  , if there are p
5500: 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65  ending.write ope
5510: 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d  rations, the COM
5520: 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c  MIT command.will
5530: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
5540: 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45  ror code [SQLITE
5550: 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  _BUSY]..</p>..<p
5560: 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  >.^An attempt to
5570: 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20   execute COMMIT 
5580: 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c  might also resul
5590: 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f  t in an [SQLITE_
55a0: 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64  BUSY] return cod
55b0: 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20  e.if an another 
55c0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
55d0: 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20  s has a [shared 
55e0: 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74  lock] on the dat
55f0: 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65  abase.that preve
5600: 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73  nted the databas
5610: 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64  e from being upd
5620: 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d  ated.  ^When COM
5630: 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69  MIT fails in thi
5640: 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73  s.way, the trans
5650: 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
5660: 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f  ctive and the CO
5670: 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72  MMIT can be retr
5680: 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20  ied later.after 
5690: 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68  the reader has h
56a0: 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63  ad a chance to c
56b0: 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  lear..</p>..<p>.
56c0: 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65 72 73  In very old vers
56d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 28  ions of SQLite (
56e0: 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33  before version 3
56f0: 2e 37 2e 31 31 20 63 69 72 63 61 20 32 30 31 32  .7.11 circa 2012
5700: 2d 30 33 2d 32 30 29 0a 74 68 65 20 52 4f 4c 4c  -03-20).the ROLL
5710: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
5720: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
5730: 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  e .[SQLITE_BUSY]
5740: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
5750: 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65  y pending querie
5760: 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72 65 63  s.  ^In more rec
5770: 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent.versions of 
5780: 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f 4c 4c  SQLite, the ROLL
5790: 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63 65 65  BACK will procee
57a0: 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20 73 74  d and pending st
57b0: 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20 6f 66  atements.will of
57c0: 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64 2c 20  ten be aborted, 
57d0: 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74 6f 20  causing them to 
57e0: 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c 49 54  return an [SQLIT
57f0: 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53 51 4c  E_ABORT] or.[SQL
5800: 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
5810: 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e 20 53  CK] error..^In S
5820: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
5830: 38 2e 38 20 61 6e 64 20 6c 61 74 65 72 2c 20 61  8.8 and later, a
5840: 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20 77 69   pending read wi
5850: 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75 6e 63  ll continue func
5860: 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20 74 68  tioning.after th
5870: 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20 6c 6f  e ROLLBACK as lo
5880: 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c 42 41  ng as the ROLLBA
5890: 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69  CK does not modi
58a0: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  fy the database.
58b0: 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c 70  schema..</p>..<p
58c0: 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75  >.If [PRAGMA jou
58d0: 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65  rnal_mode] is se
58e0: 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20 64  t to OFF (thus d
58f0: 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c  isabling the rol
5900: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69  lback journal.fi
5910: 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62 65 68  le) then the beh
5920: 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c  avior of the ROL
5930: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73  LBACK command is
5940: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e   undefined..</p>
5950: 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54  ..<h3>Response T
5960: 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20  o Errors Within 
5970: 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68  A Transaction</h
5980: 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72  3>..<p> ^(If cer
5990: 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72  tain kinds of er
59a0: 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68 69  rors occur withi
59b0: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  n a transaction,
59c0: 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
59d0: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
59e0: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
59f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54  utomatically.  T
5a00: 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20 63  he.errors that c
5a10: 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75 74 6f  an cause an auto
5a20: 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b 20 69  matic rollback i
5a30: 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c  nclude:</p>..<ul
5a40: 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46  >.<li> [SQLITE_F
5a50: 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f  ULL]: database o
5a60: 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e  r disk full.<li>
5a70: 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a   [SQLITE_IOERR]:
5a80: 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a   disk I/O error.
5a90: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53  <li> [SQLITE_BUS
5aa0: 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20  Y]: database in 
5ab0: 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70  use by another p
5ac0: 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c  rocess.<li> [SQL
5ad0: 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20  ITE_NOMEM]: out 
5ae0: 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f 75 6c 3e 29  or memory.</ul>)
5af0: 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20  ^..<p>.^For all 
5b00: 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c  of these errors,
5b10: 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73   SQLite attempts
5b20: 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68   to undo just th
5b30: 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a  e one statement.
5b40: 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f  it was working o
5b50: 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e  n and leave chan
5b60: 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73  ges from prior s
5b70: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
5b80: 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61   the.same transa
5b90: 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64  ction intact and
5ba0: 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
5bb0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
5bc0: 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65   ^However, .depe
5bd0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61  nding on the sta
5be0: 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61  tement being eva
5bf0: 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 70  luated and the p
5c00: 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20 74 68  oint at which th
5c10: 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  e.error occurs, 
5c20: 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65  it might be nece
5c30: 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65  ssary for SQLite
5c40: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64   to rollback and
5c50: 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69  .cancel the enti
5c60: 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
5c70: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
5c80: 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a   can tell which.
5c90: 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e  course of action
5ca0: 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20   SQLite took by 
5cb0: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
5cc0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5cd0: 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20  t()] C-language 
5ce0: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
5cf0: 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65  <p>It is recomme
5d00: 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c 69 63  nded that applic
5d10: 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74  ations respond t
5d20: 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73  o the errors.lis
5d30: 74 65 64 20 61 62 6f 76 65 20 62 79 20 65 78 70  ted above by exp
5d40: 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20  licitly issuing 
5d50: 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  a ROLLBACK comma
5d60: 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72  nd.  ^If the .tr
5d70: 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c  ansaction has al
5d80: 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65  ready been rolle
5d90: 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63  d back automatic
5da0: 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f  ally.by the erro
5db0: 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e  r response, then
5dc0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
5dd0: 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20  mmand will fail 
5de0: 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62  with an.error, b
5df0: 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61  ut no harm is ca
5e00: 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70  used by this.</p
5e10: 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72  >..<p>Future ver
5e20: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
5e30: 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c  may extend the l
5e40: 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68  ist of errors wh
5e50: 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20  ich.might cause 
5e60: 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61  automatic transa
5e70: 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20  ction rollback. 
5e80: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
5e90: 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74   of.SQLite might
5ea0: 20 63 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f   change the erro
5eb0: 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20  r response.  In 
5ec0: 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d  particular, we m
5ed0: 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d  ay.choose to sim
5ee0: 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72 66  plify the interf
5ef0: 61 63 65 20 69 6e 20 66 75 74 75 72 65 20 76 65  ace in future ve
5f00: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
5f10: 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20   by.causing the 
5f20: 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20  errors above to 
5f30: 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69  force an uncondi
5f40: 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e  tional rollback.
5f50: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
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 23 23 23 23 23 23 23 23 23  ################
5f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fa0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
5fb0: 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20  ion {SAVEPOINT} 
5fc0: 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50  savepoint {SAVEP
5fd0: 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 52  OINT RELEASE}..R
5fe0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
5ff0: 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74 2d  agram savepoint-
6000: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
6010: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65  bbleDiagram rele
6020: 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72 73 69  ase-stmt.Recursi
6030: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
6040: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
6050: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45 50  tcl>..<p> ^SAVEP
6060: 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74 68  OINTs are a meth
6070: 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20 74  od of creating t
6080: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69 6d  ransactions, sim
6090: 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d 20  ilar to.[BEGIN] 
60a0: 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78  and [COMMIT], ex
60b0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 53 41  cept that the SA
60c0: 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c 45  VEPOINT and RELE
60d0: 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72 65  ASE commands.are
60e0: 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20 62   named and may b
60f0: 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c  e nested.</p>..<
6100: 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49 4e  p> ^The SAVEPOIN
6110: 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73  T command starts
6120: 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69   a new transacti
6130: 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e 0a  on with a name..
6140: 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  ^The transaction
6150: 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74 20   names need not 
6160: 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20 53  be unique..^(A S
6170: 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65 20  AVEPOINT can be 
6180: 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20 77  started either w
6190: 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64 65  ithin or outside
61a0: 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e   of.a [BEGIN]...
61b0: 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28 57  [COMMIT].)^  ^(W
61c0: 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54 20  hen a SAVEPOINT 
61d0: 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  is the outer-mos
61e0: 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20  t savepoint.and 
61f0: 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e  it is not within
6200: 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f   a [BEGIN]...[CO
6210: 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20 62  MMIT] then the b
6220: 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a 73  ehavior is the.s
6230: 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45 46  ame as BEGIN DEF
6240: 45 52 52 45 44 20 54 52 41 4e 53 41 43 54 49 4f  ERRED TRANSACTIO
6250: 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  N.)^</p>..<p>^Th
6260: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
6270: 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74 68  mmand reverts th
6280: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  e state of the d
6290: 61 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f 20  atabase back to 
62a0: 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73 74  what.it was just
62b0: 20 61 66 74 65 72 20 74 68 65 20 63 6f 72 72 65   after the corre
62c0: 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f 49  sponding SAVEPOI
62d0: 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74 20  NT.  ^Note that 
62e0: 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61 69  unlike that.plai
62f0: 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d  n [ROLLBACK] com
6300: 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74 68  mand (without th
6310: 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74 68  e TO keyword) th
6320: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
6330: 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20 63  mmand.does not c
6340: 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73 61  ancel the transa
6350: 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61 64  ction.  ^Instead
6360: 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20 74   of cancelling t
6370: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0a  he transaction,.
6380: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
6390: 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74 73  command restarts
63a0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
63b0: 20 61 67 61 69 6e 20 61 74 20 74 68 65 20 62 65   again at the be
63c0: 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e  ginning..^All in
63d0: 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50 4f  tervening SAVEPO
63e0: 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c 65  INTs are cancele
63f0: 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a  d, however.</p>.
6400: 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45  .<p>^The RELEASE
6410: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b 65   command is like
6420: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72 20   a [COMMIT] for 
6430: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54 68  a SAVEPOINT..^Th
6440: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
6450: 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76  d causes all sav
6460: 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20  epoints back to 
6470: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
6480: 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  e .most recent s
6490: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
64a0: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74 6f  matching name to
64b0: 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   be removed from
64c0: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
64d0: 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20 52  n stack.  ^The R
64e0: 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e 6e  ELEASE of an inn
64f0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 64  er transaction.d
6500: 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61 6e  oes not cause an
6510: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65 20  y changes to be 
6520: 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 64  written to the d
6530: 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69 74  atabase file; it
6540: 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73 20   merely.removes 
6550: 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d 20  savepoints from 
6560: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6570: 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74 20  stack such that 
6580: 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20  it is.no longer 
6590: 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c 4c  possible to ROLL
65a0: 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73 61  BACK TO those sa
65b0: 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61 20  vepoints..^If a 
65c0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
65d0: 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75 74  releases the out
65e0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
65f0: 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 72  , so.that the tr
6600: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
6610: 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20 74  becomes empty, t
6620: 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20 74  hen RELEASE is t
6630: 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d  he same.as [COMM
6640: 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49  IT]..^The [COMMI
6650: 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62  T] command may b
6660: 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61 73  e used to releas
6670: 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  e all savepoints
6680: 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65 20   and.commit the 
6690: 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65 6e  transaction even
66a0: 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   if the transact
66b0: 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ion was original
66c0: 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61 20  ly started.by a 
66d0: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
66e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 5b  d instead of a [
66f0: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  BEGIN] command.<
6700: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
6710: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
6720: 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  n a RELEASE comm
6730: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  and does not mat
6740: 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e 74  ch any.savepoint
6750: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
6760: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
6770: 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76  ack, then no sav
6780: 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65  epoints are.rele
6790: 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62 61  ased, the databa
67a0: 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c  se is unchanged,
67b0: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
67c0: 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
67d0: 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a  .an error.</p>..
67e0: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61 6e  <p>^Note that an
67f0: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
6800: 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20  on might commit 
6810: 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45 41  (using the RELEA
6820: 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20  SE command).but 
6830: 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65 20  then later have 
6840: 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20  its work undone 
6850: 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e  by a ROLLBACK in
6860: 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61   an outer transa
6870: 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72 20  ction..^A power 
6880: 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67 72  failure or progr
6890: 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20 63  am crash or OS c
68a0: 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65 20  rash will cause 
68b0: 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 74  the outer-most.t
68c0: 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f  ransaction to ro
68d0: 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67 20  llback, undoing 
68e0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
68f0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 77   have occurred w
6900: 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65 72  ithin.that outer
6910: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65 76   transaction, ev
6920: 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  en changes that 
6930: 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79 20  have supposedly 
6940: 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64 22  been "committed"
6950: 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53 45 20  .by the RELEASE 
6960: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74 65  command.  ^Conte
6970: 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  nt is not actual
6980: 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20  ly committed on 
6990: 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c 20  the disk .until 
69a0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74 72  the outermost tr
69b0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
69c0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65  s.</p>..<p>There
69d0: 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61 79   are several way
69e0: 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61 62  s of thinking ab
69f0: 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53 45 20  out the RELEASE 
6a00: 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75  command:</p>..<u
6a10: 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20  l>.<li><p>.Some 
6a20: 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c 45  people view RELE
6a30: 41 53 45 20 61 73 20 74 68 65 20 65 71 75 69 76  ASE as the equiv
6a40: 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54 20  alent of COMMIT 
6a50: 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e  for a SAVEPOINT.
6a60: 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63 63 65  .This is an acce
6a70: 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66 20  ptable point of 
6a80: 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73 20  view as long as 
6a90: 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74 68  one remembers th
6aa0: 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20 63  at the.changes c
6ab0: 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20 69  ommitted by an i
6ac0: 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  nner transaction
6ad0: 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65 20   might later be 
6ae0: 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c 6c  undone by a.roll
6af0: 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65 72  back in an outer
6b00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70   transaction.</p
6b10: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
6b20: 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66 20  Another view of 
6b30: 52 45 4c 45 41 53 45 20 69 73 20 74 68 61 74 20  RELEASE is that 
6b40: 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d 65  it merges a name
6b50: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  d transaction in
6b60: 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74 72  to its.parent tr
6b70: 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74 68  ansaction, so th
6b80: 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61  at the named tra
6b90: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73  nsaction and its
6ba0: 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a 74   parent become.t
6bb0: 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he same transact
6bc0: 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c 45  ion.  After RELE
6bd0: 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20 74  ASE, the named t
6be0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69  ransaction and i
6bf0: 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20 63  ts parent.will c
6c00: 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63  ommit or rollbac
6c10: 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61 74  k together, what
6c20: 65 76 65 72 20 74 68 65 69 72 20 66 61 74 65 20  ever their fate 
6c30: 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  may be..</p></li
6c40: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63  >..<li><p>.One c
6c50: 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f 66  an also think of
6c60: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a 22   savepoints as."
6c70: 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74 72  marks" in the tr
6c80: 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c 69  ansaction timeli
6c90: 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69 65  ne.  In this vie
6ca0: 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  w, the SAVEPOINT
6cb0: 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65 73   command.creates
6cc0: 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68 65   a new mark, the
6cd0: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
6ce0: 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68 65  mand rewinds the
6cf0: 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a 74   timeline back.t
6d00: 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20 61  o a point just a
6d10: 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20 6d  fter the named m
6d20: 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45 4c  ark, and the REL
6d30: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72 61  EASE command.era
6d40: 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20 74  ses marks from t
6d50: 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74 68  he timeline with
6d60: 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61 6b  out actually mak
6d70: 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73 20  ing any.changes 
6d80: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  to the database.
6d90: 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  .</p></li>.</ul>
6da0: 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63 74  ....<h3>Transact
6db0: 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c 65  ion Nesting Rule
6dc0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
6dd0: 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  last transaction
6de0: 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62 65   started will be
6df0: 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e 73   the first.trans
6e00: 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 64  action committed
6e10: 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   or rolled back.
6e20: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42  </p>..<p>^The [B
6e30: 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e  EGIN] command on
6e40: 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20  ly works if the 
6e50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6e60: 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69  k is empty, or.i
6e70: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66  n other words if
6e80: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65   there are no pe
6e90: 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  nding transactio
6ea0: 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72 61  ns.  ^If the tra
6eb0: 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69  nsaction.stack i
6ec0: 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65 6e  s not empty when
6ed0: 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d   the [BEGIN] com
6ee0: 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c  mand is invoked,
6ef0: 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e   then the comman
6f00: 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  d.fails with an 
6f10: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  error.</p>..<p>^
6f20: 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d  The [COMMIT] com
6f30: 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c 6c  mand commits all
6f40: 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72 61   outstanding tra
6f50: 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c 65  nsactions and le
6f60: 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61 63  aves.the transac
6f70: 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79  tion stack empty
6f80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6f90: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 73  ELEASE command s
6fa0: 74 61 72 74 73 20 77 69 74 68 20 74 68 65 20 6d  tarts with the m
6fb0: 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64 69 74  ost recent addit
6fc0: 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e 73  ion to the.trans
6fd0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e 64  action stack and
6fe0: 20 72 65 6c 65 61 73 65 73 20 73 61 76 65 70 6f   releases savepo
6ff0: 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20 0a  ints backwards .
7000: 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69 74  in time until it
7010: 20 72 65 6c 65 61 73 65 73 20 61 20 73 61 76 65   releases a save
7020: 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74  point with a mat
7030: 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d  ching savepoint-
7040: 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61 76  name..^Prior sav
7050: 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73 61  epoints, even sa
7060: 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d 61  vepoints with ma
7070: 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  tching savepoint
7080: 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63 68  -names, are.unch
7090: 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20 52  anged..^If the R
70a0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63  ELEASE command c
70b0: 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61  auses the.transa
70c0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62  ction stack to b
70d0: 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20  ecome empty (if 
70e0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
70f0: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
7100: 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73  .outermost trans
7110: 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  action from the 
7120: 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20  stack) then the 
7130: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
7140: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  its.</p>..<p>^Th
7150: 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d  e [ROLLBACK] com
7160: 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20 54  mand without a T
7170: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
7180: 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61 63  acks all transac
7190: 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73  tions.and leaves
71a0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
71b0: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
71c0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42  >..<p>^The ROLLB
71d0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  ACK command with
71e0: 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c   a TO clause rol
71f0: 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ls back transact
7200: 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b 77  ions going.backw
7210: 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61 63  ards in time bac
7220: 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65  k to the most re
7230: 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20 77  cent SAVEPOINT w
7240: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
7250: 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50 4f  ame..^The SAVEPO
7260: 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61 74  INT with the mat
7270: 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61 69  ching name remai
7280: 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73 61  ns on the transa
7290: 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75 74  ction stack,.but
72a0: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 68   all database ch
72b0: 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75 72  anges that occur
72c0: 72 65 64 20 61 66 74 65 72 20 74 68 61 74 20 53  red after that S
72d0: 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72 65  AVEPOINT was cre
72e0: 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64 20  ated.are rolled 
72f0: 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73  back.  ^If the s
7300: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e  avepoint-name in
7310: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63   a ROLLBACK TO c
7320: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 0a  ommand does not.
7330: 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50 4f  match any SAVEPO
7340: 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63 6b  INT on the stack
7350: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
7360: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c  ACK command fail
7370: 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 20  s with an.error 
7380: 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 73  and leaves the s
7390: 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61  tate of the data
73a0: 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e 3c  base unchanged.<
73b0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7400: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
7410: 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65  on comment comme
7420: 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d  nt {comment *com
7430: 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73 69 76  ments}..Recursiv
7440: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
7450: 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f  omment-syntax.</
7460: 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e  tcl>..<p>^Commen
7470: 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c 20 63  ts are not SQL c
7480: 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e  ommands, but can
7490: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68   occur within th
74a0: 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75  e text of.SQL qu
74b0: 65 72 69 65 73 20 70 61 73 73 65 64 20 74 6f 20  eries passed to 
74c0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
74d0: 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74  _v2()] and relat
74e0: 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 5e  ed interfaces..^
74f0: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74 72 65  Comments are tre
7500: 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70 61  ated as whitespa
7510: 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ce by the parser
7520: 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20  ..^Comments can 
7530: 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77  begin anywhere w
7540: 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62  hitespace .can b
7550: 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69  e found, includi
7560: 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65 73  ng inside expres
7570: 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20  sions that span 
7580: 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a  multiple lines..
7590: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f  </p>..<p>^SQL co
75a0: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74  mments begin wit
75b0: 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74 69 76  h two consecutiv
75c0: 65 20 22 2d 22 20 63 68 61 72 61 63 74 65 72 73  e "-" characters
75d0: 20 28 41 53 43 49 49 20 30 78 32 64 29 0a 61 6e   (ASCII 0x2d).an
75e0: 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61  d extend up to a
75f0: 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  nd including the
7600: 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20 63 68   next newline ch
7610: 61 72 61 63 74 65 72 20 28 41 53 43 49 49 20 30  aracter (ASCII 0
7620: 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68  x0a).or until th
7630: 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20  e end of input, 
7640: 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20  whichever comes 
7650: 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  first.</p>..<p>^
7660: 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73  C-style comments
7670: 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a 22   begin.with "/*"
7680: 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74   and extend up t
7690: 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20  o and including 
76a0: 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20 63 68  the next "*/" ch
76b0: 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f 72 20  aracter pair.or 
76c0: 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66  until the end of
76d0: 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65   input, whicheve
76e0: 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 20 20  r comes first.  
76f0: 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74  ^C-style comment
7700: 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74 69  s.can span multi
7710: 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a  ple lines. </p>.
7720: 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63 61  .<p>^Comments ca
7730: 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  n appear anywher
7740: 65 20 77 68 69 74 65 73 70 61 63 65 20 63 61 6e  e whitespace can
7750: 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e   occur,.includin
7760: 67 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73  g inside express
7770: 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68 65 20  ions and in the 
7780: 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20  middle of other 
7790: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
77a0: 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74  ^Comments do not
77b0: 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74   nest..</p>...<t
77c0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7810: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
7820: 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65  TE INDEX} create
7830: 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49  index {{CREATE I
7840: 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76  NDEX}}..Recursiv
7850: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
7860: 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74  reate-index-stmt
7870: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
7880: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
7890: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
78a0: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
78b0: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
78c0: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
78d0: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
78e0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
78f0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
7900: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
7910: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
7920: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
7930: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
7940: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
7950: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 0a 6e 61   table column.na
7960: 6d 65 73 20 61 6e 64 2f 6f 72 20 65 78 70 72 65  mes and/or expre
7970: 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
7980: 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64  used for the ind
7990: 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f  ex key..If the o
79a0: 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c  ptional WHERE cl
79b0: 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64  ause is included
79c0: 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78  , then the index
79d0: 20 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20   is a "[partial 
79e0: 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c  index]"..</p>..<
79f0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
7a00: 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65  {descidx} {desce
7a10: 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b  nding indices} {
7a20: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
7a30: 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e  } {descending in
7a40: 64 65 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  dexes}</tcl>.<p>
7a50: 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ^Each column nam
7a60: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
7a70: 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
7a80: 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65 20 22 41  by one.of the "A
7a90: 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65  SC" or "DESC" ke
7aa0: 79 77 6f 72 64 73 20 74 6f 20 69 6e 64 69 63 61  ywords to indica
7ab0: 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 0a 5e  te sort order..^
7ac0: 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d  The sort order m
7ad0: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
7ae0: 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69   ignored dependi
7af0: 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ng.on the databa
7b00: 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20  se file format, 
7b10: 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61  and in particula
7b20: 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f  r the [schema fo
7b30: 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54  rmat number]..^T
7b40: 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65  he "legacy" sche
7b50: 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67  ma format (1) ig
7b60: 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74  nores index.sort
7b70: 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65   order.  ^The de
7b80: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73  scending index s
7b90: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29  chema format (4)
7ba0: 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72   takes index sor
7bb0: 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63  t order.into acc
7bc0: 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73  ount.  Only vers
7bd0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33  ions of SQLite 3
7be0: 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20 61  .3.0 and later a
7bf0: 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72  re able to under
7c00: 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e  stand.the descen
7c10: 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61  ding index forma
7c20: 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  t. For compatibi
7c30: 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66  lity, version of
7c40: 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20   SQLite between 
7c50: 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20  3.3.0.and 3.7.9 
7c60: 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73  use the legacy s
7c70: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20  chema format by 
7c80: 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65  default.  The ne
7c90: 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  wer schema forma
7ca0: 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66  t is.used by def
7cb0: 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20  ault in version 
7cc0: 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65 72  3.7.10 and later
7cd0: 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66  ..^The [legacy_f
7ce0: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
7cf0: 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  a] can be used t
7d00: 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68 65  o change set the
7d10: 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76 69   specific.behavi
7d20: 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73 69  or for any versi
7d30: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70  on of SQLite.</p
7d40: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41  >..<p>^The COLLA
7d50: 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e  TE clause option
7d60: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65  ally following e
7d70: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a  ach column name.
7d80: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65  or expression de
7d90: 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e  fines a.collatin
7da0: 67 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  g sequence used 
7db0: 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73  for text entries
7dc0: 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e   in that column.
7dd0: 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  .^The default co
7de0: 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65  llating.sequence
7df0: 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   is the collatin
7e00: 67 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e  g sequence defin
7e10: 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  ed for that colu
7e20: 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54  mn in the.[CREAT
7e30: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
7e40: 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63  nt.  ^Or if no c
7e50: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7e60: 65 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64  e is otherwise d
7e70: 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c  efined,.the buil
7e80: 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c  t-in BINARY coll
7e90: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
7ea0: 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  s used.</p>..<tc
7eb0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
7ec0: 64 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70  dexexpr</tcl>.<p
7ed0: 3e 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  >^Expressions in
7ee0: 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f   an index may no
7ef0: 74 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65  t reference othe
7f00: 72 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79  r tables.and may
7f10: 20 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65 72   not use subquer
7f20: 69 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e  ies nor function
7f30: 73 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d  s whose result m
7f40: 69 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a  ight.change (ex:
7f50: 20 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b   [random()] or [
7f60: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
7f70: 5d 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73  ])..^Expressions
7f80: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79   in an index may
7f90: 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63   only refer to c
7fa0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
7fb0: 62 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e  ble.that is bein
7fc0: 67 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78  g indexed..Index
7fd0: 65 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  es on expression
7fe0: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77   will not work w
7ff0: 69 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ith versions of 
8000: 53 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20  SQLite prior.to 
8010: 5b 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 2e  [version 3.9.0].
8020: 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65  .See the [Indexe
8030: 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  s On Expressions
8040: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
8050: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
8060: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e  ation.about usin
8070: 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73  g general expres
8080: 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  sions in CREATE 
8090: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73  INDEX statements
80a0: 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
80b0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
80c0: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
80d0: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
80e0: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
80f0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
8100: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
8110: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
8120: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
8130: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
8140: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
8150: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
8160: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
8170: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  ...).)^</p>..<tc
8180: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
8190: 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20  iqueidx {unique 
81a0: 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  index}</tcl>.<p>
81b0: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
81c0: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
81d0: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
81e0: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
81f0: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
8200: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
8210: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
8220: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
8230: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
8240: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
8250: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
8260: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
8270: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
8280: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
8290: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
82a0: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
82b0: 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76  all other NULL v
82c0: 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68  alues and are th
82d0: 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20  us unique..This 
82e0: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  is one of the tw
82f0: 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72  o possible inter
8300: 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68  pretations of th
8310: 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72  e SQL-92 standar
8320: 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20  d.(the language 
8330: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
8340: 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e  is ambiguous) an
8350: 64 20 69 73 20 74 68 65 20 69 6e 74 65 72 70 72  d is the interpr
8360: 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64  etation.followed
8370: 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20   by PostgreSQL, 
8380: 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c  MySQL, Firebird,
8390: 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e   and Oracle.  In
83a0: 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f  formix and.Micro
83b0: 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72 20  soft SQL Server 
83c0: 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72  follow the other
83d0: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
83e0: 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e  of the standard.
83f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
8400: 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54   optional IF NOT
8410: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
8420: 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e  s present and an
8430: 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68  other index.with
8440: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
8450: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  lready exists, t
8460: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
8470: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
8480: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78  .</p>..<p>^Index
8490: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
84a0: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e  ith the [DROP IN
84b0: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
84c0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
84d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8510: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
8520: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
8530: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
8540: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
8550: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
8560: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61  iagram create-ta
8570: 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
8580: 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45 20  .<p>The "CREATE 
8590: 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69  TABLE" command i
85a0: 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  s used to create
85b0: 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
85c0: 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62  an SQLite .datab
85d0: 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54 41  ase. A CREATE TA
85e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63  BLE command spec
85f0: 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  ifies the follow
8600: 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20 6f  ing attributes o
8610: 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a  f the.new table:
8620: 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
8630: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
8640: 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  new table...  <l
8650: 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61  i><p> The databa
8660: 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  se in which the 
8670: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65  new table is cre
8680: 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79  ated. Tables may
8690: 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61 74   be .      creat
86a0: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ed in the main d
86b0: 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d  atabase, the tem
86c0: 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69  p database, or i
86d0: 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20  n any attached. 
86e0: 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a       database...
86f0: 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61    <li><p> The na
8700: 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  me of each colum
8710: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  n in the table..
8720: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64  .  <li><p> The d
8730: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
8740: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
8750: 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  he table...  <li
8760: 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76  ><p> A default v
8770: 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73 69  alue or expressi
8780: 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  on for each colu
8790: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
87a0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65  ..  <li><p> A de
87b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
87c0: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
87d0: 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e  with each column
87e0: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74  ...  <li><p> Opt
87f0: 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41  ionally, a PRIMA
8800: 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
8810: 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c  able. Both singl
8820: 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20  e column and.   
8830: 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d      composite (m
8840: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20  ultiple column) 
8850: 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65  primary keys are
8860: 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c   supported...  <
8870: 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20  li><p> A set of 
8880: 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  SQL constraints 
8890: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20  for each table. 
88a0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
88b0: 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20  UNIQUE, NOT.    
88c0: 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61     NULL, CHECK a
88d0: 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  nd FOREIGN KEY c
88e0: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c  onstraints...  <
88f0: 6c 69 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74  li><p> Whether t
8900: 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
8910: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
8920: 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45  ble..</ul>..<p>E
8930: 76 65 72 79 20 43 52 45 41 54 45 20 54 41 42 4c  very CREATE TABL
8940: 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74  E statement must
8950: 20 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20   specify a name 
8960: 66 6f 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c  for the new tabl
8970: 65 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d  e..  ^(Table nam
8980: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
8990: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65  th "sqlite_" are
89a0: 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e   reserved for in
89b0: 74 65 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20  ternal use. It. 
89c0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
89d0: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
89e0: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
89f0: 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74   name that start
8a00: 73 20 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65  s with.  "sqlite
8a10: 5f 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61  _".)^..<p> ^If a
8a20: 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
8a30: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73  name</yyterm> is
8a40: 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d   specified, it m
8a50: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22 6d  ust be either "m
8a60: 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c  ain", .  "temp",
8a70: 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   or the name of 
8a80: 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41 42  an [ATTACH DATAB
8a90: 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61 74  ASE|attached dat
8aa0: 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73  abase]. ^In this
8ab0: 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20   case.  the new 
8ac0: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
8ad0: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61   in the named da
8ae0: 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20  tabase. ^If the 
8af0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
8b00: 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20  RARY".  keyword 
8b10: 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20 74  occurs between t
8b20: 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64 20  he "CREATE" and 
8b30: 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65  "TABLE" then the
8b40: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20   new table is.  
8b50: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 74  created in the t
8b60: 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49  emp database. ^I
8b70: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
8b80: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
8b90: 0a 20 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d  .  <yyterm>schem
8ba0: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
8bb0: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20  and the TEMP or 
8bc0: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
8bd0: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20  d, unless the.  
8be0: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
8bf0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20  ame</yyterm> is 
8c00: 22 74 65 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e  "temp". .  ^If n
8c10: 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73  o schema name is
8c20: 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
8c30: 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72  he.  TEMP keywor
8c40: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
8c50: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
8c60: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  is created in th
8c70: 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73  e main.  databas
8c80: 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73  e...<p>.  ^It is
8c90: 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f   usually an erro
8ca0: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
8cb0: 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62  create a new tab
8cc0: 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  le in a database
8cd0: 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20   that.  already 
8ce0: 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65  contains a table
8cf0: 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20  , index or view 
8d00: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
8d10: 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
8d20: 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49  he.  "IF NOT EXI
8d30: 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73  STS" clause is s
8d40: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
8d50: 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54   of the CREATE T
8d60: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61  ABLE statement a
8d70: 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20  nd.  a table or 
8d80: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
8d90: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
8da0: 69 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45  ists, the CREATE
8db0: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20   TABLE command. 
8dc0: 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65   simply has no e
8dd0: 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72  ffect (and no er
8de0: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72  ror message is r
8df0: 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72  eturned). ^An er
8e00: 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72  ror is still.  r
8e10: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74  eturned if the t
8e20: 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  able cannot be c
8e30: 72 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f  reated because o
8e40: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e  f an existing in
8e50: 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20  dex, even .  if 
8e60: 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53  the "IF NOT EXIS
8e70: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
8e80: 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74  ecified...<p>^It
8e90: 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
8ea0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
8eb0: 6c 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20  le that has the 
8ec0: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20  same name as an 
8ed0: 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45  .  existing [CRE
8ee0: 41 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67  ATE TRIGGER|trig
8ef0: 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65  ger]...<p>^Table
8f00: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
8f10: 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41  ing the [DROP TA
8f20: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
8f30: 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66   </p>..<tcl>hd_f
8f40: 72 61 67 6d 65 6e 74 20 63 72 65 61 74 65 74 61  ragment createta
8f50: 62 61 73 20 7b 43 52 45 41 54 45 20 54 41 42 4c  bas {CREATE TABL
8f60: 45 20 41 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  E AS}</tcl>.<h3>
8f70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
8f80: 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65   AS SELECT State
8f90: 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ments</h3>..<p>^
8fa0: 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  (A "CREATE TABLE
8fb0: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20   ... AS SELECT" 
8fc0: 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65  statement create
8fd0: 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20  s and populates 
8fe0: 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65  a database.table
8ff0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
9000: 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
9010: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
9020: 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74  (The table has t
9030: 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f  he same.number o
9040: 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
9050: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
9060: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
9070: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
9080: 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of.each column 
9090: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
90a0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
90b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
90c0: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
90d0: 74 0a 73 65 74 20 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 2e 29 5e  ECT statement.)^
90f0: 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20   ^(The declared 
9100: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
9110: 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  umn is determine
9120: 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73  d.by the [expres
9130: 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f  sion affinity] o
9140: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
9150: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ing expression i
9160: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
9170: 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  .of the SELECT s
9180: 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c  tatement, as fol
9190: 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e  lows:.</p>..<cen
91a0: 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ter><table borde
91b0: 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45  r=1>.  <tr><th>E
91c0: 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69  xpression Affini
91d0: 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20  ty   <th>Column 
91e0: 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20  Declared Type.  
91f0: 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20  <tr><td>TEXT    
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
9210: 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c  d>"TEXT".  <tr><
9220: 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20  td>NUMERIC      
9230: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55           <td>"NU
9240: 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54  M".  <tr><td>INT
9250: 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20  EGER            
9260: 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c     <td>"INT".  <
9270: 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20  tr><td>REAL     
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
9290: 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74  >"REAL".  <tr><t
92a0: 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20  d>NONE          
92b0: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28          <td>"" (
92c0: 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f  empty string).</
92d0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
92e0: 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20  ^..<p>^(A table 
92f0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
9300: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61  EATE TABLE AS ha
9310: 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  s no PRIMARY KEY
9320: 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69   and no.constrai
9330: 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e  nts of any kind.
9340: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
9350: 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ue of each colum
9360: 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64  n is NULL. The d
9370: 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e  efault.collation
9380: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
9390: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
93a0: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49   new table is BI
93b0: 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62  NARY.)^..<p>^Tab
93c0: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
93d0: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
93e0: 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  S are initially 
93f0: 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
9400: 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20  he.rows of data 
9410: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
9420: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
9430: 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69  . ^Rows are assi
9440: 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  gned contiguousl
9450: 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77  y.ascending [row
9460: 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72  id] values, star
9470: 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20  ting with 1, in 
9480: 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72  the [order by|or
9490: 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61  der] that they.a
94a0: 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
94b0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
94c0: 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ent...<tcl>hd_fr
94d0: 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c  agment {tablecol
94e0: 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  def} {column def
94f0: 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e  inition} {column
9500: 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74   definitions}</t
9510: 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44  cl>.<h3>Column D
9520: 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a  efinitions</h3>.
9530: 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73  .<p>Unless it is
9540: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
9550: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74  ... AS SELECT st
9560: 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54  atement, a CREAT
9570: 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73  E TABLE includes
9580: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f  .one or more [co
9590: 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20  lumn-def|column 
95a0: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70  definitions], op
95b0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
95c0: 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b  d by a list of.[
95d0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
95e0: 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  |table constrain
95f0: 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d  ts].  Each colum
9600: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e  n definition con
9610: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  sists of the.nam
9620: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
9630: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
9640: 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c  owed by the decl
9650: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ared type of the
9660: 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e   column,.then on
9670: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
9680: 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  al [column-const
9690: 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e  raint|column con
96a0: 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75  straints]. Inclu
96b0: 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e  ded in.the defin
96c0: 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e  ition of "column
96d0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f   constraints" fo
96e0: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
96f0: 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73  f the previous.s
9700: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65  tatement are the
9710: 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46   COLLATE and DEF
9720: 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76  AULT clauses, ev
9730: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20  en though these 
9740: 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63  are not really.c
9750: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68  onstraints in th
9760: 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65  e sense that the
9770: 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63  y do not restric
9780: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
9790: 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f  the table may.co
97a0: 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72  ntain. The other
97b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e   constraints - N
97c0: 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20  OT NULL, CHECK, 
97d0: 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20  UNIQUE, PRIMARY 
97e0: 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20  KEY and.FOREIGN 
97f0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
9800: 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63  - impose restric
9810: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62  tions on the tab
9820: 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72  les data, and ar
9830: 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20  e are.described 
9840: 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e  under [constrain
9850: 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  ts|SQL Data Cons
9860: 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a  traints] below..
9870: 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74  .<p>^Unlike most
9880: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20   SQL databases, 
9890: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
98a0: 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70  restrict the typ
98b0: 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d  e of data that.m
98c0: 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69  ay be inserted i
98d0: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73  nto a column bas
98e0: 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed on the column
98f0: 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e  s declared type.
9900: 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65   Instead,.SQLite
9910: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
9920: 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63  yping]. ^The dec
9930: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20  lared type of a 
9940: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
9950: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o.determine the 
9960: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
9970: 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a  e column only...
9980: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9990: 20 64 66 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c   dfltval {defaul
99a0: 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20  t column value} 
99b0: 7b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c  {default value}<
99c0: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46  /tcl>.<p>The DEF
99d0: 41 55 4c 54 20 63 6c 61 75 73 65 20 73 70 65 63  AULT clause spec
99e0: 69 66 69 65 73 20 61 20 64 65 66 61 75 6c 74 20  ifies a default 
99f0: 76 61 6c 75 65 20 74 6f 20 75 73 65 20 66 6f 72  value to use for
9a00: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e   the column if n
9a10: 6f 0a 76 61 6c 75 65 20 69 73 20 65 78 70 6c 69  o.value is expli
9a20: 63 69 74 6c 79 20 70 72 6f 76 69 64 65 64 20 62  citly provided b
9a30: 79 20 74 68 65 20 75 73 65 72 20 77 68 65 6e 20  y the user when 
9a40: 64 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54  doing an [INSERT
9a50: 5d 2e 20 5e 49 66 20 74 68 65 72 65 0a 69 73 20  ]. ^If there.is 
9a60: 6e 6f 20 65 78 70 6c 69 63 69 74 20 44 45 46 41  no explicit DEFA
9a70: 55 4c 54 20 63 6c 61 75 73 65 20 61 74 74 61 63  ULT clause attac
9a80: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
9a90: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e  definition, then
9aa0: 20 74 68 65 20 0a 64 65 66 61 75 6c 74 20 76 61   the .default va
9ab0: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  lue of the colum
9ac0: 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20  n is NULL. ^(An 
9ad0: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
9ae0: 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63   clause may spec
9af0: 69 66 79 0a 74 68 61 74 20 74 68 65 20 64 65 66  ify.that the def
9b00: 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 4e 55  ault value is NU
9b10: 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  LL, a string con
9b20: 73 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f  stant, a blob co
9b30: 6e 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64  nstant, a.signed
9b40: 2d 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20  -number, or any 
9b50: 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  constant express
9b60: 69 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ion enclosed in 
9b70: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 41 0a 64  parentheses. A.d
9b80: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79  efault value may
9b90: 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20   also be one of 
9ba0: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
9bb0: 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79  -independent key
9bc0: 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49  words.CURRENT_TI
9bd0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
9be0: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
9bf0: 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68  STAMP.)^ ^For th
9c00: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
9c10: 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  e.DEFAULT clause
9c20: 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  , an expression 
9c30: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  is considered co
9c40: 6e 73 74 61 6e 74 20 69 66 20 69 74 20 64 6f 65  nstant if it doe
9c50: 73 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 73 75  s.contains no su
9c60: 62 2d 71 75 65 72 69 65 73 2c 20 63 6f 6c 75 6d  b-queries, colum
9c70: 6e 20 6f 72 20 74 61 62 6c 65 20 72 65 66 65 72  n or table refer
9c80: 65 6e 63 65 73 2c 20 5b 62 6f 75 6e 64 20 70 61  ences, [bound pa
9c90: 72 61 6d 65 74 65 72 73 5d 2c 0a 6f 72 20 73 74  rameters],.or st
9ca0: 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 65 6e  ring literals en
9cb0: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
9cc0: 2d 71 75 6f 74 65 73 20 69 6e 73 74 65 61 64 20  -quotes instead 
9cd0: 6f 66 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73  of single-quotes
9ce0: 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20 74 69 6d  ...<p>^(Each tim
9cf0: 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72  e a row is inser
9d00: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
9d10: 6c 65 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20  le by an INSERT 
9d20: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 0a  statement that .
9d30: 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65  does not provide
9d40: 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73   explicit values
9d50: 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 20 63   for all table c
9d60: 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65  olumns the value
9d70: 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68 65 20  s stored in.the 
9d80: 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65 74 65  new row are dete
9d90: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69 72 20  rmined by their 
9da0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 29 5e  default values)^
9db0: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  , as follows:..<
9dc0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  ul>.  <li><p>^If
9dd0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9de0: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
9df0: 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 4e   is a constant N
9e00: 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20  ULL, text, blob 
9e10: 6f 72 0a 20 20 20 20 73 69 67 6e 65 64 2d 6e 75  or.    signed-nu
9e20: 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e  mber value, then
9e30: 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 75   that value is u
9e40: 73 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20  sed directly in 
9e50: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
9e60: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
9e70: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
9e80: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  a column is an e
9e90: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
9ea0: 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e 0a 20  entheses, then. 
9eb0: 20 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f     the expressio
9ec0: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
9ed0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77  nce for each row
9ee0: 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68   inserted and th
9ef0: 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20 75 73  e results.    us
9f00: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
9f10: 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  w...  <li><p>^If
9f20: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9f30: 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ue of a column i
9f40: 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s CURRENT_TIME, 
9f50: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 0a  CURRENT_DATE or.
9f60: 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45      CURRENT_TIME
9f70: 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68 65 20  STAMP, then the 
9f80: 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68  value used in th
9f90: 65 20 6e 65 77 20 72 6f 77 20 69 73 20 61 20 74  e new row is a t
9fa0: 65 78 74 0a 20 20 20 20 72 65 70 72 65 73 65 6e  ext.    represen
9fb0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75  tation of the cu
9fc0: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
9fd0: 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 46 6f 72  nd/or time. ^For
9fe0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74   CURRENT_TIME, t
9ff0: 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 6f 66  he.    format of
a000: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 22 48   the value is "H
a010: 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72 20 43  H:MM:SS". ^For C
a020: 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22 59 59  URRENT_DATE, "YY
a030: 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68 65 0a  YY-MM-DD". ^The.
a040: 20 20 20 20 66 6f 72 6d 61 74 20 66 6f 72 20 43      format for C
a050: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a060: 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20   is "YYYY-MM-DD 
a070: 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e  HH:MM:SS"..</ul>
a080: 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  ..<p>^The COLLAT
a090: 45 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  E clause specifi
a0a0: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  es the name of a
a0b0: 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
a0c0: 65 6e 63 65 5d 20 74 6f 20 75 73 65 20 61 73 0a  ence] to use as.
a0d0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
a0e0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
a0f0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e  or the column. ^
a100: 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c  If no COLLATE cl
a110: 61 75 73 65 20 69 73 0a 73 70 65 63 69 66 69 65  ause is.specifie
a120: 64 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  d, the default c
a130: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a140: 65 20 69 73 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a  e is [BINARY]...
a150: 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  <p>^The number o
a160: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74  f columns in a t
a170: 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20  able is limited 
a180: 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  by the [SQLITE_M
a190: 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69  AX_COLUMN].compi
a1a0: 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65  le-time paramete
a1b0: 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20 72 6f 77  r. ^A single row
a1c0: 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61 6e 6e   of a table cann
a1d0: 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20 74 68  ot store more th
a1e0: 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  an.[SQLITE_MAX_L
a1f0: 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f 66 20  ENGTH] bytes of 
a200: 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f 66 20 74  data. ^Both of t
a210: 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20  hese limits can 
a220: 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a 72 75  be lowered at.ru
a230: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
a240: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
a250: 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
a260: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
a270: 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e 73 74 72  fragment {constr
a280: 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74 72 61 69  aints} {constrai
a290: 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53  nts}</tcl>.<h3>S
a2a0: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
a2b0: 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68  nts</h3>..<tcl>h
a2c0: 64 5f 66 72 61 67 6d 65 6e 74 20 70 72 69 6d 6b  d_fragment primk
a2d0: 65 79 63 6f 6e 73 74 20 7b 50 52 49 4d 41 52 59  eyconst {PRIMARY
a2e0: 20 4b 45 59 7d 20 7b 50 52 49 4d 41 52 59 20 4b   KEY} {PRIMARY K
a2f0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  EY constraint}</
a300: 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20 74 61  tcl>.<p>^Each ta
a310: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 6d 61  ble in SQLite ma
a320: 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74 20 6f  y have at most o
a330: 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59 20 4b 45  ne <b>PRIMARY KE
a340: 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68 65 0a 20  Y</b>. ^If the. 
a350: 20 6b 65 79 77 6f 72 64 73 20 50 52 49 4d 41 52   keywords PRIMAR
a360: 59 20 4b 45 59 20 61 72 65 20 61 64 64 65 64 20  Y KEY are added 
a370: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
a380: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
a390: 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 20 20 66   primary key.  f
a3a0: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  or the table con
a3b0: 73 69 73 74 73 20 6f 66 20 74 68 61 74 20 73 69  sists of that si
a3c0: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72  ngle column. ^Or
a3d0: 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59 20 4b  , if a PRIMARY K
a3e0: 45 59 20 63 6c 61 75 73 65 20 0a 20 20 69 73 20  EY clause .  is 
a3f0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 5b  specified as a [
a400: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
a410: 5d 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  ], then the prim
a420: 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65 20 74  ary key of the t
a430: 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73 74 73 20  able.  consists 
a440: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  of the list of c
a450: 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64  olumns specified
a460: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
a470: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a480: 73 65 2e 0a 20 20 5e 54 68 65 20 50 52 49 4d 41  se..  ^The PRIMA
a490: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 6d 75  RY KEY clause mu
a4a0: 73 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20  st contain only 
a4b0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64  column names &md
a4c0: 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66 20  ash; the use of 
a4d0: 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  .  expressions i
a4e0: 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f  n an [indexed-co
a4f0: 6c 75 6d 6e 5d 20 6f 66 20 61 20 50 52 49 4d 41  lumn] of a PRIMA
a500: 52 59 20 4b 45 59 20 69 73 20 6e 6f 74 20 73 75  RY KEY is not su
a510: 70 70 6f 72 74 65 64 2e 0a 20 20 5e 41 6e 20 65  pported..  ^An e
a520: 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 69  rror is raised i
a530: 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  f more than one 
a540: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a550: 73 65 20 61 70 70 65 61 72 73 20 69 6e 20 61 0a  se appears in a.
a560: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73    CREATE TABLE s
a570: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
a580: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f  PRIMARY KEY is o
a590: 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69  ptional for ordi
a5a0: 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20 62 75  nary tables.  bu
a5b0: 74 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  t is required fo
a5c0: 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  r [WITHOUT ROWID
a5d0: 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66  ] tables...<p>If
a5e0: 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20 73   a table has a s
a5f0: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70 72 69  ingle column pri
a600: 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65  mary key and the
a610: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
a620: 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d 6e 20  f that.  column 
a630: 69 73 20 22 49 4e 54 45 47 45 52 22 20 61 6e 64  is "INTEGER" and
a640: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f   the table is no
a650: 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  t a [WITHOUT ROW
a660: 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74 68 65  ID] table,.  the
a670: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  n the column is 
a680: 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49 4e 54  known as an [INT
a690: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a6a0: 5d 2e 0a 20 20 53 65 65 20 5b 72 6f 77 69 64 7c  ]..  See [rowid|
a6b0: 62 65 6c 6f 77 5d 20 66 6f 72 20 61 20 64 65 73  below] for a des
a6c0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
a6d0: 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69  special properti
a6e0: 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73  es and behaviors
a6f0: 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  .  associated wi
a700: 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  th an [INTEGER P
a710: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70  RIMARY KEY]...<p
a720: 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20  >^Each row in a 
a730: 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69  table with a pri
a740: 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61  mary key must ha
a750: 76 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  ve a unique comb
a760: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
a770: 75 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61  ues in its prima
a780: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20  ry key columns. 
a790: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
a7a0: 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
a7b0: 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73  .  the uniquenes
a7c0: 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79  s of primary key
a7d0: 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61   values, NULL va
a7e0: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
a7f0: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
a800: 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  m.  all other va
a810: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
a820: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66  other NULLs. ^If
a830: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20   an [INSERT] or 
a840: 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65  [UPDATE].  state
a850: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a860: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
a870: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
a880: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
a890: 77 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69  ws.  have identi
a8a0: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
a8b0: 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20  values, that is 
a8c0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a8d0: 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63  lation...<p> Acc
a8e0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51  ording to the SQ
a8f0: 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d  L standard, PRIM
a900: 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61  ARY KEY should a
a910: 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20  lways imply NOT 
a920: 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e  NULL..  Unfortun
a930: 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20  ately, due to a 
a940: 62 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c  bug in some earl
a950: 79 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73  y versions, this
a960: 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61   is not the.  ca
a970: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55  se in SQLite. ^U
a980: 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e  nless the column
a990: 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   is an [INTEGER 
a9a0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a  PRIMARY KEY] or.
a9b0: 20 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61    the table is a
a9c0: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
a9d0: 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f   table or the co
a9e0: 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64  lumn is declared
a9f0: 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c   NOT NULL,.  SQL
aa00: 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20  ite allows NULL 
aa10: 76 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d  values in a PRIM
aa20: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20  ARY KEY column. 
aa30: 20 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65   SQLite could be
aa40: 20 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66   fixed to.  conf
aa50: 6f 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64  orm to the stand
aa60: 61 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73  ard, but doing s
aa70: 6f 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65  o might break le
aa80: 67 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  gacy application
aa90: 73 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68  s..  Hence, it h
aaa0: 61 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20  as been decided 
aab0: 74 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65  to merely docume
aac0: 6e 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74  nt the fact that
aad0: 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69   SQLite.  allowi
aae0: 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74  ng NULLs in most
aaf0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
ab00: 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  umns...<tcl>hd_f
ab10: 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f  ragment uniqueco
ab20: 6e 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e  nst {UNIQUE} {un
ab30: 69 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d  ique constraint}
ab40: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
ab50: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
ab60: 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63   <b>UNIQUE</b> c
ab70: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
ab80: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
ab90: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
aba0: 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20  , except.  that 
abb0: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
abc0: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
abd0: 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  er of UNIQUE con
abe0: 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65  straints. ^For e
abf0: 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e  ach.  UNIQUE con
ac00: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
ac10: 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d  able, each row m
ac20: 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e  ust contain a un
ac30: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
ac40: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
ac50: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e  the columns iden
ac60: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
ac70: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
ac80: 20 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72   .  ^For the pur
ac90: 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20  poses of UNIQUE 
aca0: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c  constraints, NUL
acb0: 4c 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63  L values.  are c
acc0: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
acd0: 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65  ct from all othe
ace0: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
acf0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
ad00: 0a 20 20 5e 41 73 20 77 69 74 68 20 50 52 49 4d  .  ^As with PRIM
ad10: 41 52 59 20 4b 45 59 73 2c 20 61 20 55 4e 49 51  ARY KEYs, a UNIQ
ad20: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
ad30: 61 69 6e 74 5d 20 63 6c 61 75 73 65 20 6d 75 73  aint] clause mus
ad40: 74 20 63 6f 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79  t contain.  only
ad50: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d   column names &m
ad60: 64 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66  dash; the use of
ad70: 20 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20   .  expressions 
ad80: 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63  in an [indexed-c
ad90: 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 55 4e 49 51  olumn] of a UNIQ
ada0: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
adb0: 61 69 6e 74 5d 0a 20 20 69 73 20 6e 6f 74 20 73  aint].  is not s
adc0: 75 70 70 6f 72 74 65 64 2e 0a 20 20 0a 0a 3c 70  upported..  ..<p
add0: 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c  >^In most cases,
ade0: 20 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d   UNIQUE and PRIM
adf0: 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72  ARY KEY.  constr
ae00: 61 69 6e 74 73 20 61 72 65 20 69 6d 70 6c 65 6d  aints are implem
ae10: 65 6e 74 65 64 20 62 79 20 63 72 65 61 74 69 6e  ented by creatin
ae20: 67 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  g a unique index
ae30: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
ae40: 2e 0a 20 20 28 54 68 65 20 65 78 63 65 70 74 69  ..  (The excepti
ae50: 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45 47 45 52  ons are [INTEGER
ae60: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e   PRIMARY KEY] an
ae70: 64 20 50 52 49 4d 41 52 59 20 4b 45 59 73 20 6f  d PRIMARY KEYs o
ae80: 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  n .  [WITHOUT RO
ae90: 57 49 44 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20  WID] tables.).  
aea0: 48 65 6e 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Hence, the follo
aeb0: 77 69 6e 67 20 73 63 68 65 6d 61 73 20 61 72 65  wing schemas are
aec0: 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
aed0: 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20  alent:..  <ol>. 
aee0: 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54   <li><p>CREATE T
aef0: 41 42 4c 45 20 74 31 28 61 2c 20 62 20 55 4e 49  ABLE t1(a, b UNI
af00: 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43  QUE);.  <li><p>C
af10: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
af20: 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29  , b PRIMARY KEY)
af30: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
af40: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
af50: 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 20 43  ;<br>.         C
af60: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
af70: 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b  EX t1b ON t1(b);
af80: 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68  .  </ol>..<tcl>h
af90: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f  d_fragment {ckco
afa0: 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48  nst} {CHECK} {CH
afb0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  ECK constraint} 
afc0: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
afd0: 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41  ts}</tcl>.<p>^(A
afe0: 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f   <b>CHECK</b> co
aff0: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20  nstraint may be 
b000: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
b010: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
b020: 6f 72 0a 20 20 73 70 65 63 69 66 69 65 64 20 61  or.  specified a
b030: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
b040: 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63  aint. In practic
b050: 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69  e it makes no di
b060: 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61  fference.)^ ^(Ea
b070: 63 68 0a 20 20 74 69 6d 65 20 61 20 6e 65 77 20  ch.  time a new 
b080: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
b090: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
b0a0: 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f  r an existing ro
b0b0: 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 20 20  w is updated,.  
b0c0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  the expression a
b0d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
b0e0: 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ach CHECK constr
b0f0: 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65  aint is evaluate
b100: 64 20 61 6e 64 0a 20 20 63 61 73 74 20 74 6f 20  d and.  cast to 
b110: 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20  a NUMERIC value 
b120: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
b130: 61 73 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  as a [CAST expre
b140: 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a  ssion]. If the .
b150: 20 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f    result is zero
b160: 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
b170: 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
b180: 30 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e  0.0), then a con
b190: 73 74 72 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74  straint.  violat
b1a0: 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64  ion has occurred
b1b0: 2e 29 5e 20 5e 49 66 20 74 68 65 20 43 48 45 43  .)^ ^If the CHEC
b1c0: 4b 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  K expression eva
b1d0: 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20  luates to NULL, 
b1e0: 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65 72 20 6e  or.  any other n
b1f0: 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69  on-zero value, i
b200: 74 20 69 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74  t is not a const
b210: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e  raint violation.
b220: 0a 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
b230: 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b 20 63 6f  on of a CHECK co
b240: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74  nstraint may not
b250: 20 63 6f 6e 74 61 69 6e 20 61 20 73 75 62 71 75   contain a subqu
b260: 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ery...<tcl>hd_fr
b270: 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63  agment {notnullc
b280: 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d  onst} {NOT NULL}
b290: 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74   {NOT NULL const
b2a0: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
b2b0: 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f  ^A <b>NOT NULL</
b2c0: 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61  b> constraint ma
b2d0: 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68  y only be attach
b2e0: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
b2f0: 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74  efinition,.  not
b300: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b310: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b320: 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e  .  Not surprisin
b330: 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c  gly, ^(a NOT NUL
b340: 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  L.  constraint d
b350: 69 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65  ictates that the
b360: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75   associated colu
b370: 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  mn may not conta
b380: 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e  in a NULL value.
b390: 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  .  Attempting to
b3a0: 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   set the column 
b3b0: 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68  value to NULL wh
b3c0: 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e  en inserting a n
b3d0: 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61  ew row or.  upda
b3e0: 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  ting an existing
b3f0: 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f   one causes a co
b400: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
b410: 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c  on.)^..<p>Exactl
b420: 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69  y how a constrai
b430: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20  nt violation is 
b440: 64 65 61 6c 74 20 77 69 74 68 20 69 73 20 64 65  dealt with is de
b450: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
b460: 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75    [conflict clau
b470: 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se|constraint co
b480: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
b490: 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61  n algorithm]. Ea
b4a0: 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  ch .  PRIMARY KE
b4b0: 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  Y, UNIQUE, NOT N
b4c0: 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f  ULL and CHECK co
b4d0: 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61 20 64  nstraint has a d
b4e0: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a  efault conflict.
b4f0: 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67    resolution alg
b500: 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59  orithm. ^PRIMARY
b510: 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64   KEY, UNIQUE and
b520: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
b530: 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65  aints may be.  e
b540: 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e  xplicitly assign
b550: 65 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  ed a default con
b560: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
b570: 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e   algorithm by in
b580: 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e  cluding.  a [con
b590: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e  flict-clause] in
b5a0: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
b5b0: 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f  ns. ^Or, if a co
b5c0: 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74  nstraint definit
b5d0: 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69  ion.  does not i
b5e0: 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69  nclude a [confli
b5f0: 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74  ct-clause] or it
b600: 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   is a CHECK cons
b610: 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61  traint, the defa
b620: 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72  ult.  conflict r
b630: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
b640: 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44  thm is ABORT. ^D
b650: 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61  ifferent constra
b660: 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a  ints within the.
b670: 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79    same table may
b680: 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20   have different 
b690: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
b6a0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
b6b0: 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68  rithms. See.  th
b6c0: 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
b6d0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
b6e0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
b6f0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c  formation...<tcl
b700: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77  >hd_fragment row
b710: 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d  id {INTEGER PRIM
b720: 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72  ARY KEY} ROWID r
b730: 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52  owid</tcl>.<h3>R
b740: 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e  OWIDs and the IN
b750: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
b760: 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65  Y</h3>..<p>^Exce
b770: 70 74 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  pt for [WITHOUT 
b780: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c 20 61  ROWID] tables, a
b790: 6c 6c 20 72 6f 77 73 20 77 69 74 68 69 6e 20 53  ll rows within S
b7a0: 51 4c 69 74 65 20 74 61 62 6c 65 73 0a 68 61 76  QLite tables.hav
b7b0: 65 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  e a 64-bit signe
b7c0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 74 68  d integer key th
b7d0: 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e  at uniquely iden
b7e0: 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20 77  tifies the row w
b7f0: 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65 2e  ithin its table.
b800: 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20 69 73  .This integer is
b810: 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20   usually.called 
b820: 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54 68  the "rowid". ^Th
b830: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61  e rowid value ca
b840: 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73  n be accessed us
b850: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  ing one of the s
b860: 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65  pecial.case-inde
b870: 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22 72  pendent names "r
b880: 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72  owid", "oid", or
b890: 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c   "_rowid_" in pl
b8a0: 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ace of a column 
b8b0: 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c  name..^If a tabl
b8c0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65  e contains a use
b8d0: 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  r defined column
b8e0: 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c 20   named "rowid", 
b8f0: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
b900: 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e 61  _",.then that na
b910: 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72 73  me always refers
b920: 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79 20   the explicitly 
b930: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
b940: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  and cannot be us
b950: 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20 74  ed.to retrieve t
b960: 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  he integer rowid
b970: 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20   value...<p>The 
b980: 72 6f 77 69 64 20 28 61 6e 64 20 22 6f 69 64 22  rowid (and "oid"
b990: 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22 29 20   and "_rowid_") 
b9a0: 69 73 20 6f 6d 69 74 74 65 64 20 69 6e 20 5b 57  is omitted in [W
b9b0: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
b9c0: 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20 52 4f  bles..WITHOUT RO
b9d0: 57 49 44 20 74 61 62 6c 65 73 20 61 72 65 20 6f  WID tables are o
b9e0: 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e  nly available in
b9f0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
ba00: 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c 61 74 65   3.8.2] and late
ba10: 72 2e 0a 41 20 74 61 62 6c 65 20 74 68 61 74 20  r..A table that 
ba20: 6c 61 63 6b 73 20 74 68 65 20 57 49 54 48 4f 55  lacks the WITHOU
ba30: 54 20 52 4f 57 49 44 20 63 6c 61 75 73 65 20 69  T ROWID clause i
ba40: 73 20 63 61 6c 6c 65 64 20 61 20 22 72 6f 77 69  s called a "rowi
ba50: 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68  d table"...<p>Th
ba60: 65 20 64 61 74 61 20 66 6f 72 20 72 6f 77 69 64  e data for rowid
ba70: 20 74 61 62 6c 65 73 20 69 73 20 73 74 6f 72 65   tables is store
ba80: 64 20 61 73 20 61 20 42 2d 54 72 65 65 20 73 74  d as a B-Tree st
ba90: 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
baa0: 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72  ng.one entry for
bab0: 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 2c   each table row,
bac0: 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77 69 64   using the rowid
bad0: 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6b 65   value as the ke
bae0: 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68  y. This means th
baf0: 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20 6f 72  at.retrieving or
bb00: 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72 64 73   sorting records
bb10: 20 62 79 20 72 6f 77 69 64 20 69 73 20 66 61 73   by rowid is fas
bb20: 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66 6f 72  t. Searching for
bb30: 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 61   a record with a
bb40: 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69 64 2c  .specific rowid,
bb50: 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f   or for all reco
bb60: 72 64 73 20 77 69 74 68 20 72 6f 77 69 64 73 20  rds with rowids 
bb70: 77 69 74 68 69 6e 20 61 20 73 70 65 63 69 66 69  within a specifi
bb80: 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72 6f 75  ed range is.arou
bb90: 6e 64 20 74 77 69 63 65 20 61 73 20 66 61 73 74  nd twice as fast
bba0: 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20 73 65   as a similar se
bbb0: 61 72 63 68 20 6d 61 64 65 20 62 79 20 73 70 65  arch made by spe
bbc0: 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74 68 65  cifying any othe
bbd0: 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72  r PRIMARY.KEY or
bbe0: 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a   indexed value..
bbf0: 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65  .<p> ^With one e
bc00: 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62  xception noted b
bc10: 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69 64  elow, if a rowid
bc20: 20 74 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   table has a pri
bc30: 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f  mary key that co
bc40: 6e 73 69 73 74 73 0a 6f 66 20 61 20 73 69 6e 67  nsists.of a sing
bc50: 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68  le column and th
bc60: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
bc70: 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  of that column i
bc80: 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20 61  s "INTEGER" in a
bc90: 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75 70  ny mixture of.up
bca0: 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61  per and lower ca
bcb0: 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  se, then the col
bcc0: 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20 61  umn becomes an a
bcd0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bce0: 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75 6d  id. Such a.colum
bcf0: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65 66  n is usually ref
bd00: 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20 22  erred to as an "
bd10: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
bd20: 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59 20  key". A PRIMARY 
bd30: 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20  KEY column.only 
bd40: 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65 67  becomes an integ
bd50: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
bd60: 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  f the declared t
bd70: 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61 63  ype name is exac
bd80: 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20 20  tly."INTEGER".  
bd90: 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20 74  ^Other integer t
bda0: 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20 22  ype names like "
bdb0: 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54 22  INT" or "BIGINT"
bdc0: 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45 47   or "SHORT INTEG
bdd0: 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45 44  ER".or "UNSIGNED
bde0: 20 49 4e 54 45 47 45 52 22 20 63 61 75 73 65 73   INTEGER" causes
bdf0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
be00: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76   column to behav
be10: 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  e as an ordinary
be20: 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69  .table column wi
be30: 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66 69  th integer [affi
be40: 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69 71  nity] and a uniq
be50: 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73  ue index, not as
be60: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68   an alias for.th
be70: 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54 68  e rowid...<p> Th
be80: 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e 74  e exception ment
be90: 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20 74  ioned above is t
bea0: 68 61 74 20 5e 69 66 20 74 68 65 20 64 65 63 6c  hat ^if the decl
beb0: 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c  aration of a col
bec0: 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72 65  umn with.declare
bed0: 64 20 74 79 70 65 20 22 49 4e 54 45 47 45 52 22  d type "INTEGER"
bee0: 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50 52   includes an "PR
bef0: 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22 20  IMARY KEY DESC" 
bf00: 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73 20  clause, it does 
bf10: 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61 6c  not.become an al
bf20: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
bf30: 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c 61  d and is not cla
bf40: 73 73 69 66 69 65 64 20 61 73 20 61 6e 20 69 6e  ssified as an in
bf50: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
bf60: 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69 73  y..This quirk is
bf70: 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e 20   not by design. 
bf80: 49 74 20 69 73 20 64 75 65 20 74 6f 20 61 20 62  It is due to a b
bf90: 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72 73  ug in early vers
bfa0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a  ions of SQLite..
bfb0: 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20 62  But fixing the b
bfc0: 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 20  ug could result 
bfd0: 69 6e 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63  in backwards inc
bfe0: 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e 0a  ompatibilities..
bff0: 48 65 6e 63 65 2c 20 74 68 65 20 6f 72 69 67 69  Hence, the origi
c000: 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 68 61 73  nal behavior has
c010: 20 62 65 65 6e 20 72 65 74 61 69 6e 65 64 20 28   been retained (
c020: 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 29 20  and documented) 
c030: 62 65 63 61 75 73 65 20 6f 64 64 0a 62 65 68 61  because odd.beha
c040: 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65 72  vior in a corner
c050: 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65 74   case is far bet
c060: 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d 70 61  ter than a compa
c070: 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2e 20  tibility break. 
c080: 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74   This means.that
c090: 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ^(the following
c0a0: 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65 63   three table dec
c0b0: 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61  larations all ca
c0c0: 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22  use the column "
c0d0: 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61  x" to be an.alia
c0e0: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  s for the rowid 
c0f0: 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d  (an integer prim
c100: 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a  ary key):..<ul>.
c110: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
c120: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
c130: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
c140: 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c  , y, z);</tt>.<l
c150: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
c160: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20  LE t(x INTEGER, 
c170: 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  y, z, PRIMARY KE
c180: 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a  Y(x ASC));</tt>.
c190: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
c1a0: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
c1b0: 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20  , y, z, PRIMARY 
c1c0: 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74  KEY(x DESC));</t
c1d0: 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42  t>.</ul>)^..<p>B
c1e0: 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69  ut ^(the followi
c1f0: 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64  ng declaration d
c200: 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69  oes not result i
c210: 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61  n "x" being an a
c220: 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77  lias for.the row
c230: 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  id:.<ul>.<li><tt
c240: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
c250: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
c260: 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a  Y KEY DESC, y, z
c270: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
c280: 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65  .<p>^Rowid value
c290: 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65  s may be modifie
c2a0: 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54  d using an UPDAT
c2b0: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74  E statement in t
c2c0: 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61  he same.way as a
c2d0: 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20  ny other column 
c2e0: 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65  value can, eithe
c2f0: 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74  r using one of t
c300: 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61  he built-in alia
c310: 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f  ses.("rowid", "o
c320: 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  id" or "_rowid_"
c330: 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e  ) or by using an
c340: 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20 62   alias created b
c350: 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69  y an integer.pri
c360: 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c  mary key. ^Simil
c370: 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20  arly, an INSERT 
c380: 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72  statement may pr
c390: 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f  ovide a value to
c3a0: 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69   use as the.rowi
c3b0: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  d for each row i
c3c0: 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b  nserted. ^(Unlik
c3d0: 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20  e normal SQLite 
c3e0: 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65  columns, an inte
c3f0: 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20  ger primary.key 
c400: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20  or rowid column 
c410: 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74  must contain int
c420: 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74  eger values. Int
c430: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
c440: 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e   or rowid.column
c450: 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74  s are not able t
c460: 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20  o hold floating 
c470: 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74  point values, st
c480: 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72  rings, BLOBs, or
c490: 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49   NULLs.)^..<p>^I
c4a0: 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
c4b0: 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
c4c0: 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72  o set an integer
c4d0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
c4e0: 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20  rowid column.to 
c4f0: 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76  a NULL or blob v
c500: 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74  alue, or to a st
c510: 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c  ring or real val
c520: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
c530: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e  e losslessly.con
c540: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
c550: 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70  eger, a "datatyp
c560: 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f  e mismatch" erro
c570: 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65  r occurs and the
c580: 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62   statement.is ab
c590: 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e  orted. ^If an IN
c5a0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
c5b0: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
c5c0: 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20  t a blob value, 
c5d0: 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72  or a string.or r
c5e0: 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63  eal value that c
c5f0: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
c600: 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
c610: 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f   an integer into
c620: 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d   an.integer prim
c630: 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
c640: 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61   column, a "data
c650: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
c660: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
c670: 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73  the.statement is
c680: 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49   aborted...<p>^I
c690: 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
c6a0: 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
c6b0: 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20  o insert a NULL 
c6c0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77  value into a row
c6d0: 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72  id or.integer pr
c6e0: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
c6f0: 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f  , the system cho
c700: 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20  oses an integer 
c710: 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20  value to use as 
c720: 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61  the.rowid automa
c730: 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69  tically. A detai
c740: 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20  led description 
c750: 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20 64  of how this is d
c760: 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a  one is provided.
c770: 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63  <a href="autoinc
c780: 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c  .html">separatel
c790: 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  y</a>.</p>..<p>^
c7a0: 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79  (The [parent key
c7b0: 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20  ] of a [foreign 
c7c0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20  key constraint] 
c7d0: 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
c7e0: 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e  o.use the rowid.
c7f0: 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79    The parent key
c800: 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64   must used named
c810: 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e   columns only.)^
c820: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
c830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c870: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
c880: 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47  on {CREATE TRIGG
c890: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
c8a0: 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47  r {{CREATE TRIGG
c8b0: 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ER}}..RecursiveB
c8c0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
c8d0: 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d 74  ate-trigger-stmt
c8e0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
c8f0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
c900: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
c910: 64 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72  d to add trigger
c920: 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61  s to the .databa
c930: 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67  se schema. ^Trig
c940: 67 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73  gers are databas
c950: 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68  e operations .th
c960: 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  at are automatic
c970: 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77  ally performed w
c980: 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hen a specified 
c990: 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f  database event.o
c9a0: 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70  ccurs.  </p>..<p
c9b0: 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20  >^A trigger may 
c9c0: 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20  be specified to 
c9d0: 66 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20  fire whenever a 
c9e0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
c9f0: 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20  T],.or [UPDATE] 
ca00: 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  of a.particular 
ca10: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
ca20: 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76  ccurs, or whenev
ca30: 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  er an [UPDATE] o
ca40: 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20  ccurs on.on one 
ca50: 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65  or more specifie
ca60: 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74  d columns of a t
ca70: 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  able.</p>..<p>^A
ca80: 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69  t this time SQLi
ca90: 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79  te supports only
caa0: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72   FOR EACH ROW tr
cab0: 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20  iggers, not FOR 
cac0: 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74  EACH.STATEMENT t
cad0: 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20  riggers. ^Hence 
cae0: 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69  explicitly speci
caf0: 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52  fying FOR EACH R
cb00: 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a  OW is optional..
cb10: 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d  ^FOR EACH ROW im
cb20: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53  plies that the S
cb30: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
cb40: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74  ecified in the t
cb50: 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78  rigger.may be ex
cb60: 65 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e  ecuted (dependin
cb70: 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c  g on the WHEN cl
cb80: 61 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64  ause) for each d
cb90: 61 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e  atabase row bein
cba0: 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61  g.inserted, upda
cbb0: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62  ted or deleted b
cbc0: 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
cbd0: 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67  causing the trig
cbe0: 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e  ger to fire.</p>
cbf0: 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20  ..<p>^(Both the 
cc00: 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20  WHEN clause and 
cc10: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
cc20: 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65  ons may access e
cc30: 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20  lements of .the 
cc40: 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74  row being insert
cc50: 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75  ed, deleted or u
cc60: 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66  pdated using ref
cc70: 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66  erences of the f
cc80: 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c  orm ."NEW.<i>col
cc90: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e  umn-name</i>" an
cca0: 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e  d "OLD.<i>column
ccb0: 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72  -name</i>", wher
ccc0: 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  e.<i>column-name
ccd0: 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  </i> is the name
cce0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f   of a column fro
ccf0: 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  m the table that
cd00: 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20   the trigger.is 
cd10: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e  associated with.
cd20: 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57  )^ ^(OLD and NEW
cd30: 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20   references may 
cd40: 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
cd50: 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e  triggers on.even
cd60: 74 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ts for which the
cd70: 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20  y are relevant, 
cd80: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
cd90: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
cda0: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
cdb0: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
cdc0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
cdd0: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
cde0: 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64  i>INSERT</i></td
cdf0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
ce00: 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65  p">NEW reference
ce10: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
ce20: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
ce30: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
ce40: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
ce50: 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f  =120><i>UPDATE</
ce60: 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  i></td>.<td vali
ce70: 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64  gn="top">NEW and
ce80: 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20   OLD references 
ce90: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
cea0: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  /tr>.<tr>.<td va
ceb0: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
cec0: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
ced0: 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e  20><i>DELETE</i>
cee0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
cef0: 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72  ="top">OLD refer
cf00: 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c  ences are valid<
cf10: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62  /td>.</tr>.</tab
cf20: 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e  le>.</p>)^..<p>^
cf30: 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65  If a WHEN clause
cf40: 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
cf50: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
cf60: 20 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f   specified.are o
cf70: 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72  nly executed for
cf80: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
cf90: 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20  the WHEN.clause 
cfa0: 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20  is true. ^If no 
cfb0: 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73  WHEN clause is s
cfc0: 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c  upplied, the SQL
cfd0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20   statements.are 
cfe0: 65 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c  executed for all
cff0: 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   rows.</p>..<p>^
d000: 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46  The BEFORE or AF
d010: 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65  TER keyword dete
d020: 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20  rmines when the 
d030: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a  trigger actions.
d040: 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64  will be executed
d050: 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
d060: 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69   insertion, modi
d070: 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f  fication or remo
d080: 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63  val of the.assoc
d090: 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a  iated row.</p>..
d0a0: 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c  <p>^An [ON CONFL
d0b0: 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20  ICT] clause may 
d0c0: 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20  be specified as 
d0d0: 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41  part of an [UPDA
d0e0: 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a  TE] or [INSERT].
d0f0: 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68  action within th
d100: 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72  e body of the tr
d110: 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20  igger..^However 
d120: 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  if an [ON CONFLI
d130: 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70  CT] clause is sp
d140: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
d150: 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e  of .the statemen
d160: 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72  t causing the tr
d170: 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74  igger to fire, t
d180: 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e  hen conflict han
d190: 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20  dling.policy of 
d1a0: 74 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d  the outer statem
d1b0: 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74  ent is used inst
d1c0: 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72  ead.</p>..<p>^Tr
d1d0: 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d  iggers are autom
d1e0: 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54  atically [DROP T
d1f0: 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64  RIGGER | dropped
d200: 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65  ].when the table
d210: 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a   that they are .
d220: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
d230: 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61  (the <i>table-na
d240: 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73  me</i> table) is
d250: 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20   .[DROP TABLE | 
d260: 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65  dropped].  ^Howe
d270: 76 65 72 20 69 66 20 74 68 65 20 74 72 69 67 67  ver if the trigg
d280: 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72  er actions refer
d290: 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65  ence.other table
d2a0: 73 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69  s, the trigger i
d2b0: 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72  s not dropped or
d2c0: 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f   modified if tho
d2d0: 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20  se other.tables 
d2e0: 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20  are [DROP TABLE 
d2f0: 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41  | dropped] or [A
d300: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64  LTER TABLE | mod
d310: 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ified].</p>..<p>
d320: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65  ^Triggers are re
d330: 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  moved using the 
d340: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73  [DROP TRIGGER] s
d350: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
d360: 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69  h3>Syntax Restri
d370: 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45  ctions On UPDATE
d380: 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e  , DELETE, and IN
d390: 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20  SERT Statements 
d3a0: 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67  Within.    Trigg
d3b0: 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
d3c0: 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c  e [UPDATE], [DEL
d3d0: 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52  ETE], and [INSER
d3e0: 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69  T].statements wi
d3f0: 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f  thin triggers do
d400: 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65   not support.the
d410: 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72   full syntax for
d420: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
d430: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
d440: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54  ] statements.  T
d450: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73  he following.res
d460: 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a  trictions apply:
d470: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ul>.<li><
d480: 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20  p>.  ^(The name 
d490: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
d4a0: 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61  be modified in a
d4b0: 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c  n [UPDATE], [DEL
d4c0: 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54  ETE], or [INSERT
d4d0: 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75  ].  statement mu
d4e0: 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69  st be an unquali
d4f0: 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e  fied table name.
d500: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
d510: 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65  , one must.  use
d520: 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e   just "<i>tablen
d530: 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69  ame</i>" not "<i
d540: 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e  >database</i><b>
d550: 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d  .</b><i>tablenam
d560: 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70  e</i>".  when sp
d570: 65 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62  ecifying the tab
d580: 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c  le.)^  ^The tabl
d590: 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64  e to be modified
d5a0: 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74   must exist in t
d5b0: 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61  he.  same databa
d5c0: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
d5d0: 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
d5e0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
d5f0: 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e  attached..  </p>
d600: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
d610: 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e   ^The "INSERT IN
d620: 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20  TO <i>table</i> 
d630: 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
d640: 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53  form of the [INS
d650: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20  ERT] statement. 
d660: 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
d670: 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  d..  </p></li>..
d680: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49  <li><p>.  ^The I
d690: 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
d6a0: 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
d6b0: 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
d6c0: 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  ted for [UPDATE]
d6d0: 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20   and.  [DELETE] 
d6e0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f  statements..  </
d6f0: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
d700: 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42  .  ^(The ORDER B
d710: 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
d720: 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20  ses on [UPDATE] 
d730: 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61  and [DELETE] sta
d740: 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a  tements are not.
d750: 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52    supported.  OR
d760: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
d770: 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c   are not normall
d780: 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20  y supported for 
d790: 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44  [UPDATE] or.  [D
d7a0: 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f  ELETE] in any co
d7b0: 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65  ntext but can be
d7c0: 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70   enabled for top
d7d0: 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74  -level statement
d7e0: 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53  s.  using the [S
d7f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
d800: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
d810: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
d820: 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ption.  However,
d830: 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d  .  that compile-
d840: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79  time option only
d850: 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d   applies to top-
d860: 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61  level [UPDATE] a
d870: 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74  nd [DELETE].  st
d880: 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55  atements, not [U
d890: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
d8a0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77  TE] statements w
d8b0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
d8c0: 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ^.  </p></li>..<
d8d0: 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f  li><p>.  ^[commo
d8e0: 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73 73 69  n-table-expressi
d8f0: 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  on|Common table 
d900: 65 78 70 72 65 73 73 69 6f 6e 5d 20 61 72 65 20  expression] are 
d910: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
d920: 72 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 69  r.  statements i
d930: 6e 73 69 64 65 20 6f 66 20 74 72 69 67 67 65 72  nside of trigger
d940: 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  s..  </p></li>.<
d950: 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ul>..<tcl>hd_fr
d960: 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f  agment instead_o
d970: 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45  f_trigger {INSTE
d980: 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20  AD OF} {INSTEAD 
d990: 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c  OF trigger}</tcl
d9a0: 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46  >.<h3>INSTEAD OF
d9b0: 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a   triggers</h3>..
d9c0: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79  <p>^Triggers may
d9d0: 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b   be created on [
d9e0: 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20  views], as well 
d9f0: 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  as ordinary tabl
da00: 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e  es, by.specifyin
da10: 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20  g INSTEAD OF in 
da20: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
da30: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e  ER statement. .^
da40: 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f  If one or more O
da50: 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c  N INSERT, ON DEL
da60: 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45  ETE.or ON UPDATE
da70: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65   triggers are de
da80: 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c  fined on a view,
da90: 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20   then it is not 
daa0: 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63  an.error to exec
dab0: 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ute an INSERT, D
dac0: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
dad0: 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65  statement on the
dae0: 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69   view, .respecti
daf0: 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c  vely.  ^Instead,
db00: 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e  .executing an IN
db10: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
db20: 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69  UPDATE on the vi
db30: 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73  ew causes the as
db40: 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72  sociated.trigger
db50: 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20  s to fire. ^The 
db60: 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65  real tables unde
db70: 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20  rlying the view 
db80: 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64  are not modified
db90: 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c  .(except possibl
dba0: 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79  y explicitly, by
dbb0: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
dbc0: 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f  am).</p>..<p>^No
dbd0: 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  te that the [sql
dbe0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
dbf0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and [sqlite3_tot
dc00: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
dc10: 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20  terfaces.do not 
dc20: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
dc30: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 73   trigger firings
dc40: 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74  , but the.[count
dc50: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
dc60: 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54   does count INST
dc70: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
dc80: 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  iring.</p>..<h3>
dc90: 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54 72 69  Some Example Tri
dca0: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
dcb0: 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63  (Assuming that c
dcc0: 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20  ustomer records 
dcd0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
dce0: 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61  e "customers" ta
dcf0: 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72  ble, and.that or
dd00: 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  der records are 
dd10: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f  stored in the "o
dd20: 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68  rders" table, th
dd30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50 44 41  e following.UPDA
dd40: 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73 75 72  TE trigger.ensur
dd50: 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73 6f  es that all asso
dd60: 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61 72  ciated orders ar
dd70: 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68 65  e redirected whe
dd80: 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68 61  n a customer cha
dd90: 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72 20  nges.his or her 
dda0: 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74  address:</p>..<t
ddb0: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45  cl>Example {.CRE
ddc0: 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64 61  ATE TRIGGER upda
ddd0: 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  te_customer_addr
dde0: 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61 64  ess UPDATE OF ad
ddf0: 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65  dress ON custome
de00: 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20  rs .  BEGIN.    
de10: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
de20: 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e  T address = new.
de30: 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75  address WHERE cu
de40: 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c  stomer_name = ol
de50: 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d  d.name;.  END;.}
de60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20  </tcl>..<p>With 
de70: 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e 73  this trigger ins
de80: 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e  talled, executin
de90: 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a  g the statement:
dea0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
deb0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74  le {.UPDATE cust
dec0: 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65 73  omers SET addres
ded0: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
dee0: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a   WHERE name = 'J
def0: 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74  ack Jones';.}</t
df00: 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74  cl>..<p>causes t
df10: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  he following to 
df20: 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  be automatically
df30: 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a   executed:</p>..
df40: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55  <tcl>Example {.U
df50: 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54  PDATE orders SET
df60: 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61   address = '1 Ma
df70: 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63 75  in St.' WHERE cu
df80: 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a  stomer_name = 'J
df90: 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74  ack Jones';.}</t
dfa0: 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e  cl>)^..<p>For an
dfb0: 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e 20 49   example of an I
dfc0: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
dfd0: 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65 20  r, consider the 
dfe0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61  following schema
dff0: 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  :..<tcl>Example 
e000: 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  {.CREATE TABLE c
e010: 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73 74 5f  ustomer(.  cust_
e020: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
e030: 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74 5f 6e  RY KEY,.  cust_n
e040: 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75 73 74  ame TEXT,.  cust
e050: 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a 43 52  _addr TEXT.);.CR
e060: 45 41 54 45 20 56 49 45 57 20 63 75 73 74 6f 6d  EATE VIEW custom
e070: 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a 20 20  er_address AS.  
e080: 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69 64 2c   SELECT cust_id,
e090: 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f 4d 20   cust_addr FROM 
e0a0: 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41 54 45  customer;.CREATE
e0b0: 20 54 52 49 47 47 45 52 20 63 75 73 74 5f 61 64   TRIGGER cust_ad
e0c0: 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41 44 20  dr_chng.INSTEAD 
e0d0: 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63 75 73  OF UPDATE OF cus
e0e0: 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74 6f 6d  t_addr ON custom
e0f0: 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47 49 4e  er_address.BEGIN
e100: 0a 20 20 55 50 44 41 54 45 20 63 75 73 74 6f 6d  .  UPDATE custom
e110: 65 72 20 53 45 54 20 63 75 73 74 5f 61 64 64 72  er SET cust_addr
e120: 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72 0a 20  =NEW.cust_addr. 
e130: 20 20 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d    WHERE cust_id=
e140: 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45 4e 44  NEW.cust_id;.END
e150: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69  ;.}</tcl>..<p>Wi
e160: 74 68 20 74 68 65 20 73 63 68 65 6d 61 20 61 62  th the schema ab
e170: 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  ove, a statement
e180: 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c 2f 70   of the form:</p
e190: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
e1a0: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
e1b0: 72 5f 61 64 64 72 65 73 73 20 53 45 54 20 63 75  r_address SET cu
e1c0: 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61 64 64  st_addr=$new_add
e1d0: 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74 5f  ress WHERE cust_
e1e0: 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f  id=$cust_id;.}</
e1f0: 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65 73 20  tcl>..<p>Causes 
e200: 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63 75 73  the customer.cus
e210: 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74 6f 20  t_addr field to 
e220: 62 65 20 75 70 64 61 74 65 64 20 66 6f 72 20 61  be updated for a
e230: 20 73 70 65 63 69 66 69 63 0a 63 75 73 74 6f 6d   specific.custom
e240: 65 72 20 65 6e 74 72 79 20 74 68 61 74 20 68 61  er entry that ha
e250: 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f  s customer.cust_
e260: 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  id equal to the 
e270: 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d 65 74  $cust_id paramet
e280: 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74 68 65  er..Note how the
e290: 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e 65 64   values assigned
e2a0: 20 74 6f 20 74 68 65 20 76 69 65 77 20 61 72 65   to the view are
e2b0: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20   made available 
e2c0: 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68 65 20  as field.in the 
e2d0: 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20 74 61  special "NEW" ta
e2e0: 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20 74  ble within the t
e2f0: 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f 70 3e  rigger body.</p>
e300: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e310: 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20  nt undef_before 
e320: 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52  {undefined BEFOR
e330: 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76 69  E trigger behavi
e340: 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61  or}</tcl>.<h3>Ca
e350: 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73  utions On The Us
e360: 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67  e Of BEFORE trig
e370: 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66  gers</h3>..<p>If
e380: 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54 45   a BEFORE UPDATE
e390: 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54   or BEFORE DELET
e3a0: 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69  E trigger modifi
e3b0: 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20  es or deletes a 
e3c0: 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20  row.that was to 
e3d0: 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74 65  have been update
e3e0: 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68  d or deleted, th
e3f0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e400: 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a   the subsequent.
e410: 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65  update or delete
e420: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e   operation is un
e430: 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65  defined.  Furthe
e440: 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f  rmore, if a BEFO
e450: 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66  RE trigger.modif
e460: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
e470: 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73   row, then it is
e480: 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68   undefined wheth
e490: 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20  er or not AFTER 
e4a0: 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f  triggers.that wo
e4b0: 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77 69  uld have otherwi
e4c0: 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20  se run on those 
e4d0: 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63  rows will in fac
e4e0: 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  t run..</p>..<p>
e4f0: 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57  The value of NEW
e500: 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69  .rowid is undefi
e510: 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20  ned in a BEFORE 
e520: 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20 69  INSERT trigger i
e530: 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69  n which.the rowi
e540: 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69  d is not explici
e550: 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e  tly set to an in
e560: 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42  teger.</p>..<p>B
e570: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62 65  ecause of the be
e580: 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62 65  haviors describe
e590: 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d  d above, program
e5a0: 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61  mers are encoura
e5b0: 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46  ged to.prefer AF
e5c0: 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76 65  TER triggers ove
e5d0: 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  r BEFORE trigger
e5e0: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s.</p>..<tcl>hd_
e5f0: 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65 20 7b  fragment raise {
e600: 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e 7d 3c  RAISE function}<
e610: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 52 41  /tcl>.<h3>The RA
e620: 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ISE() function</
e630: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63  h3>..<p>^(A spec
e640: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
e650: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
e660: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
e670: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e  igger-program,)^
e680: 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77  .with the follow
e690: 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a  ing syntax</p> .
e6a0: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
e6b0: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
e6c0: 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57  on</tcl>..<p>^(W
e6d0: 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53 45  hen one of RAISE
e6e0: 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20  (ROLLBACK,...), 
e6f0: 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e 29  RAISE(ABORT,...)
e700: 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c 2c 2e   or RAISE(FAIL,.
e710: 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20 64 75  ..).is called du
e720: 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f  ring trigger-pro
e730: 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20  gram.execution, 
e740: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f  the specified [O
e750: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63  N CONFLICT] proc
e760: 65 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72  essing is perfor
e770: 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e 74 20  med.the current 
e780: 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73  query terminates
e790: 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64  .)^.An error cod
e7a0: 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e  e of [SQLITE_CON
e7b0: 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75  STRAINT] is retu
e7c0: 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c  rned to the appl
e7d0: 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77  ication,.along w
e7e0: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
e7f0: 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  d error message.
e800: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52  </p>..<p>^When R
e810: 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20  AISE(IGNORE) is 
e820: 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61  called, the rema
e830: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72  inder of the cur
e840: 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f  rent trigger pro
e850: 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d  gram,.the statem
e860: 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20  ent that caused 
e870: 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
e880: 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61  ram to execute a
e890: 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  nd any subsequen
e8a0: 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  t.trigger progra
e8b0: 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61  ms that would ha
e8c0: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
e8d0: 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20   are abandoned. 
e8e0: 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68 61  ^No database.cha
e8f0: 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64 20  nges are rolled 
e900: 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73  back.  ^If the s
e910: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61  tatement that ca
e920: 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72  used the trigger
e930: 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63   program.to exec
e940: 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70 61  ute is itself pa
e950: 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 20  rt of a trigger 
e960: 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74 68  program, then th
e970: 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  at trigger progr
e980: 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63 75  am.resumes execu
e990: 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69  tion at the begi
e9a0: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78  nning of the nex
e9b0: 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74  t step..</p>..<t
e9c0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74  cl>hd_fragment t
e9d0: 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20 74 72  emptrig {TEMP tr
e9e0: 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45  iggers on non-TE
e9f0: 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e  MP tables}</tcl>
ea00: 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67 67 65  .<h3>TEMP Trigge
ea10: 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54  rs on Non-TEMP T
ea20: 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ables</h3>..<p>^
ea30: 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72 6d 61  (A trigger norma
ea40: 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  lly exists in th
ea50: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
ea60: 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  as the table nam
ea70: 65 64 0a 61 66 74 65 72 20 74 68 65 20 22 4f 4e  ed.after the "ON
ea80: 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74 68 65  " keyword in the
ea90: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
eaa0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78 63 65  statement.  Exce
eab0: 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73 69 62  pt, it is.possib
eac0: 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61 20 54  le to create a T
ead0: 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e 20 61  EMP TRIGGER on a
eae0: 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68 65   table in anothe
eaf0: 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20 20 0a  r database.)^  .
eb00: 53 75 63 68 20 61 20 74 72 69 67 67 65 72 20 77  Such a trigger w
eb10: 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77 68  ill only fire wh
eb20: 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65 20 6d  en changes.are m
eb30: 61 64 65 20 74 6f 20 74 68 65 20 74 61 72 67 65  ade to the targe
eb40: 74 20 74 61 62 6c 65 20 62 79 20 74 68 65 20 61  t table by the a
eb50: 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20  pplication that 
eb60: 64 65 66 69 6e 65 64 20 74 68 65 20 74 72 69 67  defined the trig
eb70: 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c 69  ger..Other appli
eb80: 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f 64  cations that mod
eb90: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
eba0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62 6c   will not be abl
ebb0: 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54 45 4d  e to see the.TEM
ebc0: 50 20 74 72 69 67 67 65 72 20 61 6e 64 20 68 65  P trigger and he
ebd0: 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20 74  nce cannot run t
ebe0: 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e 0a  he trigger.</p>.
ebf0: 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e 69 6e  .<p>When definin
ec00: 67 20 61 20 54 45 4d 50 20 74 72 69 67 67 65 72  g a TEMP trigger
ec10: 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20 74   on a non-TEMP t
ec20: 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d 70 6f  able, it is impo
ec30: 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69 66 79  rtant to.specify
ec40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 6f   the database ho
ec50: 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54 45  lding the non-TE
ec60: 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 65  MP table.  For e
ec70: 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20 66  xample,.in the f
ec80: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
ec90: 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74  nt, it is import
eca0: 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61 69 6e  ant to say "main
ecb0: 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64 0a 6f  .tab1" instead.o
ecc0: 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a 3c 2f  f just "tab1":</
ecd0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
ece0: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 45 4d  <pre>.CREATE TEM
ecf0: 50 20 54 52 49 47 47 45 52 20 65 78 31 20 41 46  P TRIGGER ex1 AF
ed00: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c 62  TER INSERT ON <b
ed10: 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20 42  >main.</b>tab1 B
ed20: 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c  EGIN ....</pre><
ed30: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
ed40: 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70 65 63  >Failure to spec
ed50: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 6e  ify the schema n
ed60: 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67 65  ame on the targe
ed70: 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72 65  t table could re
ed80: 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d 50  sult.in the TEMP
ed90: 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20 72   trigger being r
eda0: 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 74  eattached to a t
edb0: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73 61  able with the sa
edc0: 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74 68  me name in.anoth
edd0: 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  er database when
ede0: 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61 20  ever any schema 
edf0: 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c 2f  change occurs.</
ee00: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
ee10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee50: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
ee60: 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20  n {CREATE VIEW} 
ee70: 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b 43  {createview} {{C
ee80: 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65 77  REATE VIEW} view
ee90: 20 56 49 45 57 20 2a 76 69 65 77 73 7d 0a 0a 52   VIEW *views}..R
eea0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
eeb0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65  agram create-vie
eec0: 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
eed0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
eee0: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
eef0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
ef00: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
ef10: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
ef20: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
ef30: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
ef40: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
ef50: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
ef60: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
ef70: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
ef80: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
ef90: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
efa0: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
efb0: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
efc0: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
efd0: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
efe0: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
eff0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
f000: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
f010: 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61 73 65  to the.[database
f020: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74 68 61   connection] tha
f030: 74 20 63 72 65 61 74 65 64 20 69 74 20 61 6e 64  t created it and
f040: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
f050: 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74  y deleted when.t
f060: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
f070: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
f080: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
f090: 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
f0a0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73  name</yyterm> is
f0b0: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
f0c0: 20 74 68 65 20 76 69 65 77 20 0a 69 73 20 63 72   the view .is cr
f0d0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 73 70 65  eated in the spe
f0e0: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e  cified database.
f0f0: 0a 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  .^It is an error
f100: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
f110: 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d   a <yyterm>schem
f120: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  a-name</yyterm>.
f130: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
f140: 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20  word on a VIEW, 
f150: 75 6e 6c 65 73 73 20 74 68 65 20 3c 79 79 74 65  unless the <yyte
f160: 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
f170: 79 79 74 65 72 6d 3e 20 0a 69 73 20 22 74 65 6d  yyterm> .is "tem
f180: 70 22 2e 0a 5e 49 66 20 6e 6f 20 73 63 68 65 6d  p"..^If no schem
f190: 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  a name is specif
f1a0: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
f1b0: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
f1c0: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49   present,.the VI
f1d0: 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  EW is created in
f1e0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
f1f0: 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75  se.</p>..<p>^You
f200: 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d   cannot [DELETE]
f210: 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b  , [INSERT], or [
f220: 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20  UPDATE] a view. 
f230: 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64   ^Views are read
f240: 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65  -only .in SQLite
f250: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20  .  ^However, in 
f260: 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63  many cases you c
f270: 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45  an use an.[INSTE
f280: 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f  AD OF trigger] o
f290: 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63  n the view to ac
f2a0: 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61  complish .the sa
f2b0: 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77  me thing.  ^View
f2c0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77  s are removed .w
f2d0: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49  ith the [DROP VI
f2e0: 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EW] command.</p>
f2f0: 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c 79 79 74 65  ..<p>^If a <yyte
f300: 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
f310: 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 66 6f 6c  yyterm> list fol
f320: 6c 6f 77 73 20 0a 74 68 65 20 3c 79 79 74 65 72  lows .the <yyter
f330: 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c 2f 79 79 74  m>view-name</yyt
f340: 65 72 6d 3e 2c 20 74 68 65 6e 20 74 68 61 74 20  erm>, then that 
f350: 6c 69 73 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  list determines.
f360: 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  the names of the
f370: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65   columns for the
f380: 20 76 69 65 77 2e 20 20 5e 49 66 20 74 68 65 20   view.  ^If the 
f390: 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e  <yyterm>column-n
f3a0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c 69 73  ame</yyterm>.lis
f3b0: 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68  t is omitted, th
f3c0: 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  en the names of 
f3d0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  the columns in t
f3e0: 68 65 20 76 69 65 77 20 61 72 65 20 64 65 72 69  he view are deri
f3f0: 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 6e 61 6d  ved.from the nam
f400: 65 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  es of the result
f410: 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  -set columns in 
f420: 74 68 65 20 5b 73 65 6c 65 63 74 2d 73 74 6d 74  the [select-stmt
f430: 5d 2e 0a 4e 6f 74 65 20 74 68 61 74 20 74 68 65  ]..Note that the
f440: 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
f450: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69  name</yyterm> li
f460: 73 74 20 73 79 6e 74 61 78 20 69 73 20 6f 6e 6c  st syntax is onl
f470: 79 0a 73 75 70 70 6f 72 74 65 64 20 69 6e 20 53  y.supported in S
f480: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33  QLite versions 3
f490: 2e 39 2e 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a  .9.0 and later..
f4a0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
f500: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
f510: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
f520: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55  } {{CREATE VIRTU
f530: 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  AL TABLE}}..Recu
f540: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
f550: 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61  am create-virtua
f560: 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74  l-table-stmt.</t
f570: 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75  cl>..<p>A [virtu
f580: 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20  al table] is an 
f590: 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20  interface to an 
f5a0: 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65  external storage
f5b0: 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a   or computation.
f5c0: 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70 70 65  engine that appe
f5d0: 61 72 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c  ars to be a tabl
f5e0: 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61  e but does not a
f5f0: 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e  ctually store in
f600: 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65  formation.in the
f610: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
f620: 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72  /p>..<p>In gener
f630: 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61  al, you can do a
f640: 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b  nything with a [
f650: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74  virtual table] t
f660: 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a  hat can be done.
f670: 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79  with an ordinary
f680: 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74   table, except t
f690: 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20  hat ^you cannot 
f6a0: 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f  create indices o
f6b0: 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a  r triggers on a.
f6c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
f6d0: 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61  ^Some virtual ta
f6e0: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f6f0: 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65  ons might impose
f700: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74   additional.rest
f710: 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65  rictions.  For e
f720: 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72  xample, many vir
f730: 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20  tual tables are 
f740: 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a  read-only.</p>..
f750: 3c 70 3e 54 68 65 20 3c 79 79 74 65 72 6d 3e 6d  <p>The <yyterm>m
f760: 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  odule-name</yyte
f770: 72 6d 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  rm> is the name 
f780: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
f790: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
f7a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
f7b0: 20 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f   ^The <yyterm>mo
f7c0: 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  dule-name</yyter
f7d0: 6d 3e 20 6d 75 73 74 20 62 65 20 72 65 67 69 73  m> must be regis
f7e0: 74 65 72 65 64 20 77 69 74 68 0a 74 68 65 20 53  tered with.the S
f7f0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 63  QLite database c
f800: 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a  onnection using.
f810: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
f820: 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71  module()] or [sq
f830: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
f840: 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20  ule_v2()].prior 
f850: 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43  to issuing the C
f860: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
f870: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e  BLE statement..^
f880: 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73  The module takes
f890: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f   zero or more co
f8a0: 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 61 72  mma-separated ar
f8b0: 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72  guments..^The ar
f8c0: 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a  guments can be j
f8d0: 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65  ust about any te
f8e0: 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  xt as long as it
f8f0: 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61   has balanced.pa
f900: 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20  rentheses.  The 
f910: 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20  argument syntax 
f920: 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20  is sufficiently 
f930: 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65  general that the
f940: 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62  .arguments can b
f950: 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72  e made to appear
f960: 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69   as [column defi
f970: 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72  nitions] in a tr
f980: 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54  aditional.[CREAT
f990: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
f9a0: 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20 70 61  nt.  .^SQLite pa
f9b0: 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20  sses the module 
f9c0: 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74  arguments direct
f9d0: 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72 65 61  ly.to the [xCrea
f9e0: 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63  te] and [xConnec
f9f0: 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68  t] methods of th
fa00: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
fa10: 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20  ntation.without 
fa20: 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69  any interpretati
fa30: 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72  on.  It is the r
fa40: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66  esponsibility.of
fa50: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
fa60: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61  ementation to pa
fa70: 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65  rse and interpre
fa80: 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65  t its own argume
fa90: 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  nts.</p>..<p>^A 
faa0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
fab0: 20 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67   destroyed using
fac0: 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44   the ordinary.[D
fad0: 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ROP TABLE] state
fae0: 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20  ment.  There is 
faf0: 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20  no.DROP VIRTUAL 
fb00: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
fb10: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb60: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
fb70: 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65  on DELETE delete
fb80: 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45 54 45   {DELETE *DELETE
fb90: 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
fba0: 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
fbb0: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
fbc0: 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63 6f 6d  p>The DELETE com
fbd0: 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72 65 63  mand removes rec
fbe0: 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 74 61  ords from the ta
fbf0: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
fc00: 79 20 74 68 65 0a 20 20 20 5b 71 75 61 6c 69 66  y the.   [qualif
fc10: 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e  ied-table-name].
fc20: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45  ..<p>^If the WHE
fc30: 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  RE clause is not
fc40: 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65   present, all re
fc50: 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62  cords in the tab
fc60: 6c 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  le are deleted..
fc70: 20 20 20 5e 49 66 20 61 20 57 48 45 52 45 20 63     ^If a WHERE c
fc80: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
fc90: 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f  d, then only tho
fca0: 73 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  se rows for whic
fcb0: 68 20 74 68 65 0a 20 20 20 57 48 45 52 45 20 63  h the.   WHERE c
fcc0: 6c 61 75 73 65 20 5b 62 6f 6f 6c 65 61 6e 20 65  lause [boolean e
fcd0: 78 70 72 65 73 73 69 6f 6e 5d 20 69 73 20 74 72  xpression] is tr
fce0: 75 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  ue are deleted..
fcf0: 20 20 20 5e 52 6f 77 73 20 66 6f 72 20 77 68 69     ^Rows for whi
fd00: 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ch the expressio
fd10: 6e 20 69 73 20 66 61 6c 73 65 20 6f 72 20 4e 55  n is false or NU
fd20: 4c 4c 20 61 72 65 20 72 65 74 61 69 6e 65 64 2e  LL are retained.
fd30: 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f  ..<h3>Restrictio
fd40: 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74 61  ns on DELETE Sta
fd50: 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43  tements Within C
fd60: 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68  REATE TRIGGER</h
fd70: 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f  3>..<p>The follo
fd80: 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e  wing restriction
fd90: 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45 54  s apply to DELET
fda0: 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
fdb0: 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t occur within t
fdc0: 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61 20  he.   body of a 
fdd0: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
fde0: 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c   statement:..<ul
fdf0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
fe00: 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
fe10: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63  me</yyterm> spec
fe20: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
fe30: 20 61 20 0a 20 20 20 20 44 45 4c 45 54 45 20 73   a .    DELETE s
fe40: 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a  tatement within.
fe50: 20 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f      a trigger bo
fe60: 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61  dy must be unqua
fe70: 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74  lified.  ^(In ot
fe80: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20  her words, the. 
fe90: 20 20 20 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d     <i>schema-nam
fea0: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
feb0: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
fec0: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
fed0: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
fee0: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
fef0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
ff00: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
ff10: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
ff20: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
ff30: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
ff40: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
ff50: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
ff60: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
ff70: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
ff80: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
ff90: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
ffa0: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
ffb0: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
ffc0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
ffd0: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
ffe0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
fff0: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
10000 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
10010 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
10020 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
10030 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
10040 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
10050 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
10060 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
10070 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
10080 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
10090 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
100a0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
100b0 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
100c0 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
100d0 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
100e0 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
100f0 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
10100 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
10110 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
10120 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
10130 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
10140 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
10150 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
10160 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
10170 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
10180 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
10190 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
101a0 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
101b0 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
101c0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
101d0 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
101e0 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
101f0 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
10200 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
10210 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
10220 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
10230 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
10240 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
10250 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
10260 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
10270 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
10280 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
10290 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
102a0 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
102b0 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
102c0 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
102d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
102e0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
102f0 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
10300 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
10310 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
10320 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
10330 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
10340 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
10350 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
10360 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
10370 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
10380 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
10390 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
103a0 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
103b0 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
103c0 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
103d0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
103e0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
103f0 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
10400 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
10410 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
10420 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
10430 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
10440 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
10450 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
10460 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
10470 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
10480 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10490 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
104a0 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
104b0 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
104c0 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
104d0 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
104e0 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
104f0 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
10500 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
10510 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
10520 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
10530 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
10540 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
10550 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
10560 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
10570 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
10580 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
10590 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
105a0 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
105b0 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
105c0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
105d0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
105e0 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
105f0 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
10600 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
10610 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
10620 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
10630 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
10640 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
10650 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
10660 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
10670 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
10680 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
10690 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
106a0 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
106b0 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
106c0 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
106d0 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
106e0 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
106f0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
10700 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
10710 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
10720 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
10730 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
10740 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
10750 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
10760 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
10770 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
10780 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
10790 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
107a0 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
107b0 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
107c0 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
107d0 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
107e0 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
107f0 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
10800 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
10810 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
10820 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
10830 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
10840 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
10850 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
10860 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
10870 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
10880 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
10890 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
108a0 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
108b0 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
108c0 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
108d0 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
108e0 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
108f0 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
10900 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
10910 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
10920 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
10930 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
10940 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
10950 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
10960 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
10970 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
10980 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
10990 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
109a0 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
109b0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
109c0 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
109d0 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
109e0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
109f0 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
10a00 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
10a10 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
10a20 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
10a30 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
10a40 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
10a50 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
10a60 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
10a70 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
10a80 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
10a90 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
10aa0 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
10ab0 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
10ac0 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
10ad0 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
10ae0 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
10af0 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
10b00 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
10b10 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
10b20 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
10b30 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
10b40 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
10b50 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
10b60 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
10b70 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
10b80 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
10b90 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
10ba0 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
10bb0 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
10bc0 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
10bd0 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
10be0 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
10bf0 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
10c00 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
10c10 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
10c20 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
10c30 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
10c40 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
10c50 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
10c60 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
10c70 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
10c80 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
10c90 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
10ca0 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
10cb0 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
10cc0 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
10cd0 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
10ce0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
10cf0 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
10d00 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
10d10 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
10d20 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
10d30 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
10d40 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
10d50 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
10d60 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
10d70 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
10d80 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
10d90 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
10da0 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
10db0 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
10dc0 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
10dd0 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
10de0 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
10df0 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
10e00 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
10e10 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
10e20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
10e80 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
10e90 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
10ea0 20 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73   *DETACH..Recurs
10eb0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
10ec0 20 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74   detach-stmt.</t
10ed0 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74  cl>..<p>^This st
10ee0 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
10ef0 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
10f00 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10f10 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
10f20 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
10f30 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65  e [ATTACH] state
10f40 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f  ment.  .^When no
10f50 74 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63  t in [shared cac
10f60 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73  he mode], .it is
10f70 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
10f80 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
10f90 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
10fa0 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
10fb0 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
10fc0 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
10fd0 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
10fe0 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
10ff0 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
11000 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
11010 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63  p>.^In [shared c
11020 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65  ache mode], atte
11030 6d 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68  mpting to attach
11040 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
11050 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61  se file more.tha
11060 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69  n once results i
11070 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e  n an error...<p>
11080 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20  ^This statement 
11090 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c  will fail if SQL
110a0 69 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69  ite is in the mi
110b0 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
110c0 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  ction.</p>...<tc
110d0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11120 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
11130 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78  INDEX} dropindex
11140 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a   {{DROP INDEX}}.
11150 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11160 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64  Diagram drop-ind
11170 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
11180 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44  <p>^The DROP IND
11190 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
111a0 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
111b0 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
111c0 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
111d0 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
111e0 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  x is completely 
111f0 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65  removed from.the
11200 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79   disk.  The only
11210 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20   way to recover 
11220 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20  the index is to 
11230 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72  reenter the.appr
11240 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20  opriate [CREATE 
11250 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
11260 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112b0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
112c0 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
112d0 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20  roptable {{DROP 
112e0 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
112f0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
11300 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  drop-table-stmt.
11310 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
11320 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
11330 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
11340 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
11350 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
11360 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
11370 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
11380 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
11390 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
113a0 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
113b0 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
113c0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
113d0 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
113e0 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
113f0 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
11400 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
11410 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
11420 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
11430 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
11440 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
11450 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
11460 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
11470 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
11480 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
11490 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
114a0 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
114b0 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
114c0 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
114d0 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
114e0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
114f0 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
11500 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
11510 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
11520 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
11530 44 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d  DELETE FROM] com
11540 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f  mand before remo
11550 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66  ving the.table f
11560 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
11570 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72   schema. ^Any tr
11580 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20  iggers attached 
11590 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  to the table are
115a0 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  .dropped from th
115b0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
115c0 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70  a before the imp
115d0 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
115e0 4d 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73  M.is executed, s
115f0 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61  o this cannot ca
11600 75 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73  use any triggers
11610 20 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e   to fire. By con
11620 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69  trast, ^an.impli
11630 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  cit DELETE FROM 
11640 64 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20 63  does cause any c
11650 6f 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69  onfigured.[forei
11660 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20  gn key actions] 
11670 74 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a  to take place. .
11680 5e 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74  ^If the implicit
11690 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 65 78 65   DELETE FROM exe
116a0 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66  cuted.as part of
116b0 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
116c0 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61  mmand violates a
116d0 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ny immediate for
116e0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
116f0 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69  ints,.an error i
11700 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74  s returned and t
11710 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
11720 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68  dropped. ^If .th
11730 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
11740 45 20 46 52 4f 4d 20 63 61 75 73 65 73 20 61 6e  E FROM causes an
11750 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65  y .deferred fore
11760 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
11770 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74  nts to be violat
11780 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c  ed, and the viol
11790 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69  ations still.exi
117a0 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e  st when the tran
117b0 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69  saction is commi
117c0 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69  tted, an error i
117d0 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74 68  s returned at th
117e0 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74  e time.of commit
117f0 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11840 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
11850 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
11860 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f  roptrigger {{DRO
11870 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63  P TRIGGER}}..Rec
11880 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
11890 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72  ram drop-trigger
118a0 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
118b0 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47  >^The DROP TRIGG
118c0 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  ER statement rem
118d0 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63  oves a trigger c
118e0 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b  reated by the .[
118f0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
11900 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65  statement. ^Once
11910 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72   removed, the tr
11920 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e  igger definition
11930 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72   is no.longer pr
11940 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c  esent in the sql
11950 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73  ite_master (or s
11960 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
11970 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a  r) table and is.
11980 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e 79  not fired by any
11990 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45   subsequent INSE
119a0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
119b0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e  LETE statements.
119c0 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
119d0 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
119e0 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70  omatically dropp
119f0 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f  ed when the asso
11a00 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a  ciated table is.
11a10 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a  dropped...<tcl>.
11a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
11a70 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45  ection {DROP VIE
11a80 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52  W} dropview {{DR
11a90 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72  OP VIEW}}..Recur
11aa0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
11ab0 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74  m drop-view-stmt
11ac0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
11ad0 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11ae0 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76  ment removes a v
11af0 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74  iew created by t
11b00 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d  he [CREATE VIEW]
11b10 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e   .  statement. ^
11b20 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74  The view definit
11b30 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66  ion is removed f
11b40 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
11b50 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20   schema, but .  
11b60 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69  no actual data i
11b70 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n the underlying
11b80 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20   base tables is 
11b90 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28  modified...<p>^(
11ba0 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70  The view to drop
11bb0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
11bc0 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20  y the view-name 
11bd0 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20  and optional .  
11be0 73 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63  schema-name spec
11bf0 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
11c00 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73   the DROP VIEW s
11c10 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a  tatement. This .
11c20 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72    reference is r
11c30 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68  esolved using th
11c40 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65  e standard proce
11c50 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74  dure for [object
11c60 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a   resolution].)^.
11c70 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73  .<p>.  ^If the s
11c80 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61  pecified view ca
11c90 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e  nnot be found an
11ca0 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20  d the IF EXISTS 
11cb0 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20  clause is not . 
11cc0 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20   present, it is 
11cd0 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68  an error. ^If th
11ce0 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77  e specified view
11cf0 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
11d00 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49   and an IF.  EXI
11d10 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
11d20 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f  esent in the DRO
11d30 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74  P VIEW statement
11d40 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65  , then the state
11d50 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f  ment.  is a no-o
11d60 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p....<tcl>.#####
11d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11db0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
11dc0 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65  n {Database Obje
11dd0 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69  ct Name Resoluti
11de0 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f  on} {naming} {{o
11df0 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  bject resolution
11e00 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20  }}.</tcl>..<p>. 
11e10 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61   In SQLite, a da
11e20 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61  tabase object (a
11e30 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74   table, index, t
11e40 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20  rigger or view) 
11e50 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20  is identified.  
11e60 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
11e70 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  he object and th
11e80 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  e name of the da
11e90 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72  tabase that it r
11ea0 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61  esides in. .  Da
11eb0 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d  tabase objects m
11ec0 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65  ay reside in the
11ed0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
11ee0 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
11ef0 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41  e, or in.  an [A
11f00 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64  TTACH|attached d
11f10 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20  atabase]...<p>. 
11f20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   The syntax of t
11f30 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c  he [DROP TABLE],
11f40 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b   [DROP INDEX], [
11f50 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f  DROP VIEW], [DRO
11f60 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52  P TRIGGER],.  [R
11f70 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20  EINDEX], [ALTER 
11f80 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20  TABLE] and many 
11f90 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61  other commands a
11fa0 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73  ll permit the us
11fb0 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20  er to.  specify 
11fc0 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
11fd0 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20  t either by its 
11fe0 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62  name alone, or b
11ff0 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  y a combination 
12000 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e  of.  its name an
12010 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74  d the name of it
12020 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66  s database. ^(If
12030 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20   no database is 
12040 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
12050 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63  t.  of the objec
12060 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  t reference, the
12070 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65  n SQLite searche
12080 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70  s the main, temp
12090 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65   and all attache
120a0 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f  d.  databases fo
120b0 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68  r an object with
120c0 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65   a matching name
120d0 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62  . The temp datab
120e0 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a  ase is searched.
120f0 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65    first, followe
12100 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61  d by the main da
12110 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64  tabase, followed
12120 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
12130 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20  tabases in the. 
12140 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
12150 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20   were attached. 
12160 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65  The reference re
12170 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69  solves to the fi
12180 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e  rst match.  foun
12190 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65  d.)^ For example
121a0 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20  :..<pre>^(.     
121b0 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20   /* Add a table 
121c0 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68  named 't1' to th
121d0 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64  e temp, main and
121e0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
121f0 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41  abase */.      A
12200 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20  TTACH 'file.db' 
12210 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52  AS aux;.      CR
12220 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
12230 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   y);.      CREAT
12240 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28  E TEMP TABLE t1(
12250 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45  x, y);.      CRE
12260 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31  ATE TABLE aux.t1
12270 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44  (x, y);..      D
12280 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
12290 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
122a0 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61  ble in temp data
122b0 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
122c0 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
122d0 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
122e0 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62  le in main datab
122f0 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
12300 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
12310 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
12320 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73  e in aux databas
12330 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c  e */.)^</pre>..<
12340 70 3e 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d  p>.  ^If a schem
12350 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  a name is specif
12360 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
12370 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  n object referen
12380 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20  ce, it must be. 
12390 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20   either "main", 
123a0 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65  or "temp" or the
123b0 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20   schema-name of 
123c0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
123d0 62 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74  base..  ^Like ot
123e0 68 65 72 20 53 51 4c 20 69 64 65 6e 74 69 66 69  her SQL identifi
123f0 65 72 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65  ers, schema name
12400 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e  s are case-insen
12410 73 69 74 69 76 65 2e 0a 20 20 5e 49 66 20 61 20  sitive..  ^If a 
12420 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73  schema name is s
12430 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  pecified, then o
12440 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 73 63 68  nly that one sch
12450 65 6d 61 20 69 73 20 73 65 61 72 63 68 65 64 20  ema is searched 
12460 66 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65 64 20  for.  the named 
12470 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d  object...<p>.  M
12480 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72  ost object refer
12490 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72  ences may only r
124a0 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63  esolve to a spec
124b0 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a  ific type of obj
124c0 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70  ect (for.  examp
124d0 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74  le a reference t
124e0 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61  hat is part of a
124f0 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
12500 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72  ement may only r
12510 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61  esolve.  to a ta
12520 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20  ble object, not 
12530 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65  an index, trigge
12540 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65  r or view). Howe
12550 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74  ver in some cont
12560 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52  exts .  (e.g. [R
12570 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65  EINDEX]) an obje
12580 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79  ct reference may
12590 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d   be resolve to m
125a0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70  ore than one typ
125b0 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e  e.  of object. ^
125c0 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64  When searching d
125d0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20  atabase schemas 
125e0 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65  for a named obje
125f0 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20  ct, objects of. 
12600 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e   types that cann
12610 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ot be used in th
12620 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  e context of the
12630 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61   reference are a
12640 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64  lways .  ignored
12650 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126a0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
126b0 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20  EXPLAIN explain 
126c0 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44  EXPLAIN..BubbleD
126d0 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a  iagram sql-stmt.
126e0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53  </tcl>..<p>^An S
126f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e  QL statement can
12700 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
12710 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50  the keyword "EXP
12720 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20  LAIN" or.by the 
12730 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20  phrase "EXPLAIN 
12740 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45  QUERY PLAN".  ^E
12750 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69  ither modificati
12760 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51  on causes the.SQ
12770 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62  L statement to b
12780 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79  ehave as a query
12790 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69   and to return i
127a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
127b0 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61  .how the SQL sta
127c0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
127d0 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68  e operated if th
127e0 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72  e EXPLAIN keywor
127f0 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20  d or.phrase had 
12800 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70  been omitted.</p
12810 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74  >..<p>The output
12820 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e   from EXPLAIN an
12830 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  d EXPLAIN QUERY 
12840 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64  PLAN is intended
12850 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65   for.interactive
12860 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72   analysis and tr
12870 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e  oubleshooting on
12880 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73  ly.  The details
12890 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20   of the .output 
128a0 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65  format are subje
128b0 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f  ct to change fro
128c0 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66  m one release of
128d0 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e   SQLite to the n
128e0 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e  ext..Application
128f0 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65  s should not use
12900 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c   EXPLAIN or EXPL
12910 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
12920 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74  ince.their exact
12930 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72   behavior is var
12940 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70  iable and only p
12950 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e  artially documen
12960 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  ted.</p>..<p>^Wh
12970 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b  en the EXPLAIN k
12980 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
12990 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73  y itself it caus
129a0 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  es the statement
129b0 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20  .to behave as a 
129c0 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72  query that retur
129d0 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ns the sequence 
129e0 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63  of .[virtual mac
129f0 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  hine instruction
12a00 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65  s] it would have
12a10 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
12a20 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64   the command had
12a30 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79  .the EXPLAIN key
12a40 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72  word not been pr
12a50 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65  esent. ^When the
12a60 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
12a70 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61  LAN phrase.appea
12a80 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  rs, the statemen
12a90 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c  t returns high-l
12aa0 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  evel information
12ab0 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71   regarding the q
12ac0 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77  uery.plan that w
12ad0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75  ould have been u
12ae0 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49  sed...The EXPLAI
12af0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d  N QUERY PLAN com
12b00 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65  mand is describe
12b10 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71  d in .[explain q
12b20 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64  uery plan|more d
12b30 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74  etail here]...<t
12b40 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b90 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65  ##.Section expre
12ba0 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70  ssion expr {*exp
12bb0 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73  ression {express
12bc0 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65  ion syntax}}..Re
12bd0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
12be0 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e  gram expr.</tcl>
12bf0 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f  ..<p>This sectio
12c00 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
12c10 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20  rom the others. 
12c20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74   Most other sect
12c30 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63  ions of.this doc
12c40 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75  ument talks abou
12c50 74 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53  t a particular S
12c60 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69  QL command.  Thi
12c70 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e  s section does.n
12c80 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20  ot talk about a 
12c90 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61  standalone comma
12ca0 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78  nd but about "ex
12cb0 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68  pressions" which
12cc0 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65   are .subcompone
12cd0 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65  nts of most othe
12ce0 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a  r commands.</p>.
12cf0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
12d00 74 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e  t binaryops {bin
12d10 61 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f  ary operators}</
12d20 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f  tcl>.<h3>Operato
12d30 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c  rs</h3>.<p>^(SQL
12d40 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ite understands 
12d50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69  the following bi
12d60 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20  nary operators, 
12d70 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69  in order from.hi
12d80 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20  ghest to lowest 
12d90 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a  precedence:</p>.
12da0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
12db0 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
12dc0 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c  #2c2cf0"><big>||
12dd0 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20  .*    /    %.+  
12de0 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26    -.&lt;&lt;   &
12df0 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20  gt;&gt;   &amp; 
12e00 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74     |.&lt;    &lt
12e10 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74  ;=   &gt;    &gt
12e20 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20  ;=.=    ==   != 
12e30 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62    &lt;&gt;   </b
12e40 69 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20  ig>IS   IS NOT  
12e50 20 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f   IN   LIKE   GLO
12e60 42 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45  B   MATCH   REGE
12e70 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f  XP.AND   .OR</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 70 3e 5e 28  kquote>)^..<p>^(
12ea0 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20  Supported unary 
12eb0 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73  prefix operators
12ec0 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a   are these:</p>.
12ed0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
12ee0 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
12ef0 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20  #2c2cf0"><big>- 
12f00 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54     +    ~    NOT
12f10 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f  </big></font>.</
12f20 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
12f30 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  >)^..<tcl>hd_fra
12f40 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20  gment collateop 
12f50 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  {COLLATE operato
12f60 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  r}</tcl>.<p>^The
12f70 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f   COLLATE operato
12f80 72 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73  r is a unary pos
12f90 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68  tfix.operator th
12fa0 61 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f  at assigns a [co
12fb0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
12fc0 5d 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  ] to an expressi
12fd0 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45  on..^The COLLATE
12fe0 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20   operator has a 
12ff0 68 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63  higher precedenc
13000 65 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69  e (binds more ti
13010 67 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a  ghtly) than any.
13020 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
13030 61 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72  and any unary pr
13040 65 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78  efix operator ex
13050 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41  cept "~"..(COLLA
13060 54 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61  TE and "~" are a
13070 73 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68  ssociative so th
13080 65 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65  eir binding orde
13090 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  r does not matte
130a0 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69  r.).^The collati
130b0 6e 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  ng sequence set 
130c0 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f  by the COLLATE o
130d0 70 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65  perator override
130e0 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20  s the.collating 
130f0 73 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69  sequence determi
13100 6e 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  ned by the COLLA
13110 54 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74  TE clause in a t
13120 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66  able.[column def
13130 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68  inition]..See th
13140 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  e [collating seq
13150 75 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20  uence| detailed 
13160 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f  discussion on co
13170 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
13180 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74  s].in the [datat
13190 79 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49  ype | Datatype I
131a0 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d  n SQLite3] docum
131b0 65 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ent for addition
131c0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
131d0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75  </p>..<tcl>hd_pu
131e0 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61  ts ".<p>^The una
131f0 72 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65  ry operator [Ope
13200 72 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f  rator +] is a no
13210 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65  -op.  ^It can be
13220 20 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69   applied.to stri
13230 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c  ngs, numbers, bl
13240 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20  obs or NULL and 
13250 69 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  it always return
13260 73 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20  s a result.with 
13270 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61  the same value a
13280 73 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f  s the operand.</
13290 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f  p>"</tcl>..<p>No
132a0 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72  te that there ar
132b0 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73  e two variations
132c0 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61   of the equals a
132d0 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70  nd not equals.op
132e0 65 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c  erators.  ^Equal
132f0 73 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a  s can be either.
13300 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22  .<tcl>.hd_puts "
13310 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20  [Operator =] or 
13320 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e  [Operator ==]..^
13330 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f  The non-equals o
13340 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65  perator can be e
13350 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20  ither.[Operator 
13360 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72  !=] or [Operator
13370 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54   {&lt;&gt;}]..^T
13380 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
13390 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63   operator is \"c
133a0 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69  oncatenate\" - i
133b0 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72  t joins together
133c0 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73  .the two strings
133d0 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73   of its operands
133e0 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20  ..^The operator 
133f0 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74  [Operator %] out
13400 70 75 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f  puts the value o
13410 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72  f its left .oper
13420 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72  and modulo its r
13430 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70  ight operand.</p
13440 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  >..<p>^The resul
13450 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20  t of any binary 
13460 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68  operator is eith
13470 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  er a numeric val
13480 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63  ue or .NULL, exc
13490 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65  ept for the [Ope
134a0 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74  rator ||] concat
134b0 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  enation operator
134c0 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65   which always .e
134d0 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68  valuates to eith
134e0 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78  er NULL or a tex
134f0 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68  t value.</p>"..h
13500 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73  d_fragment {isis
13510 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f  not} {IS operato
13520 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61  r} {IS NOT opera
13530 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c  tor}..hd_puts "<
13540 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  p>^The [Operator
13550 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74   IS] and [Operat
13560 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65  or {IS NOT}] ope
13570 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65  rators work.like
13580 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e   [Operator =] an
13590 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20  d [Operator !=] 
135a0 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20  except when one 
135b0 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f  or both of the.o
135c0 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
135d0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c  . ^In this case,
135e0 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   if both operand
135f0 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e  s are NULL, then
13600 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
13610 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20   evaluates to 1 
13620 28 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49  (true) and the I
13630 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65  S NOT operator e
13640 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66  valuates.to 0 (f
13650 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f  alse). ^If one o
13660 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61  perand is NULL a
13670 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20  nd the other is 
13680 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  not, then the.IS
13690 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
136a0 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29  tes to 0 (false)
136b0 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20   and the IS NOT 
136c0 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74  operator is 1 (t
136d0 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74  rue)..^It is not
136e0 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e   possible for an
136f0 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78   IS or IS NOT ex
13700 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c  pression to eval
13710 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f  uate to NULL..^O
13720 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74  perators [Operat
13730 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72  or IS] and [Oper
13740 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68  ator {IS NOT}] h
13750 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72  ave the same .pr
13760 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65  ecedence as [Ope
13770 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c  rator =]."..<tcl
13780 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74  >hd_fragment lit
13790 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76  value {literal v
137a0 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  alue}</tcl>.<h3>
137b0 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28  Literal Values (
137c0 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a  Constants)</h3>.
137d0 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61  <p>.A literal va
137e0 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  lue represents a
137f0 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65   constant..^Lite
13800 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62  ral values may b
13810 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61  e integers, floa
13820 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
13830 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f  rs, strings,.BLO
13840 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70  Bs, or NULLs..<p
13850 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  >.The syntax for
13860 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f   integer and flo
13870 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
13880 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65  rals (collective
13890 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65  ly."numeric lite
138a0 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20  rals") is shown 
138b0 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
138c0 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c   diagram:</p>..<
138d0 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
138e0 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61  m numeric-litera
138f0 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49  l</tcl>..<p>.^(I
13900 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65  f a numeric lite
13910 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61  ral has a decima
13920 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78  l point or an ex
13930 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
13940 75 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61  use or if its ma
13950 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73 20  gnitude is less 
13960 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36  than -9223372036
13970 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65  854775808 or.gre
13980 61 74 65 72 20 74 68 61 6e 20 39 32 32 33 33 37  ater than 922337
13990 32 30 33 36 38 35 34 37 37 35 38 30 37 2c 20 74  2036854775807, t
139a0 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61  hen it is a floa
139b0 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
139c0 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73  al..Otherwise is
139d0 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67   it is an  integ
139e0 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54  er literal.)^.^T
139f0 68 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72  he "E" character
13a00 20 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65   that begins the
13a10 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
13a20 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61  clause of a floa
13a30 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
13a40 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  al can be either
13a50 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20   upper or lower 
13a60 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20  case..^(The "." 
13a70 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77  character is alw
13a80 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65  ays used .as the
13a90 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65   decimal point e
13aa0 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c  ven if the local
13ab0 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66  e setting specif
13ac0 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73  ies "," for.this
13ad0 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20   role - the use 
13ae0 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64  of "," for the d
13af0 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75  ecimal point wou
13b00 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e  ld result in.syn
13b10 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79  tactic ambiguity
13b20 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
13b30 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65  gment hexint {he
13b40 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
13b50 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78  r literals} {hex
13b60 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13b70 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78  s}</tcl>.<p>^Hex
13b80 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13b90 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77   literals follow
13ba0 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20   the C-language 
13bb0 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22  notation of."0x"
13bc0 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65   or "0X" followe
13bd0 64 20 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c  d by hexadecimal
13be0 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78   digits..^For ex
13bf0 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65  ample, 0x1234 me
13c00 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  ans the same as 
13c10 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30  4660.and 0x80000
13c20 30 30 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e  00000000000 mean
13c30 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39  s the same as -9
13c40 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
13c50 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d  08.. ^(Hexadecim
13c60 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72  al integer liter
13c70 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72 65  als are interpre
13c80 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77  ted as 64-bit.tw
13c90 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  o's-complement i
13ca0 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72 65 20  ntegers and are 
13cb0 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20  thus limited.to 
13cc0 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63  sixteen signific
13cd0 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70 72  ant digits of pr
13ce0 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f  ecision.)^.Suppo
13cf0 72 74 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d  rt for hexadecim
13d00 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73 20  al integers was 
13d10 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 20  added to SQLite 
13d20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 2e 0a 5e  version 3.8.6..^
13d30 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  For backwards co
13d40 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65  mpatibility, the
13d50 20 22 30 78 22 20 68 65 78 61 64 65 63 69 6d 61   "0x" hexadecima
13d60 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69  l integer.notati
13d70 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72  on is only under
13d80 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c  stood by the SQL
13d90 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73 65 72   language parser
13da0 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70  , not by the.typ
13db0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f  e conversions ro
13dc0 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67  utines..^(String
13dd0 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a   variables that.
13de0 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72  contain text for
13df0 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61  matted like hexa
13e00 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
13e10 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72   are not.interpr
13e20 65 74 65 64 20 61 73 20 68 65 78 61 64 65 63 69  eted as hexadeci
13e30 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65  mal integers whe
13e40 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73  n coercing the s
13e50 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f  tring value.into
13e60 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20   an integer due 
13e70 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  to a [CAST expre
13e80 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20  ssion] or for a 
13e90 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
13ea0 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  ].transformation
13eb0 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72   or prior to per
13ec0 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69  forming a numeri
13ed0 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66  c operation or f
13ee0 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e  or.any other run
13ef0 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e  -time conversion
13f00 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65  s.)^  ^(When coe
13f10 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76  rcing a.string v
13f20 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d  alue in the form
13f30 61 74 20 6f 66 20 61 20 68 65 78 61 64 65 63 69  at of a hexadeci
13f40 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  mal integer into
13f50 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75   an integer.valu
13f60 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  e, the conversio
13f70 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20  n process stops 
13f80 77 68 65 6e 20 74 68 65 20 27 78 27 20 63 68 61  when the 'x' cha
13f90 72 61 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73  racter is seen.s
13fa0 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  o the resulting 
13fb0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73  integer value is
13fc0 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a   always zero.)^.
13fd0 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e  ^(SQLite only un
13fe0 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 68 65  derstands the he
13ff0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
14000 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20  r notation when 
14010 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68  it.appears in th
14020 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
14030 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69  text, not when i
14040 74 20 61 70 70 65 61 72 73 20 61 73 0a 70 61 72  t appears as.par
14050 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  t of the content
14060 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
14070 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69  .)^..<p> ^A stri
14080 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66  ng constant is f
14090 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69  ormed by enclosi
140a0 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e  ng the.string in
140b0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28   single quotes (
140c0 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71  ').  ^A single q
140d0 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
140e0 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
140f0 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
14100 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
14110 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
14120 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
14130 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
14140 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
14150 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
14160 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
14170 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
14180 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a   standard SQL...
14190 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61  <p> ^BLOB litera
141a0 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
141b0 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
141c0 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
141d0 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
141e0 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
141f0 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
14200 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27  .  ^(Example: X'
14210 35 33 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a  53514C697465')^.
14220 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20  .<p>.^A literal 
14230 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62  value can also b
14240 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c  e the token "NUL
14250 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  L"..</p>..<tcl>h
14260 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61  d_fragment varpa
14270 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61  ram parameter pa
14280 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20  rameters {bound 
14290 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e  parameter} {boun
142a0 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74  d parameters}</t
142b0 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65  cl>.<h3>Paramete
142c0 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76  rs</h3>.<p>.A "v
142d0 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72  ariable" or "par
142e0 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70  ameter" token.sp
142f0 65 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68  ecifies a placeh
14300 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70  older in the exp
14310 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76  ression for a .v
14320 61 6c 75 65 20 74 68 61 74 20 69 73 20 66 69 6c  alue that is fil
14330 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d  led in at runtim
14340 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  e using the.[sql
14350 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
14360 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
14370 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43  )] family of C/C
14380 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50  ++ interfaces..P
14390 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61  arameters can ta
143a0 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73  ke several forms
143b0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
143c0 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
143d0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
143e0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
143f0 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c  ><b>?</b><i>NNN<
14400 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
14410 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
14420 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  >^(A question ma
14430 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  rk followed by a
14440 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f   number <i>NNN</
14450 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  i> holds a spot 
14460 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70  for the.NNN-th p
14470 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d  arameter.  NNN m
14480 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 31  ust be between 1
14490 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58   and [SQLITE_MAX
144a0 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
144b0 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ].)^.</td>.</tr>
144c0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
144d0 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
144e0 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74  top"><b>?</b></t
144f0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
14500 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75  ></td>.<td>^A qu
14510 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74  estion mark that
14520 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64   is not followed
14530 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65   by a number cre
14540 61 74 65 73 20 61 20 70 61 72 61 6d 65 74 65 72  ates a parameter
14550 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f  .with a number o
14560 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ne greater than 
14570 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61  the largest para
14580 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72  meter number alr
14590 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e  eady assigned..^
145a0 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
145b0 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  e parameter numb
145c0 65 72 20 69 73 20 67 72 65 61 74 65 72 20 74 68  er is greater th
145d0 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  an.[SQLITE_MAX_V
145e0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
145f0 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
14600 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20  .This parameter 
14610 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64  format is provid
14620 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
14630 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20  lity with other 
14640 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73  database.engines
14650 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 69  .  But because i
14660 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73  t is easy to mis
14670 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73 74 69  count the questi
14680 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73  on marks, the.us
14690 65 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  e of this parame
146a0 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69  ter format is di
146b0 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67  scouraged.  Prog
146c0 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
146d0 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e  uraged.to use on
146e0 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69  e of the symboli
146f0 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20  c formats below 
14700 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d  or the ?NNN form
14710 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64  at above instead
14720 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ..</td>.</tr>.<t
14730 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
14740 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
14750 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>:</b><i>AAA
14760 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
14770 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
14780 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c  td>^A colon foll
14790 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
147a0 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73  ifier name holds
147b0 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b   a spot for a .[
147c0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
147d0 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65  ameter_name|name
147e0 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74  d parameter] wit
147f0 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41  h the name :AAAA
14800 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61  .  .^(Named para
14810 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20  meters are also 
14820 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75  numbered. The nu
14830 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69 73  mber assigned is
14840 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
14850 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n.the largest pa
14860 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
14870 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
14880 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  )^ ^If this mean
14890 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a  s the parameter.
148a0 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65  would be assigne
148b0 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74  d a number great
148c0 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  er than [SQLITE_
148d0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
148e0 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65  BER], it is.an e
148f0 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63  rror. To avoid c
14900 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20  onfusion, it is 
14910 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69  best to avoid mi
14920 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e  xing named and n
14930 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65  umbered.paramete
14940 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  rs.</td>.</tr>.<
14950 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
14960 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
14970 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41  p"><b>@</b><i>AA
14980 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
14990 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
149a0 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67  <td>^An "at" sig
149b0 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  n works exactly 
149c0 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78  like a colon, ex
149d0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e 61  cept that the na
149e0 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65  me of.the parame
149f0 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20 40  ter created is @
14a00 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  AAAA.</td>.</tr>
14a10 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14a20 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14a30 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e  top"><b>$</b><i>
14a40 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
14a50 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
14a60 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d  >.<td>^A dollar-
14a70 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  sign followed by
14a80 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
14a90 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61  ame also holds a
14aa0 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65   spot for a name
14ab0 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74 68  d.parameter with
14ac0 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e   the name $AAAA.
14ad0 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69    ^(The identifi
14ae0 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20  er name in this 
14af0 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  case can include
14b00 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63  .one or more occ
14b10 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22  urrences of "::"
14b20 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e   and a suffix en
14b30 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29  closed in "(...)
14b40 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79  " containing.any
14b50 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20   text at all.)^ 
14b60 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73 20   This syntax is 
14b70 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61  the form of a va
14b80 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74  riable name in t
14b90 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74  he.[http://www.t
14ba0 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c 20 54  cl-lang.org/ | T
14bb0 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
14bc0 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
14bd0 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
14be0 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
14bf0 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
14c00 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
14c10 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
14c20 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
14c30 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
14c40 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
14c50 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
14c60 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
14c70 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
14c80 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
14c90 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
14ca0 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
14cb0 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
14cc0 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
14cd0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c   NULL.  The [sql
14ce0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
14cf0 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74  ter_index()] int
14d00 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
14d10 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20  ed.to translate 
14d20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d  a symbolic param
14d30 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69  eter name into i
14d40 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75  ts equivalent nu
14d50 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e  meric index.</p>
14d60 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
14d70 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
14d80 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
14d90 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
14da0 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
14db0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
14dc0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
14dd0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
14de0 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61  connection].D ca
14df0 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78  n reduce its max
14e00 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e  imum parameter n
14e10 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20  umber below the 
14e20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78  compile-time max
14e30 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b  imum.using the [
14e40 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44  sqlite3_limit](D
14e50 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  , [SQLITE_LIMIT_
14e60 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
14e70 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e  ,...) interface.
14e80 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )^.</p>..<tcl>hd
14e90 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
14ea0 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
14eb0 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c 20 47  .<h3>The LIKE, G
14ec0 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61 6e 64  LOB, REGEXP, and
14ed0 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 73   MATCH operators
14ee0 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49  </h3>.<p>^The LI
14ef0 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
14f00 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
14f10 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
14f20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20  ^The operand.to 
14f30 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
14f40 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
14f50 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
14f60 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74  ern and the left
14f70 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f   hand.operand co
14f80 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e  ntains the strin
14f90 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
14fa0 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a  st the pattern..
14fb0 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e  .<tcl>hd_puts "^
14fc0 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
14fd0 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20   (\"%\") in the 
14fe0 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
14ff0 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
15000 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
15010 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
15020 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e  the string.  ^An
15030 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f   underscore.(\"_
15040 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
15050 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
15060 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
15070 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
15080 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72  ng.  ^(Any other
15090 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
150a0 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73  es itself or its
150b0 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73   lower/upper cas
150c0 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e  e.equivalent (i.
150d0 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  e. case-insensit
150e0 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e  ive matching).)^
150f0 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74 20 4e  ..<u>Important N
15100 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69 74 65  ote:</u> ^SQLite
15110 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
15120 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
15130 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
15140 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
15150 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
15160 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
15170 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
15180 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
15190 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
151a0 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
151b0 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
151c0 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
151d0 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
151e0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
151f0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
15200 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
15210 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
15220 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
15230 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c 3e 0a  s FALSE."</tcl>.
15240 54 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  The ICU extensio
15250 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e 63 6c  n to SQLite incl
15260 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63 65 64  udes an enhanced
15270 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
15280 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 74 68  LIKE operator th
15290 61 74 20 64 6f 65 73 20 63 61 73 65 20 66 6f 6c  at does case fol
152a0 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c 6c 20  ding across all 
152b0 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
152c0 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  rs.</p>..<p>^If 
152d0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
152e0 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
152f0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
15300 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f  expression.follo
15310 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45 20  wing the ESCAPE 
15320 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61  keyword must eva
15330 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e  luate to a strin
15340 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a  g consisting of.
15350 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  a single charact
15360 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63  er. ^This charac
15370 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
15380 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
15390 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
153a0 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
153b0 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
153c0 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73  racters. ^The es
153d0 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
153e0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
153f0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c  cent symbol (%),
15400 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c   underscore (_),
15410 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73   or a second.ins
15420 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63  tance of the esc
15430 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69 74  ape character it
15440 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c  self matches a.l
15450 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73  iteral percent s
15460 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
15470 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65  e, or a single e
15480 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 2c  scape character,
15490 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a  .respectively...
154a0 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49  <p>^The infix LI
154b0 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE operator is i
154c0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
154d0 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63  lling the.applic
154e0 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
154f0 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b  L functions [lik
15500 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
15510 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c  /i>)] or.[like(<
15520 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15530 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e  ,<i>Z</i>)]</a>.
15540 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
15550 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  KE operator can 
15560 62 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e  be made case sen
15570 73 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65  sitive using the
15580 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65  .[case_sensitive
15590 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _like pragma].</
155a0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
155b0 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f  ment glob GLOB</
155c0 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f  tcl>.<p>^The GLO
155d0 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69  B operator is si
155e0 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75  milar to LIKE bu
155f0 74 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a  t uses the Unix.
15600 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79  file globbing sy
15610 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c  ntax for its wil
15620 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20  dcards.  ^Also, 
15630 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e  GLOB is case.sen
15640 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c  sitive, unlike L
15650 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42  IKE.  ^Both GLOB
15660 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65   and LIKE may be
15670 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68 65   preceded by.the
15680 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20   NOT keyword to 
15690 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73 65  invert the sense
156a0 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e   of the test.  ^
156b0 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a  The infix GLOB .
156c0 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
156d0 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
156e0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  ng the function.
156f0 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [glob(<i>Y</i>,<
15700 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61  i>X</i>)] and ca
15710 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79  n be modified by
15720 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74   overriding.that
15730 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   function.</p>..
15740 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
15750 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f   regexp REGEXP</
15760 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47  tcl>.<p>^The REG
15770 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EXP operator is 
15780 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
15790 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28   for the regexp(
157a0 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
157b0 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75    ^No regexp() u
157c0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
157d0 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
157e0 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
157f0 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
15800 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
15810 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
15820 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
15830 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63 61 74  ^If an [applicat
15840 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
15850 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20  function] named 
15860 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64 65  "regexp".is adde
15870 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74  d at run-time, t
15880 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69  hen the "<i>X</i
15890 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69  > REGEXP <i>Y</i
158a0 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  >" operator will
158b0 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .be implemented 
158c0 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22 72 65  as a call to "re
158d0 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  gexp(<i>Y</i>,<i
158e0 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c  >X</i>)".</p>..<
158f0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
15900 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
15910 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
15920 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
15930 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
15940 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
15950 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
15960 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
15970 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
15980 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
15990 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
159a0 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
159b0 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
159c0 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
159d0 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
159e0 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
159f0 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
15a00 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
15a10 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
15a20 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
15a30 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
15a40 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
15a50 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
15a60 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
15a70 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
15a80 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
15a90 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
15aa0 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
15ab0 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
15ac0 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
15ad0 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
15ae0 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
15af0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
15b00 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
15b10 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
15b20 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
15b30 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
15b40 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
15b50 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
15b60 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
15b70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
15b80 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
15b90 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
15ba0 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
15bb0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
15bc0 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
15bd0 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
15be0 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
15bf0 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
15c00 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
15c10 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
15c20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
15c30 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
15c40 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
15c50 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
15c60 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
15c70 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
15c80 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
15c90 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
15ca0 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
15cb0 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
15cc0 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a  ng languages.  .
15cd0 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
15ce0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
15cf0 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
15d00 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77  en the CASE keyw
15d10 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73  ord and the.firs
15d20 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69  t WHEN keyword i
15d30 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61  s called the "ba
15d40 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  se" expression. 
15d50 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62  ^There are two b
15d60 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68  asic forms.of th
15d70 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
15d80 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20  n: those with a 
15d90 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
15da0 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75  and those withou
15db0 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  t...<p>^In a CAS
15dc0 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65  E without a base
15dd0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63   expression, eac
15de0 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  h WHEN expressio
15df0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61  n is evaluated.a
15e00 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72  nd the result tr
15e10 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65  eated as a boole
15e20 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74  an, starting wit
15e30 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61  h the leftmost a
15e40 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f  nd continuing.to
15e50 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65   the right. ^The
15e60 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
15e70 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
15e80 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  s the evaluation
15e90 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70   of the THEN.exp
15ea0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
15eb0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
15ec0 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65  first WHEN expre
15ed0 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75  ssion that evalu
15ee0 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f  ates to.true. ^O
15ef0 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
15f00 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e WHEN expressio
15f10 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ns evaluate to t
15f20 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20  rue, the result 
15f30 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
15f40 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
15f50 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
15f60 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
15f70 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
15f80 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
15f90 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
15fa0 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f  true, then the o
15fb0 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
15fc0 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55   NULL...<p>^A NU
15fd0 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e  LL result is con
15fe0 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77  sidered untrue w
15ff0 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
16000 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e  HEN terms...<p>^
16010 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61  In a CASE with a
16020 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
16030 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  , the base expre
16040 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
16050 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64  ed just.once and
16060 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63   the result is c
16070 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20  ompared against 
16080 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  the evaluation o
16090 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70  f each WHEN .exp
160a0 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66  ression from lef
160b0 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65  t to right. ^The
160c0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
160d0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
160e0 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f  s the .evaluatio
160f0 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78  n of the THEN ex
16100 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
16110 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
16120 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72   first WHEN.expr
16130 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68  ession for which
16140 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
16150 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  is true. ^Or, if
16160 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
16170 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N.expressions ev
16180 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75  aluate to a valu
16190 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  e equal to the b
161a0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
161b0 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76  the result.of ev
161c0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
161d0 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
161e0 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
161f0 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
16200 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
16210 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
16220 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61  ssions produce a
16230 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f   result equal to
16240 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
16250 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c  sion,.the overal
16260 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
16270 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70  ...<p>^When comp
16280 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70  aring a base exp
16290 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20  ression against 
162a0 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  a WHEN expressio
162b0 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c  n, the same.coll
162c0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
162d0 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55  affinity, and NU
162e0 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65  LL-handling rule
162f0 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68  s apply as if th
16300 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e.base expressio
16310 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65  n and WHEN expre
16320 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63  ssion are respec
16330 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d  tively the left-
16340 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
16350 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c  operands of an <
16360 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69  big><b>=</b></bi
16370 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e  g> operator.</p>
16380 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65   ^If the base .e
16390 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
163a0 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
163b0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73  t of the CASE is
163c0 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75   always the resu
163d0 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  lt .of evaluatin
163e0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
163f0 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73  ssion if it exis
16400 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69  ts, or NULL if i
16410 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e  t does not...<p>
16420 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74  ^Both forms of t
16430 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
16440 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20  on use lazy, or 
16450 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a  short-circuit, .
16460 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e  evaluation...<p>
16470 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  ^(The only diffe
16480 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
16490 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
164a0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
164b0 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69   is that .the <i
164c0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
164d0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65  n is evaluated e
164e0 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
164f0 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65  he first example
16500 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65   but .might be e
16510 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c  valuated multipl
16520 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73  e times in the s
16530 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65  econd:..<ul><pre
16540 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
16550 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
16560 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
16570 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
16580 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
16590 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
165a0 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
165b0 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a  D.</pre></ul>)^.
165c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
165d0 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65  nt in_op {IN ope
165e0 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f  rator} {NOT IN o
165f0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
16600 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  h3>The IN and NO
16610 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f  T IN operators</
16620 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61  h3>.<p>^The IN a
16630 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
16640 6f 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c  ors take a singl
16650 65 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64  e scalar operand
16660 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64   on the.left and
16670 20 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e   a vector operan
16680 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66  d on the right.f
16690 6f 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c  ormed by an expl
166a0 69 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72  icit list of zer
166b0 6f 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72  o or more scalar
166c0 73 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c  s or by a .singl
166d0 65 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65  e subquery..^Whe
166e0 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72  n the right oper
166f0 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  and of an IN or 
16700 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
16710 69 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74  is a subquery, t
16720 68 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74  he.subquery must
16730 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72   have a single r
16740 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54  esult column..^T
16750 68 65 20 22 73 75 62 71 75 65 72 79 22 20 6f 6e  he "subquery" on
16760 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
16770 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 70  side of an IN op
16780 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 61 0a  erator can be a.
16790 74 61 62 6c 65 20 6e 61 6d 65 20 6f 72 20 5b 74  table name or [t
167a0 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63  able-valued func
167b0 74 69 6f 6e 5d 20 6e 61 6d 65 20 69 6e 20 77 68  tion] name in wh
167c0 69 63 68 20 63 61 73 65 20 74 68 65 0a 73 75 62  ich case the.sub
167d0 71 75 65 72 79 20 69 73 20 75 6e 64 65 72 73 74  query is underst
167e0 6f 6f 64 20 74 6f 20 62 65 20 22 28 53 45 4c 45  ood to be "(SELE
167f0 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e 61 6d  CT * FROM <i>nam
16800 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e 20 74  e</i>)"..^When t
16810 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
16820 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74   is an empty set
16830 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
16840 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  IN is false and 
16850 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f  the.result of NO
16860 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65  T IN is true, re
16870 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
16880 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64  left operand and
16890 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66   even if the.lef
168a0 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  t operand is NUL
168b0 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65 73 75  L..<p>^(The resu
168c0 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  lt of an IN or N
168d0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
168e0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
168f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61  the following.ma
16900 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  trix:..<center>.
16910 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
16920 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f  .<tr>.<th>Left o
16930 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55  perand <br>is NU
16940 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
16950 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e  rand <br>contain
16960 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74  s NULL.<th>Right
16970 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
16980 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68  an empty set.<th
16990 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f  >Left operand fo
169a0 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72  und <br>within r
169b0 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68  ight operand.<th
169c0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49  >Result of <br>I
169d0 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52  N operator.<th>R
169e0 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54  esult of <br>NOT
169f0 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72   IN operator.<tr
16a00 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
16a10 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
16a20 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16a30 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16a40 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16a50 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16a60 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
16a70 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  se.<td align="ce
16a80 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a  nter">true.<tr>.
16a90 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16aa0 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
16ab0 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
16ac0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16ad0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
16ae0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16af0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16b00 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
16b10 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16b20 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
16b30 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
16b40 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
16b50 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
16b60 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
16b70 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16b80 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
16b90 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
16ba0 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c  ter">true.<td al
16bb0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c  ign="center">fal
16bc0 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  se.<tr>.<td alig
16bd0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16be0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16bf0 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
16c00 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16c10 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16c20 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16c30 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69  er">NULL.<td ali
16c40 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
16c50 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
16c60 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
16c70 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16c80 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
16c90 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16ca0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16cb0 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f  "center">does no
16cc0 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69  t matter.<td ali
16cd0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
16ce0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16cf0 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65  er">NULL.</table
16d00 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  >.</center>)^..<
16d10 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c  p>^Note that SQL
16d20 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70  ite allows the p
16d30 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
16d40 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75  t of scalar valu
16d50 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d  es on.the right-
16d60 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20  hand side of an 
16d70 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
16d80 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65  rator to be an e
16d90 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f  mpty list but.mo
16da0 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  st other SQL dat
16db0 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20 65  abase database e
16dc0 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53  ngines and the S
16dd0 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72 65  QL92 standard re
16de0 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74  quire.the list t
16df0 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61  o contain at lea
16e00 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c  st one element.<
16e10 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
16e20 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45 58 49  gment in_op {EXI
16e30 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e  STS operator} {N
16e40 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  OT EXISTS operat
16e50 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  or}</tcl>.<h3>Th
16e60 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16e70 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h3>..<p>^The 
16e80 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
16e90 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74 65 73  always evaluates
16ea0 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   to one of the i
16eb0 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 30 20  nteger values 0 
16ec0 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78 65 63  .and 1. ^If exec
16ed0 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
16ee0 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69   statement speci
16ef0 66 69 65 64 20 61 73 20 74 68 65 20 72 69 67 68  fied as the righ
16f00 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64 20  t-hand .operand 
16f10 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  of the EXISTS op
16f20 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72 65 74  erator would ret
16f30 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  urn one or more 
16f40 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 0a 45  rows, then the.E
16f50 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65  XISTS operator e
16f60 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e 20 5e  valuates to 1. ^
16f70 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  If executing the
16f80 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20 72 65   SELECT would re
16f90 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74 20  turn.no rows at 
16fa0 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20 45 58  all, then the EX
16fb0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76  ISTS operator ev
16fc0 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20 0a 0a  aluates to 0. ..
16fd0 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  <p>^The number o
16fe0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61 63  f columns in eac
16ff0 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62  h row returned b
17000 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
17010 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29 20  tement.(if any) 
17020 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69 63  and the specific
17030 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64   values returned
17040 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74 20   have no effect 
17050 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 0a 6f  on the results.o
17060 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  f the EXISTS ope
17070 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74 69  rator. ^In parti
17080 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e 74  cular, rows cont
17090 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c 75  aining NULL valu
170a0 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64 6c  es are.not handl
170b0 65 64 20 61 6e 79 20 64 69 66 66 65 72 65 6e 74  ed any different
170c0 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77 69 74  ly from rows wit
170d0 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73  hout NULL values
170e0 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20 53 75  ...<h3>Scalar Su
170f0 62 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c  bqueries</h3>..<
17100 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74  p>^A [SELECT] st
17110 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64  atement enclosed
17120 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20   in parentheses 
17130 6d 61 79 20 61 70 70 65 61 72 20 61 73 20 61 20  may appear as a 
17140 73 63 61 6c 61 72 0a 71 75 61 6e 74 69 74 79 2e  scalar.quantity.
17150 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75 73 65   ^A [SELECT] use
17160 64 20 61 73 20 61 20 73 63 61 6c 61 72 20 71 75  d as a scalar qu
17170 61 6e 74 69 74 79 20 6d 75 73 74 20 72 65 74 75  antity must retu
17180 72 6e 20 61 20 72 65 73 75 6c 74 20 73 65 74 0a  rn a result set.
17190 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f  with a single co
171a0 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73 75 6c  lumn. ^The resul
171b0 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
171c0 69 6f 6e 20 69 73 20 74 68 65 20 76 61 6c 75 65  ion is the value
171d0 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c   of the.only col
171e0 75 6d 6e 20 69 6e 20 74 68 65 20 66 69 72 73 74  umn in the first
171f0 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79   row returned by
17200 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
17210 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 53  ement. ^If the S
17220 45 4c 45 43 54 20 0a 79 69 65 6c 64 73 20 6d 6f  ELECT .yields mo
17230 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73 75  re than one resu
17240 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73  lt row, all rows
17250 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74   after the first
17260 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49   are ignored. ^I
17270 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69 65  f.the SELECT yie
17280 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65  lds no rows, the
17290 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  n the value of t
172a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
172b0 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d   NULL..^(The LIM
172c0 49 54 20 6f 66 20 61 20 73 63 61 6c 61 72 20 73  IT of a scalar s
172d0 75 62 71 75 65 72 79 20 69 73 20 61 6c 77 61 79  ubquery is alway
172e0 73 20 31 2e 0a 41 6e 79 20 6f 74 68 65 72 20 4c  s 1..Any other L
172f0 49 4d 49 54 20 76 61 6c 75 65 20 67 69 76 65 6e  IMIT value given
17300 20 69 6e 20 74 68 65 20 53 51 4c 20 74 65 78 74   in the SQL text
17310 20 69 73 20 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a   is ignored.)^..
17320 3c 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66  <p>^All types of
17330 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
17340 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  ent, including a
17350 67 67 72 65 67 61 74 65 20 61 6e 64 20 5b 63 6f  ggregate and [co
17360 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 71  mpound SELECT].q
17370 75 65 72 69 65 73 20 28 71 75 65 72 69 65 73 20  ueries (queries 
17380 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69  with keywords li
17390 6b 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45  ke UNION or EXCE
173a0 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  PT) are allowed 
173b0 61 73 20 73 63 61 6c 61 72 0a 73 75 62 71 75 65  as scalar.subque
173c0 72 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65  ries...<h3>Table
173d0 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
173e0 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e  3>..<p>^A column
173f0 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79   name can be any
17400 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65   of the names de
17410 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52  fined in the [CR
17420 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
17430 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20  ement or one of 
17440 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70  the following sp
17450 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
17460 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  s: "<b>ROWID</b>
17470 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ",."<b>OID</b>",
17480 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
17490 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65  /b>"..^The three
174a0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
174b0 69 65 72 73 20 64 65 73 63 72 69 62 65 20 74 68  iers describe th
174c0 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e.unique integer
174d0 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64   key (the [rowid
174e0 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ]) associated wi
174f0 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
17500 20 65 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64   every table and
17510 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69   so are not avai
17520 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55  lable on [WITHOU
17530 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
17540 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64  .^The special id
17550 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72  entifiers only r
17560 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20  efer to the row 
17570 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41  key if the [CREA
17580 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
17590 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  ent does not def
175a0 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d  ine a real colum
175b0 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
175c0 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64  name..^The rowid
175d0 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
175e0 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
175f0 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
17600 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b  ed.</p>..<p>^A [
17610 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
17620 74 20 75 73 65 64 20 61 73 20 65 69 74 68 65 72  t used as either
17630 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
17640 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a 72 69  ry or as the .ri
17650 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
17660 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49   of an IN, NOT I
17670 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78 70 72  N or EXISTS expr
17680 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61  ession may conta
17690 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73 20 74  in .references t
176a0 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  o columns in the
176b0 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20 53 75   outer query. Su
176c0 63 68 20 61 20 73 75 62 71 75 65 72 79 20 69 73  ch a subquery is
176d0 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72   known as.a corr
176e0 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 2e  elated subquery.
176f0 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73   ^A correlated s
17700 75 62 71 75 65 72 79 20 69 73 20 72 65 65 76 61  ubquery is reeva
17710 6c 75 61 74 65 64 20 65 61 63 68 20 74 69 6d 65  luated each time
17720 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73 20 72  .its result is r
17730 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63  equired. ^An unc
17740 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
17750 72 79 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  ry is evaluated 
17760 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68  only once.and th
17770 65 20 72 65 73 75 6c 74 20 72 65 75 73 65 64 20  e result reused 
17780 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c  as necessary...<
17790 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
177a0 63 61 73 74 65 78 70 72 20 7b 43 41 53 54 20 65  castexpr {CAST e
177b0 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54  xpression} {CAST
177c0 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53 54 20 6f  } {cast} {CAST o
177d0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
177e0 68 33 3e 43 41 53 54 20 65 78 70 72 65 73 73 69  h3>CAST expressi
177f0 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43  ons</h3>..<p>A C
17800 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  AST expression o
17810 66 20 74 68 65 20 66 6f 72 6d 20 22 43 41 53 54  f the form "CAST
17820 28 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 41 53 20  (<i>expr</i> AS 
17830 3c 69 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e  <i>type-name</i>
17840 29 22 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f  )".is used to co
17850 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
17860 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 74  of <i>expr</i> t
17870 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b  o .a different [
17880 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73  storage class] s
17890 70 65 63 69 66 69 65 64 20 62 79 20 3c 79 79 74  pecified by <yyt
178a0 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79  erm>type-name</y
178b0 79 74 65 72 6d 3e 2e 0a 5e 41 20 43 41 53 54 20  yterm>..^A CAST 
178c0 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69  conversion is si
178d0 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e  milar to the con
178e0 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
178f0 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
17900 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
17910 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
17920 61 20 76 61 6c 75 65 20 65 78 63 65 70 74 20 74  a value except t
17930 68 61 74 20 77 69 74 68 0a 74 68 65 20 43 41 53  hat with.the CAS
17940 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63  T operator the c
17950 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73  onversion always
17960 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65   takes place eve
17970 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73  n if the convers
17980 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72  ion.lossy and ir
17990 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72  reversible, wher
179a0 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  eas column affin
179b0 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73  ity only changes
179c0 20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f   the data type.o
179d0 66 20 61 20 76 61 6c 75 65 20 69 66 20 74 68 65  f a value if the
179e0 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c   change is lossl
179f0 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
17a00 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  le...<p>^If the 
17a10 76 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72  value of <i>expr
17a20 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c 20 74 68  </i> is NULL, th
17a30 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
17a40 20 74 68 65 20 43 41 53 54 0a 65 78 70 72 65 73   the CAST.expres
17a50 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c  sion is also NUL
17a60 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  L. ^Otherwise, t
17a70 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73  he storage class
17a80 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69   of the result.i
17a90 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
17aa0 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75  applying the [ru
17ab0 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e  les for determin
17ac0 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  ing column affin
17ad0 69 74 79 5d 20 74 6f 0a 74 68 65 20 3c 79 79 74  ity] to.the <yyt
17ae0 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79  erm>type-name</y
17af0 79 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20  yterm>...<table 
17b00 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20  border=1>.<tr>. 
17b10 20 3c 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f   <th> Affinity o
17b20 66 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e  f <yyterm>type-n
17b30 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 20 20 3c  ame</yyterm>.  <
17b40 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
17b50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
17b60 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
17b70 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
17b80 6c 75 65 20 74 6f 20 61 20 3c 79 79 74 65 72 6d  lue to a <yyterm
17b90 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  >type-name</yyte
17ba0 72 6d 3e 20 77 69 74 68 20 6e 6f 20 61 66 66 69  rm> with no affi
17bb0 6e 69 74 79 20 0a 20 20 63 61 75 73 65 73 20 74  nity .  causes t
17bc0 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65  he value to.  be
17bd0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
17be0 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e  a BLOB.  ^Castin
17bf0 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73  g to a BLOB cons
17c00 69 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61  ists of first ca
17c10 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75  sting.  the valu
17c20 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65  e to TEXT in the
17c30 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74   [encoding] of t
17c40 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
17c50 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69  ection, then.  i
17c60 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20  nterpreting the 
17c70 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73  resulting byte s
17c80 65 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f  equence as a BLO
17c90 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20  B instead of as 
17ca0 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  TEXT...<tr>.  <t
17cb0 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e  d> TEXT.  <td> ^
17cc0 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76  To cast a BLOB v
17cd0 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68  alue to TEXT, th
17ce0 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
17cf0 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70  tes that make up
17d00 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69   the.  BLOB is i
17d10 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
17d20 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67  xt encoded using
17d30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
17d40 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20  coding..  <p>.  
17d50 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54   ^Casting an INT
17d60 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c  EGER or REAL val
17d70 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e  ue into TEXT ren
17d80 64 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61  ders the value a
17d90 73 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73  s if via .    [s
17da0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
17db0 29 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74  )] except that t
17dc0 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58  he resulting TEX
17dd0 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f  T uses the [enco
17de0 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65  ding] of.    the
17df0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
17e00 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  tion...<tr>.  <t
17e10 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e  d> REAL.  <td> ^
17e20 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42  When casting a B
17e30 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52  LOB value to a R
17e40 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69  EAL, the value i
17e50 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  s first converte
17e60 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58  d to.        TEX
17e70 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68  T..       <p>^Wh
17e80 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58  en casting a TEX
17e90 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c  T value to REAL,
17ea0 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73   the longest pos
17eb0 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a  sible prefix of.
17ec0 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75          the valu
17ed0 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  e that can be in
17ee0 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72  terpreted as a r
17ef0 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78  eal number is ex
17f00 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20  tracted from.   
17f10 20 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61       the TEXT va
17f20 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61  lue and the rema
17f30 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e  inder ignored. ^
17f40 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63  Any leading spac
17f50 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  es in the.      
17f60 20 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65    TEXT value are
17f70 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f   ignored when co
17f80 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45  nverging from TE
17f90 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66  XT to REAL. ^(If
17fa0 20 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20   there is.      
17fb0 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74    no prefix that
17fc0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
17fd0 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75  ted as a real nu
17fe0 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74  mber, the result
17ff0 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20   of the.        
18000 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e  conversion is 0.
18010 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  0.)^..<tr>.  <td
18020 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e  > INTEGER.  <td>
18030 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
18040 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49   BLOB value to I
18050 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75  NTEGER, the valu
18060 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
18070 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
18080 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
18090 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
180a0 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e  TEXT value to IN
180b0 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65  TEGER, the longe
180c0 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66  st possible pref
180d0 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68  ix of.        th
180e0 65 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  e value that can
180f0 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
18100 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  as an integer nu
18110 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65  mber is extracte
18120 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74  d from.        t
18130 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e  he TEXT value an
18140 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  d the remainder 
18150 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65  ignored. ^Any le
18160 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20  ading spaces in 
18170 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54  the.        TEXT
18180 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76   value when conv
18190 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54  erting from TEXT
181a0 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20   to INTEGER are 
181b0 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65  ignored. ^If the
181c0 72 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f  re.        is no
181d0 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e   prefix that can
181e0 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
181f0 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  as an integer nu
18200 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74  mber, the result
18210 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20  .        of the 
18220 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e  conversion is 0.
18230 20 20 5e 28 54 68 65 20 43 41 53 54 20 6f 70 65    ^(The CAST ope
18240 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61 6e 64  rator understand
18250 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20 20 20  s decimal.      
18260 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c 79 20    integers only 
18270 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72 73 69  &mdash; conversi
18280 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63 69 6d  on of [hexadecim
18290 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73 74 6f  al integers] sto
182a0 70 73 20 0a 20 20 20 20 20 20 20 20 61 74 20 74  ps .        at t
182b0 68 65 20 22 78 22 20 69 6e 20 74 68 65 20 22 30  he "x" in the "0
182c0 78 22 20 70 72 65 66 69 78 20 6f 66 20 74 68 65  x" prefix of the
182d0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
182e0 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20 20 20  eger string .   
182f0 20 20 20 20 20 61 6e 64 20 74 68 75 73 20 72 65       and thus re
18300 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54  sult of the CAST
18310 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e   is always zero.
18320 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20  )^..      <p>^A 
18330 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76  cast of a REAL v
18340 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54  alue into an INT
18350 45 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20  EGER results in 
18360 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
18370 20 20 62 65 74 77 65 65 6e 20 74 68 65 20 52 45    between the RE
18380 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72  AL value and zer
18390 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73  o that is closes
183a0 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61  t to the REAL va
183b0 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61  lue..      ^If a
183c0 20 52 45 41 4c 20 69 73 20 67 72 65 61 74 65 72   REAL is greater
183d0 20 74 68 61 6e 20 74 68 65 20 67 72 65 61 74 65   than the greate
183e0 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e  st possible sign
183f0 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72  ed.      integer
18400 20 28 2b 39 32 32 33 33 37 32 30 33 36 38 35 34   (+9223372036854
18410 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
18420 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 67   result is the g
18430 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65  reatest possible
18440 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
18450 74 65 67 65 72 20 61 6e 64 20 69 66 20 74 68 65  teger and if the
18460 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68   REAL is less th
18470 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  an the least pos
18480 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20  sible signed.   
18490 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32     integer (-922
184a0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
184b0 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
184c0 74 20 69 73 20 74 68 65 20 6c 65 61 73 74 20 70  t is the least p
184d0 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69  ossible.      si
184e0 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20  gned integer... 
184f0 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f       <p>Prior to
18500 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
18510 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67 20 61  3.8.2, casting a
18520 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61   REAL value grea
18530 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b  ter than.      +
18540 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18550 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e  807.0 into an in
18560 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20 69  teger resulted i
18570 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74  n the most negat
18580 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ive.      intege
18590 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  r, -922337203685
185a0 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20 62  4775808.  This b
185b0 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e  ehavior was mean
185c0 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65  t to emulate the
185d0 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20  .      behavior 
185e0 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64 77  of x86/x64 hardw
185f0 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74  are when doing t
18600 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61  he equivalent ca
18610 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  st...<tr>.  <td>
18620 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20   NUMERIC.  <td> 
18630 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20  ^Casting a TEXT 
18640 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  or BLOB value in
18650 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74  to NUMERIC first
18660 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20   does a forced. 
18670 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74    conversion int
18680 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20  o REAL but then 
18690 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73  further converts
186a0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
186b0 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61   INTEGER if.   a
186c0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63  nd only if the c
186d0 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52  onversion from R
186e0 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69  EAL to INTEGER i
186f0 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72  s lossless and r
18700 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68  eversible..   Th
18710 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  is is the only c
18720 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65  ontext in SQLite
18730 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52   where the NUMER
18740 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b  IC and INTEGER [
18750 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62  affinities].   b
18760 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
18770 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69  y..   <p> ^Casti
18780 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54  ng a REAL or INT
18790 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55  EGER value to NU
187a0 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70  MERIC is a no-op
187b0 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c  , even if a real
187c0 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20  .   value could 
187d0 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
187e0 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
187f0 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c  teger...</tr>..<
18800 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74  /table>..<p>^Not
18810 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  e that the resul
18820 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
18830 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75  ny non-BLOB valu
18840 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61  e into a .BLOB a
18850 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66 72  nd the result fr
18860 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42  om casting any B
18870 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
18880 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a   non-BLOB value.
18890 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
188a0 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
188b0 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62 61  ether the databa
188c0 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73  se [encoding] is
188d0 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65   UTF-8,.UTF-16be
188e0 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a  , or UTF-16le...
188f0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
18900 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62  t booleanexpr {b
18910 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
18920 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f  n}</tcl>.<h3>Boo
18930 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  lean Expressions
18940 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  </h3>..<p>The SQ
18950 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
18960 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74  res several cont
18970 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65 78  exts where an ex
18980 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61  pression is .eva
18990 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
189a0 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20  esult converted 
189b0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72  to a boolean (tr
189c0 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c  ue or false) val
189d0 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78  ue. These.contex
189e0 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a  ts are:..  <ul>.
189f0 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45      <li> the WHE
18a00 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  RE clause of a S
18a10 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72  ELECT, UPDATE or
18a20 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
18a30 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
18a40 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
18a50 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20  se of a join in 
18a60 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18a70 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
18a80 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f   HAVING clause o
18a90 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
18aa0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
18ab0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
18ac0 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72  f an SQL trigger
18ad0 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74  , and.    <li> t
18ae0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
18af0 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d  r clauses of som
18b00 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
18b10 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e  ns..  </ul>..<p>
18b20 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  ^(To convert the
18b30 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53   results of an S
18b40 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  QL expression to
18b50 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
18b60 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63  , SQLite.first c
18b70 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  asts the result 
18b80 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
18b90 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
18ba0 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65  ay as a .[CAST e
18bb0 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 6e 75  xpression]. A nu
18bc0 6d 65 72 69 63 20 7a 65 72 6f 20 76 61 6c 75 65  meric zero value
18bd0 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
18be0 30 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c 75 65  0 or real .value
18bf0 20 30 2e 30 29 20 69 73 20 63 6f 6e 73 69 64 65   0.0) is conside
18c00 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e  red to be false.
18c10 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69    A NULL value i
18c20 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a 41 6c  s still NULL..Al
18c30 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61  l other values a
18c40 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  re considered tr
18c50 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20  ue.)^..<p>^(For 
18c60 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c  example, the val
18c70 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30  ues NULL, 0.0, 0
18c80 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20  , 'english' and 
18c90 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73  '0' are all cons
18ca0 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c  idered.to be fal
18cb0 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31  se.)^ ^(Values 1
18cc0 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31  , 1.0, 0.1, -0.1
18cd0 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20   and '1english' 
18ce0 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
18cf0 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c  o .be true.)^..<
18d00 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33  h3>Functions</h3
18d10 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  >.<p>SQLite supp
18d20 6f 72 74 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66  orts many [coref
18d30 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20  unc|simple] and 
18d40 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
18d50 74 65 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e  te].SQL function
18d60 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61  s.  For presenta
18d70 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73  tion purposes, s
18d80 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  imple functions 
18d90 61 72 65 20 66 75 72 74 68 65 72 0a 73 75 62 64  are further.subd
18da0 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72  ivided into [cor
18db0 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e  efunc | core fun
18dc0 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74  ctions] and [dat
18dd0 65 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20  efunc|date-time 
18de0 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70 70 6c  functions]..Appl
18df0 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 61 64 64  ications can add
18e00 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c 20   new functions, 
18e10 77 72 69 74 74 65 6e 20 69 6e 20 43 2f 43 2b 2b  written in C/C++
18e20 2c 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  , using the.[sql
18e30 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
18e40 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
18e50 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 74 20  e..</p>..<p>^It 
18e60 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68  is possible to h
18e70 61 76 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ave an aggregate
18e80 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
18e90 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
18ea0 61 0a 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a.simple functio
18eb0 6e 2c 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  n, as long as th
18ec0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
18ed0 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 74 77  ments for the tw
18ee0 6f 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 0a 66  o forms of the.f
18ef0 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 69 66 66  unction are diff
18f00 65 72 65 6e 74 2e 20 20 5e 46 6f 72 20 65 78 61  erent.  ^For exa
18f10 6d 70 6c 65 2c 20 74 68 65 20 5b 61 67 67 5f 6d  mple, the [agg_m
18f20 61 78 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69  ax|max()] functi
18f30 6f 6e 20 77 69 74 68 20 61 0a 73 69 6e 67 6c 65  on with a.single
18f40 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20   argument is an 
18f50 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 74 68  aggregate and th
18f60 65 20 5b 6d 61 78 28 29 5d 20 66 75 6e 63 74 69  e [max()] functi
18f70 6f 6e 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d  on with two or m
18f80 6f 72 65 0a 61 72 67 75 6d 65 6e 74 73 20 69 73  ore.arguments is
18f90 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
18fa0 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  on...<tcl>.#####
18fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ff0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
19000 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e  n {Core Function
19010 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f  s} corefunc {*co
19020 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e  refunc}.proc fun
19030 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
19040 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
19050 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20  hd_puts {<tr>}. 
19060 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73   regsub -all {\s
19070 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim 
19080 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e  $syntax] {<br />
19090 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
190a0 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d  b -all {\(([^*)]
190b0 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28  +)\)} $syntax {(
190c0 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74  <i>\1</i>)} synt
190d0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
190e0 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f   {,} $syntax {</
190f0 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20  i>,<i>} syntax. 
19100 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69   regsub -all {<i
19110 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79  >\.\.\.</i>} $sy
19120 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61  ntax {...} synta
19130 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64  x.  hd_puts "<td
19140 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20   valign=\"top\" 
19150 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20  align=\"right\" 
19160 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a  width=\"120\">".
19170 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
19180 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
19190 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
191a0 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
191b0 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
191c0 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
191d0 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
191e0 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
191f0 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
19200 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
19210 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
19220 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
19230 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
19240 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
19250 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
19260 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
19270 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
19280 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
19290 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
192a0 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74  puts "$syntax</t
192b0 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  d>".  hd_puts {<
192c0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
192d0 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24  }.  hd_resolve $
192e0 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b  desc.  hd_puts {
192f0 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f  </td></tr>}.}.</
19300 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72  tcl>..<p>The cor
19310 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
19320 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
19330 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
19340 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44  . .[datefunc | D
19350 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66  ate &amp; Time f
19360 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b 61 67 67 66  unctions],.[aggf
19370 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
19380 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61 6e 64 0a  functions], and.
19390 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e 20 66 75  [json1 | JSON fu
193a0 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63  nctions] are doc
193b0 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74 65  umented separate
193c0 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74  ly.  An.applicat
193d0 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61  ion may define a
193e0 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69  dditional.functi
193f0 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
19400 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
19410 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
19420 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
19430 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
19440 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e  tion()] API.</p>
19450 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
19460 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
19470 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20  >.<tcl>.funcdef 
19480 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {abs(X)} {} {.  
19490 5e 54 68 65 20 61 62 73 28 58 29 20 66 75 6e 63  ^The abs(X) func
194a0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
194b0 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
194c0 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20  of the numeric. 
194d0 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41   argument X.  ^A
194e0 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55  bs(X) returns NU
194f0 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e  LL if X is NULL.
19500 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65 74   .  ^(Abs(X) ret
19510 75 72 6e 73 20 30 2e 30 20 69 66 20 58 20 69 73  urns 0.0 if X is
19520 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
19530 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  b.  that cannot 
19540 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
19550 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e  a numeric value.
19560 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74 68 65  )^  ^If X is the
19570 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32   .  integer -922
19580 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
19590 20 74 68 65 6e 20 61 62 73 28 58 29 20 74 68 72   then abs(X) thr
195a0 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ows an integer o
195b0 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20  verflow.  error 
195c0 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e  since there is n
195d0 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73  o equivalent pos
195e0 69 74 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f  itive 64-bit two
195f0 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75   complement valu
19600 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  e..}..funcdef {c
19610 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
19620 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20   ^The changes() 
19630 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19640 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
19650 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
19660 74 20 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20  t were changed. 
19670 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20   or inserted or 
19680 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d  deleted by the m
19690 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d  ost recently com
196a0 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44  pleted INSERT, D
196b0 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41  ELETE,.  or UPDA
196c0 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78  TE statement, ex
196d0 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61 74 65  clusive of state
196e0 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c  ments in lower-l
196f0 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20  evel triggers.. 
19700 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20   ^The changes() 
19710 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
19720 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
19730 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
19740 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
19750 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65   function and he
19760 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  nce follows the 
19770 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63  same rules for c
19780 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e  ounting changes.
19790 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61  .}..funcdef {cha
197a0 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d  r(X1,X2,...,XN)}
197b0 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 63 68   {} {.  ^(The ch
197c0 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29  ar(X1,X2,...,XN)
197d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
197e0 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f  s a string compo
197f0 73 65 64 20 6f 66 20 63 68 61 72 61 63 74 65 72  sed of character
19800 73 20 68 61 76 69 6e 67 20 74 68 65 0a 20 20 20  s having the.   
19810 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
19820 6e 74 20 76 61 6c 75 65 73 20 6f 66 20 69 6e 74  nt values of int
19830 65 67 65 72 73 20 58 31 20 74 68 72 6f 75 67 68  egers X1 through
19840 20 58 4e 2c 20 72 65 73 70 65 63 74 69 76 65 6c   XN, respectivel
19850 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  y.)^.}..funcdef 
19860 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e  {coalesce(X,Y,..
19870 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  .)} {} {.  ^The 
19880 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74  coalesce() funct
19890 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
198a0 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
198b0 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
198c0 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
198d0 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72  all arguments ar
198e0 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73  e NULL.  ^Coales
198f0 63 65 28 29 20 6d 75 73 74 20 68 61 76 65 20 61  ce() must have a
19900 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67  t least .  2 arg
19910 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
19920 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b  ef {glob(X,Y)} {
19930 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28  } {.  ^The glob(
19940 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  X,Y) function is
19950 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74   equivalent to t
19960 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  he.  expression 
19970 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e  "<b>Y GLOB X</b>
19980 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74  "..  Note that t
19990 68 65 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d  he X and Y argum
199a0 65 6e 74 73 20 61 72 65 20 72 65 76 65 72 73 65  ents are reverse
199b0 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20  d in the glob() 
199c0 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74  function.  relat
199d0 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
199e0 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
199f0 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c  ..  ^If the [sql
19a00 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
19a10 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
19a20 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f  e is used to.  o
19a30 76 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62  verride the glob
19a40 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77  (X,Y) function w
19a50 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  ith an alternati
19a60 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ve implementatio
19a70 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c  n then.  the [GL
19a80 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  OB] operator wil
19a90 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74  l invoke the alt
19aa0 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65  ernative impleme
19ab0 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  ntation..}..func
19ac0 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29  def {ifnull(X,Y)
19ad0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66  } {} {.  ^The if
19ae0 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
19af0 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
19b00 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d  f its first non-
19b10 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f  NULL argument, o
19b20 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68  r.  NULL if both
19b30 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
19b40 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20  ULL.  ^Ifnull() 
19b50 6d 75 73 74 20 68 61 76 65 20 65 78 61 63 74 6c  must have exactl
19b60 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20  y 2 arguments.. 
19b70 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
19b80 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76  unction is equiv
19b90 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73  alent to [coales
19ba0 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61  ce()] with two a
19bb0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
19bc0 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29  cdef {instr(X,Y)
19bd0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e  } {} {.  ^The in
19be0 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  str(X,Y) functio
19bf0 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69 72 73  n finds the firs
19c00 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  t occurrence of 
19c10 73 74 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20  string Y within 
19c20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20  .  string X and 
19c30 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
19c40 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72  er of prior char
19c50 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f  acters plus 1, o
19c60 72 20 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f  r 0 if.  Y is no
19c70 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68  where found with
19c80 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20  in X..  ^Or, if 
19c90 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68  X and Y are both
19ca0 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73   BLOBs, then ins
19cb0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
19cc0 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20  one.  more than 
19cd0 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73  the number bytes
19ce0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69   prior to the fi
19cf0 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
19d00 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59  f Y, or 0 if.  Y
19d10 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20   does not occur 
19d20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20  anywhere within 
19d30 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72  X..  ^If both ar
19d40 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20  guments X and Y 
19d50 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72  to instr(X,Y) ar
19d60 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61  e non-NULL and a
19d70 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74  re not BLOBs.  t
19d80 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74  hen both are int
19d90 65 72 70 72 65 74 65 64 20 61 73 20 73 74 72 69  erpreted as stri
19da0 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65  ngs..  ^If eithe
19db0 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c  r X or Y are NUL
19dc0 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20  L in instr(X,Y) 
19dd0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
19de0 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63  is NULL..}..func
19df0 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20  def {hex(X)} {} 
19e00 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66  {.  ^The hex() f
19e10 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65  unction interpre
19e20 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  ts its argument 
19e30 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65  as a BLOB and re
19e40 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
19e50 20 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70   which is the up
19e60 70 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63  per-case hexadec
19e70 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f  imal rendering o
19e80 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
19e90 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a  .  that blob..}.
19ea0 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69  .funcdef {last_i
19eb0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b  nsert_rowid()} {
19ec0 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  } {.  ^The last_
19ed0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
19ee0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19ef0 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66  the [ROWID].  of
19f00 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e   the last row in
19f10 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61  sert from the da
19f20 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
19f30 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20  n which invoked 
19f40 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a  the.  function..
19f50 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
19f60 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66  rt_rowid() SQL f
19f70 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
19f80 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
19f90 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f    [sqlite3_last_
19fa0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20  insert_rowid()] 
19fb0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
19fc0 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  function..}..fun
19fd0 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d  cdef {length(X)}
19fe0 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73   {} {.  ^For a s
19ff0 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74  tring value X, t
1a000 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
1a010 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1a020 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63  e number of .  c
1a030 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62  haracters (not b
1a040 79 74 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72  ytes) in X prior
1a050 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
1a060 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53  L character..  S
1a070 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74 72 69  ince SQLite stri
1a080 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61  ngs do not norma
1a090 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20  lly contain NUL 
1a0a0 63 68 61 72 61 63 74 65 72 73 2c 20 74 68 65 20  characters, the 
1a0b0 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63  length(X).  func
1a0c0 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c  tion will usuall
1a0d0 79 20 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74  y return the tot
1a0e0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
1a0f0 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
1a100 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20  tring X..  ^For 
1a110 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20  a blob value X, 
1a120 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e  length(X) return
1a130 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1a140 62 79 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f  bytes in the blo
1a150 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55  b..  ^If X is NU
1a160 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  LL then length(X
1a170 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66  ) is NULL..  ^If
1a180 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68   X is numeric th
1a190 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  en length(X) ret
1a1a0 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20  urns the length 
1a1b0 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65  of a string.  re
1a1c0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1a1d0 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  X..}..funcdef {l
1a1e0 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c  ike(X,Y) like(X,
1a1f0 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
1a200 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
1a210 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  n is used to imp
1a220 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62  lement the.  "<b
1a230 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45  >Y LIKE X &#91;E
1a240 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e  SCAPE Z&#93;</b>
1a250 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20  " expression. . 
1a260 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61   ^If the optiona
1a270 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
1a280 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
1a290 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
1a2a0 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65  nction is invoke
1a2b0 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67  d with three arg
1a2c0 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77  uments.  ^Otherw
1a2d0 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76  ise, it is.  inv
1a2e0 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
1a2f0 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f  guments only. No
1a300 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
1a310 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61  d Y parameters a
1a320 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e  re.  reversed in
1a330 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
1a340 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f  tion relative to
1a350 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45   the infix [LIKE
1a360 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54  ] operator..  ^T
1a370 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
1a380 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69  te_function()] i
1a390 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20  nterface can be 
1a3a0 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65  used to override
1a3b0 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
1a3c0 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65  nction and there
1a3d0 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70  by change the op
1a3e0 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  eration of the. 
1a3f0 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
1a400 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69  .  When overridi
1a410 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  ng the like() fu
1a420 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62  nction, it may b
1a430 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f  e important.  to
1a440 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20 74   override both t
1a450 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65  he two and three
1a460 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f   argument versio
1a470 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29  ns of the like()
1a480 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74   .  function. Ot
1a490 68 65 72 77 69 73 65 2c 20 64 69 66 66 65 72 65  herwise, differe
1a4a0 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63  nt code may be c
1a4b0 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65  alled to impleme
1a4c0 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20  nt the.  [LIKE] 
1a4d0 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69  operator dependi
1a4e0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
1a4f0 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63   not an ESCAPE c
1a500 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73 70 65  lause was .  spe
1a510 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63  cified..}...func
1a520 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28  def {likelihood(
1a530 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1a540 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  e likelihood(X,Y
1a550 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a560 6e 73 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e  ns argument X un
1a570 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65  changed..  ^(The
1a580 20 76 61 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65   value Y in like
1a590 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74  lihood(X,Y) must
1a5a0 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
1a5b0 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20  oint constant.  
1a5c0 62 65 74 77 65 65 6e 20 30 2e 30 20 61 6e 64 20  between 0.0 and 
1a5d0 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29  1.0, inclusive.)
1a5e0 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68  ^.  ^The likelih
1a5f0 6f 6f 64 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ood(X) function 
1a600 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20  is a no-op that 
1a610 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1a620 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61  or.  optimizes a
1a630 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63  way so that it c
1a640 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63  onsumes no CPU c
1a650 79 63 6c 65 73 20 64 75 72 69 6e 67 20 72 75 6e  ycles during run
1a660 2d 74 69 6d 65 0a 20 20 28 74 68 61 74 20 69 73  -time.  (that is
1a670 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74  , during calls t
1a680 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  o [sqlite3_step(
1a690 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70  )])..  ^The purp
1a6a0 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c  ose of the likel
1a6b0 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74  ihood(X,Y) funct
1a6c0 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ion is to provid
1a6d0 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68  e a hint.  to th
1a6e0 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
1a6f0 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e  that the argumen
1a700 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e  t X is a boolean
1a710 20 74 68 61 74 20 69 73 0a 20 20 74 72 75 65 20   that is.  true 
1a720 77 69 74 68 20 61 20 70 72 6f 62 61 62 69 6c 69  with a probabili
1a730 74 79 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  ty of approximat
1a740 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b  ely Y..  ^(The [
1a750 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e  unlikely(X)] fun
1a760 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68  ction is short-h
1a770 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f  and for likeliho
1a780 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a  od(X,0.0625).)^.
1a790 20 20 5e 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28    ^(The [likely(
1a7a0 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  X)] function is 
1a7b0 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c  short-hand for l
1a7c0 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33  ikelihood(X,0.93
1a7d0 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  75).)^.}..funcde
1a7e0 66 20 7b 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d  f {likely(X)} {}
1a7f0 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79   {.  ^The likely
1a800 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1a810 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
1a820 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
1a830 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20   ^The likely(X) 
1a840 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  function is a no
1a850 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64  -op that the cod
1a860 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70  e generator.  op
1a870 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20  timizes away so 
1a880 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73  that it consumes
1a890 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61   no CPU cycles a
1a8a0 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68  t.  run-time (th
1a8b0 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61  at is, during ca
1a8c0 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  lls to [sqlite3_
1a8d0 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65  step()])..  ^The
1a8e0 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
1a8f0 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1a900 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65  on is to provide
1a910 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65   a hint.  to the
1a920 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74   query planner t
1a930 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hat the argument
1a940 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20   X is a boolean 
1a950 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20  value.  that is 
1a960 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28  usually true. ^(
1a970 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  The likely(X) fu
1a980 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
1a990 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c  lent.  to [likel
1a9a0 69 68 6f 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29  ihood](X,0.9375)
1a9b0 2e 29 5e 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75  .)^ See also: [u
1a9c0 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a  nlikely(X)]..}..
1a9d0 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78  funcdef {load_ex
1a9e0 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f  tension(X) load_
1a9f0 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20  extension(X,Y)} 
1aa00 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64  {} {.  ^The load
1aa10 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20  _extension(X,Y) 
1aa20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b  function loads [
1aa30 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
1aa40 73 5d 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68  s] out of the sh
1aa50 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66  ared.  library f
1aa60 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e  ile named X usin
1aa70 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  g the entry poin
1aa80 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c  t Y.  ^The resul
1aa90 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73  t of load_extens
1aaa0 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79  ion().  is alway
1aab0 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59  s a NULL.  ^If Y
1aac0 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
1aad0 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74   the default ent
1aae0 72 79 20 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73  ry point name is
1aaf0 20 75 73 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f   used..  ^The lo
1ab00 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  ad_extension() f
1ab10 75 6e 63 74 69 6f 6e 20 72 61 69 73 65 73 20 61  unction raises a
1ab20 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74  n exception if t
1ab30 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69  he extension fai
1ab40 6c 73 20 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20  ls to.  load or 
1ab50 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65  initialize corre
1ab60 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65  ctly...  <p>^The
1ab70 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1ab80 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  ) function will 
1ab90 66 61 69 6c 20 69 66 20 74 68 65 20 65 78 74 65  fail if the exte
1aba0 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74  nsion attempts t
1abb0 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  o .  modify or d
1abc0 65 6c 65 74 65 20 61 6e 20 53 51 4c 20 66 75 6e  elete an SQL fun
1abd0 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69  ction or collati
1abe0 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54  ng sequence.  ^T
1abf0 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63  he.  extension c
1ac00 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74  an add new funct
1ac10 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
1ac20 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74  g sequences, but
1ac30 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79   cannot.  modify
1ac40 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73 74   or delete exist
1ac50 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  ing functions or
1ac60 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1ac70 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20 20 74  nces because.  t
1ac80 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  hose functions a
1ac90 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  nd/or collating 
1aca0 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20  sequences might 
1acb0 62 65 20 75 73 65 64 20 65 6c 73 65 77 68 65 72  be used elsewher
1acc0 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72 65  e.  in the curre
1acd0 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c  ntly running SQL
1ace0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20   statement.  To 
1acf0 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f  load an extensio
1ad00 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73  n that.  changes
1ad10 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63   or deletes func
1ad20 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
1ad30 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73  ng sequences, us
1ad40 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  e the.  [sqlite3
1ad50 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
1ad60 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50  )] C-language AP
1ad70 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72  I.</p>..  <p>For
1ad80 20 73 65 63 75 72 69 74 79 20 72 65 61 73 6f 6e   security reason
1ad90 73 2c 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  s, extension loa
1ada0 64 65 64 20 69 73 20 74 75 72 6e 65 64 20 6f 66  ded is turned of
1adb0 66 20 62 79 20 64 65 66 61 75 6c 74 20 61 6e 64  f by default and
1adc0 20 6d 75 73 74 0a 20 20 62 65 20 65 6e 61 62 6c   must.  be enabl
1add0 65 64 20 62 79 20 61 20 70 72 69 6f 72 20 63 61  ed by a prior ca
1ade0 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65  ll to [sqlite3_e
1adf0 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
1ae00 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a  sion()].</p>.}..
1ae10 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58  funcdef {lower(X
1ae20 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1ae30 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e  ower(X) function
1ae40 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
1ae50 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69 74 68  of string X with
1ae60 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61   all ASCII chara
1ae70 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65  cters.  converte
1ae80 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e  d to lower case.
1ae90 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62    ^The default b
1aea0 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20  uilt-in lower() 
1aeb0 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20  function works. 
1aec0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
1aed0 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20  cters only.  To 
1aee0 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69  do case conversi
1aef0 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49  ons on non-ASCII
1af00 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c  .  characters, l
1af10 6f 61 64 20 74 68 65 20 49 43 55 20 65 78 74 65  oad the ICU exte
1af20 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  nsion..}..funcde
1af30 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69  f {ltrim(X) ltri
1af40 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
1af50 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66  The ltrim(X,Y) f
1af60 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1af70 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1af80 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1af90 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1afa0 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1afb0 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c   in Y from the l
1afc0 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20  eft side of X.. 
1afd0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1afe0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1aff0 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73  ltrim(X) removes
1b000 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65   spaces from the
1b010 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20   left side.  of 
1b020 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  X..}..funcdef {m
1b030 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d  ax(X,Y,...)} {*m
1b040 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20  axCoreFunc *max 
1b050 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74  {max() SQL funct
1b060 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1b070 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
1b080 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  x() function ret
1b090 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
1b0a0 74 20 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61  t with the .  ma
1b0b0 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20  ximum value, or 
1b0c0 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61  return NULL if a
1b0d0 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e  ny argument is N
1b0e0 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c  ULL. .  ^The mul
1b0f0 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28  ti-argument max(
1b100 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63  ) function searc
1b110 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
1b120 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
1b130 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72  ight.  for an ar
1b140 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  gument that defi
1b150 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  nes a collating 
1b160 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
1b170 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
1b180 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  .  function for 
1b190 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61  all string compa
1b1a0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e  risons.  ^If non
1b1b0 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
1b1c0 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65  ts to max().  de
1b1d0 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67  fine a collating
1b1e0 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20   function, then 
1b1f0 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  the BINARY colla
1b200 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73  ting function is
1b210 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20   used..  ^(Note 
1b220 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62  that <b>max()</b
1b230 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  > is a simple fu
1b240 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74  nction when.  it
1b250 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61   has 2 or more a
1b260 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65  rguments but ope
1b270 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d  rates as an.  [m
1b280 61 78 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  axAggFunc | aggr
1b290 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
1b2a0 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20  if given only a 
1b2b0 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
1b2c0 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  )^.}..funcdef {m
1b2d0 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d  in(X,Y,...)} {*m
1b2e0 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20  inCoreFunc *min 
1b2f0 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74  {min() SQL funct
1b300 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1b310 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69  ulti-argument mi
1b320 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  n() function ret
1b330 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
1b340 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e  t with the.  min
1b350 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54  imum value..  ^T
1b360 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1b370 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
1b380 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
1b390 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
1b3a0 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
1b3b0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
1b3c0 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
1b3d0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
1b3e0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
1b3f0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
1b400 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
1b410 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
1b420 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
1b430 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28  rguments to min(
1b440 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
1b450 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
1b460 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
1b470 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1b480 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e  ion is used..  ^
1b490 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69  (Note that <b>mi
1b4a0 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  n()</b> is a sim
1b4b0 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
1b4c0 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
1b4d0 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
1b4e0 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
1b4f0 6e 20 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63  n .  [minAggFunc
1b500 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
1b510 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a  ction] if given.
1b520 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20    only a single 
1b530 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66  argument.)^.}..f
1b540 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58  uncdef {nullif(X
1b550 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1b560 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e   nullif(X,Y) fun
1b570 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74  ction returns it
1b580 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
1b590 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1b5a0 73 20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e  s are.  differen
1b5b0 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68  t and NULL if th
1b5c0 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  e arguments are 
1b5d0 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20  the same.  ^The 
1b5e0 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63  nullif(X,Y) func
1b5f0 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20  tion.  searches 
1b600 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
1b610 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1b620 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
1b630 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a   that defines a.
1b640 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63    collating func
1b650 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
1b660 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  at collating fun
1b670 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
1b680 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f  ring.  compariso
1b690 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72  ns.  ^If neither
1b6a0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c   argument to nul
1b6b0 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20 61 20  lif() defines a 
1b6c0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1b6d0 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49  on.  then the BI
1b6e0 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a  NARY is used..}.
1b6f0 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66  .funcdef {printf
1b700 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d  (FORMAT,...)} {}
1b710 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74   {.  ^(The print
1b720 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51  f(FORMAT,...) SQ
1b730 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  L function works
1b740 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74   like the [sqlit
1b750 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d  e3_mprintf()] C-
1b760 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74  language.  funct
1b770 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e  ion and the prin
1b780 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72  tf() function fr
1b790 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
1b7a0 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54  C library.)^.  T
1b7b0 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
1b7c0 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74  t is a format st
1b7d0 72 69 6e 67 20 74 68 61 74 20 73 70 65 63 69 66  ring that specif
1b7e0 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74  ies how to const
1b7f0 72 75 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a  ruct the output.
1b800 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76    string using v
1b810 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d  alues taken from
1b820 20 73 75 62 73 65 71 75 65 6e 74 20 61 72 67 75   subsequent argu
1b830 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20  ments.  ^If the 
1b840 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20  FORMAT argument 
1b850 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20  is.  missing or 
1b860 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
1b870 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e  sult is NULL.  ^
1b880 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73  The %n format is
1b890 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
1b8a0 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74  d and.  does not
1b8b0 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75   consume an argu
1b8c0 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66  ment.  ^The %p f
1b8d0 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61  ormat is an alia
1b8e0 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20  s for %X.  ^The 
1b8f0 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69  %z format.  is i
1b900 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 77  nterchangeable w
1b910 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68  ith %s.  ^(If th
1b920 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20  ere are too few 
1b930 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65  arguments in the
1b940 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a   argument list,.
1b950 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65    missing argume
1b960 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65 64 20  nts are assumed 
1b970 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76  to have a NULL v
1b980 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20 74  alue, which is t
1b990 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20  ranslated into. 
1b9a0 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75   0 or 0.0 for nu
1b9b0 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72  meric formats or
1b9c0 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
1b9d0 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a   for %s.)^.}.  .
1b9e0 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28  .funcdef {quote(
1b9f0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1ba00 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f  quote(X) functio
1ba10 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65  n returns the te
1ba20 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74  xt of an SQL lit
1ba30 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20  eral which.  is 
1ba40 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73  the value of its
1ba50 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62   argument suitab
1ba60 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e  le for inclusion
1ba70 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61   into an SQL sta
1ba80 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e  tement..  ^Strin
1ba90 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65  gs are surrounde
1baa0 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74  d by single-quot
1bab0 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20  es with escapes 
1bac0 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74  on interior quot
1bad0 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20  es.  as needed. 
1bae0 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f   ^BLOBs are enco
1baf0 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d  ded as hexadecim
1bb00 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e  al literals..  ^
1bb10 53 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62  Strings with emb
1bb20 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63  edded NUL charac
1bb30 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72  ters cannot be r
1bb40 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74  epresented as st
1bb50 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20  ring.  literals 
1bb60 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65  in SQL and hence
1bb70 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74   the returned st
1bb80 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20  ring literal is 
1bb90 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a  truncated prior.
1bba0 20 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e    to the first N
1bbb0 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  UL..}..funcdef {
1bbc0 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20  random()} {} {. 
1bbd0 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66   ^The random() f
1bbe0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bbf0 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20  a pseudo-random 
1bc00 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65  integer.  betwee
1bc10 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  n -9223372036854
1bc20 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33  775808 and +9223
1bc30 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e  372036854775807.
1bc40 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
1bc50 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b  domblob(N)} {} {
1bc60 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c  .  ^The randombl
1bc70 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
1bc80 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20  eturn an N-byte 
1bc90 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20  blob containing 
1bca0 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20  pseudo-random.  
1bcb0 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20  bytes. ^If N is 
1bcc0 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e  less than 1 then
1bcd0 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d   a 1-byte random
1bce0 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65   blob is returne
1bcf0 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20  d...  <p>Hint:  
1bd00 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e  applications can
1bd10 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c   generate global
1bd20 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69  ly unique identi
1bd30 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68  fiers.  using th
1bd40 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65  is function toge
1bd50 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29  ther with [hex()
1bd60 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65  ] and/or.  [lowe
1bd70 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c  r()] like this:<
1bd80 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f  /p>..  <blockquo
1bd90 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d  te>.  hex(random
1bda0 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62  blob(16))<br></b
1bdb0 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72  r>.  lower(hex(r
1bdc0 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a  andomblob(16))).
1bdd0 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a    </blockquote>.
1bde0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c  }..funcdef {repl
1bdf0 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b  ace(X,Y,Z)} {} {
1be00 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28  .  ^The replace(
1be10 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20  X,Y,Z) function 
1be20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1be30 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74   formed by subst
1be40 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67  ituting.  string
1be50 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63   Z for every occ
1be60 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e  urrence of strin
1be70 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e  g Y in string X.
1be80 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a    ^The [BINARY].
1be90 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75    collating sequ
1bea0 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72  ence is used for
1beb0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
1bec0 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79  If Y is an empty
1bed0 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72  .  string then r
1bee0 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65  eturn X unchange
1bef0 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74  d.  ^If Z is not
1bf00 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73   initially.  a s
1bf10 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73  tring, it is cas
1bf20 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72  t to a UTF-8 str
1bf30 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f  ing prior to pro
1bf40 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63  cessing..}..func
1bf50 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f  def {round(X) ro
1bf60 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  und(X,Y)} {} {. 
1bf70 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29   ^The round(X,Y)
1bf80 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bf90 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  s a floating-poi
1bfa0 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75  nt.  value X rou
1bfb0 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73  nded to Y digits
1bfc0 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
1bfd0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
1bfe0 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20  nt..  ^If the Y 
1bff0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
1c000 74 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d  ted, it is assum
1c010 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66  ed to be 0..}..f
1c020 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29  uncdef {rtrim(X)
1c030 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   rtrim(X,Y)} {} 
1c040 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58  {.  ^The rtrim(X
1c050 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1c060 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1c070 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
1c080 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
1c090 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
1c0a0 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
1c0b0 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f  the right side o
1c0c0 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
1c0d0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
1c0e0 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72  tted, rtrim(X) r
1c0f0 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
1c100 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73  om the right.  s
1c110 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  ide of X..}..fun
1c120 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29  cdef {soundex(X)
1c130 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f  } {} {.  ^The so
1c140 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f  undex(X) functio
1c150 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1c160 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73  ng that is the s
1c170 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20  oundex encoding 
1c180 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
1c190 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e   X..  ^The strin
1c1a0 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75  g "?000" is retu
1c1b0 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75  rned if the argu
1c1c0 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20  ment is NULL or 
1c1d0 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53  contains.  no AS
1c1e0 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63  CII alphabetic c
1c1f0 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54  haracters..  ^(T
1c200 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
1c210 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c  omitted from SQL
1c220 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  ite by default..
1c230 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61    It is only ava
1c240 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53  ilable if the [S
1c250 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63  QLITE_SOUNDEX] c
1c260 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1c270 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65  on.  is used whe
1c280 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  n SQLite is buil
1c290 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
1c2a0 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  {sqlite_compileo
1c2b0 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d  ption_get(N)} {}
1c2c0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1c2d0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
1c2e0 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  et() SQL functio
1c2f0 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
1c300 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c  round the.  [sql
1c310 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
1c320 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20  on_get()] C/C++ 
1c330 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69  function..  ^Thi
1c340 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
1c350 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69  s the N-th compi
1c360 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75  le-time option u
1c370 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
1c380 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66  ite.  or NULL if
1c390 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
1c3a0 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68  ge.  See also th
1c3b0 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  e [compile_optio
1c3c0 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66  ns pragma]..}..f
1c3d0 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63  uncdef {sqlite_c
1c3e0 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
1c3f0 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  d(X)} {} {.  ^Th
1c400 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
1c410 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51  option_used() SQ
1c420 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
1c430 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1c440 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f  he.  [sqlite3_co
1c450 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1c460 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ()] C/C++ functi
1c470 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20  on..  ^When the 
1c480 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71  argument X to sq
1c490 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1c4a0 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20  on_used(X) is a 
1c4b0 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69  string which.  i
1c4c0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
1c4d0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
1c4e0 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ion, this routin
1c4f0 65 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28  e returns true (
1c500 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30  1) or.  false (0
1c510 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  ) depending on w
1c520 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1c530 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73  at option was us
1c540 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20  ed during the.  
1c550 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  build..}..funcde
1c560 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  f {sqlite_source
1c570 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  _id()} {} {.  ^T
1c580 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  he sqlite_source
1c590 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  _id() function r
1c5a0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1c5b0 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20  that identifies 
1c5c0 74 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76  the.  specific v
1c5d0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f  ersion of the so
1c5e0 75 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77  urce code that w
1c5f0 61 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  as used to build
1c600 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69   the SQLite.  li
1c610 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72  brary.  ^The str
1c620 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20  ing returned by 
1c630 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1c640 28 29 20 69 73 0a 20 20 74 68 65 20 64 61 74 65  () is.  the date
1c650 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20 74   and time that t
1c660 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 77  he source code w
1c670 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20 66 6f  as checked in fo
1c680 6c 6c 6f 77 65 64 20 62 79 0a 20 20 74 68 65 20  llowed by.  the 
1c690 53 48 41 31 20 68 61 73 68 20 66 6f 72 20 74 68  SHA1 hash for th
1c6a0 61 74 20 63 68 65 63 6b 2d 69 6e 2e 20 20 5e 54  at check-in.  ^T
1c6b0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a  his function is.
1c6c0 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72    an SQL wrapper
1c6d0 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
1c6e0 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d  ite3_sourceid()]
1c6f0 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C interface..}.
1c700 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1c710 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b  _version()} {} {
1c720 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76  .  ^The sqlite_v
1c730 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ersion() functio
1c740 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 65  n returns the ve
1c750 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72  rsion string for
1c760 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69   the SQLite.  li
1c770 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72 75  brary that is ru
1c780 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75  nning.  ^This fu
1c790 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  nction is an SQL
1c7a0 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e  .  wrapper aroun
1c7b0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  d the [sqlite3_l
1c7c0 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69  ibversion()] C-i
1c7d0 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
1c7e0 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59  cdef {substr(X,Y
1c7f0 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d  ,Z) substr(X,Y)}
1c800 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62   {} {.  ^The sub
1c810 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  str(X,Y,Z) funct
1c820 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75  ion returns a su
1c830 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74  bstring of input
1c840 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20 62   string X that b
1c850 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65  egins.  with the
1c860 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
1c870 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20 63  and which is Z c
1c880 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a  haracters long..
1c890 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74    ^If Z is omitt
1c8a0 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28 58  ed then substr(X
1c8b0 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ,Y) returns all 
1c8c0 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f 75  characters throu
1c8d0 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20  gh the end.  of 
1c8e0 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65 67  the string X beg
1c8f0 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20  inning with the 
1c900 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66  Y-th..  ^The lef
1c910 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72  t-most character
1c920 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20   of X is number 
1c930 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67  1.  ^If Y is neg
1c940 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65  ative.  then the
1c950 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
1c960 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e   of the substrin
1c970 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f  g is found by co
1c980 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a  unting from the.
1c990 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74    right rather t
1c9a0 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e  han the left.  ^
1c9b0 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65  If Z is negative
1c9c0 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28   then.  the abs(
1c9d0 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70 72  Z) characters pr
1c9e0 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68  eceding the Y-th
1c9f0 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 72   character are r
1ca00 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58  eturned..  ^If X
1ca10 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 65   is a string the
1ca20 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64  n characters ind
1ca30 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63  ices refer to ac
1ca40 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68  tual UTF-8 .  ch
1ca50 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58  aracters.  ^If X
1ca60 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20   is a BLOB then 
1ca70 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65  the indices refe
1ca80 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66  r to bytes..}..f
1ca90 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68  uncdef {total_ch
1caa0 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
1cab0 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67  ^The total_chang
1cac0 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  es() function re
1cad0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1cae0 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a   of row changes.
1caf0 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53 45    caused by INSE
1cb00 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1cb10 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74  LETE.  statement
1cb20 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72 72  s since the curr
1cb30 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ent database con
1cb40 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e  nection was open
1cb50 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63  ed..  ^This func
1cb60 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
1cb70 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
1cb80 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
1cb90 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69  ges()].  C/C++ i
1cba0 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
1cbb0 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72  cdef {trim(X) tr
1cbc0 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
1cbd0 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66  ^The trim(X,Y) f
1cbe0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1cbf0 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1cc00 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1cc10 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1cc20 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1cc30 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20   in Y from both 
1cc40 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66  ends of X..  ^If
1cc50 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
1cc60 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d  is omitted, trim
1cc70 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
1cc80 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64  es from both end
1cc90 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  s of X..}..funcd
1cca0 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b  ef {typeof(X)} {
1ccb0 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f  } {.  ^The typeo
1ccc0 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  f(X) function re
1ccd0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
1cce0 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
1ccf0 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a  e [datatype] of.
1cd00 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e    the expression
1cd10 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74   X: "null", "int
1cd20 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22  eger", "real", "
1cd30 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22  text", or "blob"
1cd40 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ..}..funcdef {un
1cd50 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a  likely(X)} {} {.
1cd60 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
1cd70 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1cd80 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
1cd90 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20   X unchanged..  
1cda0 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  ^The unlikely(X)
1cdb0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e   function is a n
1cdc0 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f  o-op that the co
1cdd0 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f  de generator.  o
1cde0 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f  ptimizes away so
1cdf0 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65   that it consume
1ce00 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20  s no CPU cycles 
1ce10 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74  at.  run-time (t
1ce20 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
1ce30 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
1ce40 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
1ce50 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
1ce60 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
1ce70 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1ce80 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1ce90 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1cea0 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1ceb0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1cec0 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20  an value.  that 
1ced0 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74  is usually not t
1cee0 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b  rue. ^(The unlik
1cef0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1cf00 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
1cf10 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28  to [likelihood](
1cf20 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a  X, 0.0625).)^.}.
1cf30 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64  .funcdef {unicod
1cf40 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  e(X)} {} {.  ^Th
1cf50 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66 75 6e  e unicode(X) fun
1cf60 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1cf70 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f 64  e numeric unicod
1cf80 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72  e code point cor
1cf90 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20  responding to.  
1cfa0 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
1cfb0 74 65 72 20 6f 66 20 74 68 65 20 73 74 72 69 6e  ter of the strin
1cfc0 67 20 58 2e 20 20 49 66 20 74 68 65 20 61 72 67  g X.  If the arg
1cfd0 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65  ument to unicode
1cfe0 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72  (X) is not a str
1cff0 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72  ing.  then the r
1d000 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e  esult is undefin
1d010 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
1d020 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20  upper(X)} {} {. 
1d030 20 5e 54 68 65 20 75 70 70 65 72 28 58 29 20 66   ^The upper(X) f
1d040 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1d050 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
1d060 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63  string X in whic
1d070 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63  h all .  lower-c
1d080 61 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63  ase ASCII charac
1d090 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74  ters are convert
1d0a0 65 64 20 74 6f 20 74 68 65 69 72 20 75 70 70 65  ed to their uppe
1d0b0 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e  r-case equivalen
1d0c0 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a  t..}..funcdef {z
1d0d0 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b  eroblob(N)} {} {
1d0e0 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62  .  ^The zeroblob
1d0f0 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (N) function ret
1d100 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73  urns a BLOB cons
1d110 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65  isting of N byte
1d120 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c  s of 0x00..  SQL
1d130 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73  ite manages thes
1d140 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79  e zeroblobs very
1d150 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a   efficiently.  Z
1d160 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20  eroblobs can be 
1d170 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76  used to.  reserv
1d180 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c  e space for a BL
1d190 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65 72  OB that is later
1d1a0 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a   written using .
1d1b0 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f    [sqlite3_blob_
1d1c0 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65  open() | increme
1d1d0 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a  ntal BLOB I/O]..
1d1e0 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63    ^This SQL func
1d1f0 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tion is implemen
1d200 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ted using the [s
1d210 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65  qlite3_result_ze
1d220 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74  roblob()].  rout
1d230 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43  ine from the C/C
1d240 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1d250 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  </tcl>.</table>.
1d260 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1d270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d2b0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
1d2c0 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e  ate And Time Fun
1d2d0 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63  ctions} datefunc
1d2e0 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b 64 61 74   {*datefunc {dat
1d2f0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1d300 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f 72  ions}}.hd_keywor
1d310 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20 66  ds {date() SQL f
1d320 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29  unction} {time()
1d330 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68   SQL function}.h
1d340 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
1d350 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74  time() SQL funct
1d360 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28  ion} {julianday(
1d370 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1d380 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74 72  hd_keywords {str
1d390 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  ftime() SQL func
1d3a0 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tion}.</tcl>..<p
1d3b0 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  >.SQLite support
1d3c0 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  s five date and 
1d3d0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
1d3e0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
1d3f0 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e  .<p>.<ol>.<li> ^
1d400 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e  (<b>date(</b><i>
1d410 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1d420 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1d430 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1d440 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1d450 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>time(</b><i>ti
1d460 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1d470 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1d480 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1d490 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1d4a0 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  datetime(</b><i>
1d4b0 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1d4c0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1d4d0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1d4e0 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1d4f0 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e  b>julianday(</b>
1d500 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1d510 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1d520 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1d530 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1d540 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f  ^(<b>strftime(</
1d550 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d  b><i>format, tim
1d560 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1d570 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1d580 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1d590 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a  /li>.</ol>..<p>.
1d5a0 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20 61  ^All five date a
1d5b0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1d5c0 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73 74  s take a time st
1d5d0 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75 6d  ring as an argum
1d5e0 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20  ent. .^The time 
1d5f0 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77  string is follow
1d600 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f  ed by zero or mo
1d610 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e  re modifiers. .^
1d620 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 66  The strftime() f
1d630 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b  unction also tak
1d640 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  es a format stri
1d650 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74 20  ng as its first 
1d660 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a  argument..</p>..
1d670 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e 64  <p>.The date and
1d680 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1d690 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66 0a  use a subset of.
1d6a0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1d6b0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53  edia.org/wiki/IS
1d6c0 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36 30  O_8601 | IS0-860
1d6d0 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  1] date and time
1d6e0 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64  .formats..^The d
1d6f0 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ate() function r
1d700 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20  eturns the date 
1d710 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a 20  in this format: 
1d720 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68  YYYY-MM-DD. .^Th
1d730 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  e time() functio
1d740 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 69  n returns the ti
1d750 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20  me as HH:MM:SS. 
1d760 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28 29  .^The datetime()
1d770 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d780 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  s "YYYY-MM-DD HH
1d790 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20  :MM:SS". .^(The 
1d7a0 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63  julianday() func
1d7b0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1d7c0 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
1d7d0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1d7e0 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c  Julian_day | Jul
1d7f0 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e  ian day] - the.n
1d800 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
1d810 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65  nce noon in Gree
1d820 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65  nwich on Novembe
1d830 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20  r 24, 4714 B.C. 
1d840 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .([http://en.wik
1d850 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1d860 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72  Proleptic_Gregor
1d870 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50  ian_calendar | P
1d880 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69  roleptic Gregori
1d890 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e  an calendar]).)^
1d8a0 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29  .^The strftime()
1d8b0 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
1d8c0 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74   the date format
1d8d0 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
1d8e0 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72   .the format str
1d8f0 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61 73  ing specified as
1d900 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
1d910 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74  ent..^The format
1d920 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73   string supports
1d930 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e   the most common
1d940 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66   substitutions f
1d950 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68 74  ound in the .[ht
1d960 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f  tp://opengroup.o
1d970 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30  rg/onlinepubs/00
1d980 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66  7908799/xsh/strf
1d990 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66  time.html | strf
1d9a0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d  time() function]
1d9b0 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61  .from the standa
1d9c0 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c 75  rd C library plu
1d9d0 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74 69  s two new substi
1d9e0 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20  tutions, %f and 
1d9f0 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77  %J..^(The follow
1da00 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65 74  ing is a complet
1da10 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20  e list of valid 
1da20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73 74  strftime() subst
1da30 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a  itutions:.</p>..
1da40 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
1da50 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
1da60 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
1da70 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
1da80 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74  <tr><td><td widt
1da90 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e  h="10"><td></tr>
1daa0 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74  ..<tr><td> %d <t
1dab0 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f  d><td> day of mo
1dac0 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e  nth: 00.<tr><td>
1dad0 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61   %f <td><td> fra
1dae0 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a  ctional seconds:
1daf0 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e   SS.SSS.<tr><td>
1db00 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75   %H <td><td> hou
1db10 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74  r: 00-24 .<tr><t
1db20 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %j <td><td> d
1db30 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31 2d  ay of year: 001-
1db40 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20  366.<tr><td> %J 
1db50 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20  <td><td> Julian 
1db60 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  day number.<tr><
1db70 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20  td> %m <td><td> 
1db80 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72  month: 01-12.<tr
1db90 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64  ><td> %M <td><td
1dba0 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a  > minute: 00-59.
1dbb0 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e  <tr><td> %s <td>
1dbc0 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e  <td> seconds sin
1dbd0 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74  ce 1970-01-01.<t
1dbe0 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74  r><td> %S <td><t
1dbf0 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35  d> seconds: 00-5
1dc00 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74  9.<tr><td> %w <t
1dc10 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77 65  d><td> day of we
1dc20 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e 64  ek 0-6 with Sund
1dc30 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25  ay==0.<tr><td> %
1dc40 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20  W <td><td> week 
1dc50 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c  of year: 00-53.<
1dc60 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c  tr><td> %Y <td><
1dc70 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d 39  td> year: 0000-9
1dc80 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20  999.<tr><td> %% 
1dc90 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62  <td><td> %.</tab
1dca0 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
1dcb0 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63  >)^..<p>.^(Notic
1dcc0 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72  e that all other
1dcd0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1dce0 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  unctions can be 
1dcf0 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72  expressed.in ter
1dd00 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29  ms of strftime()
1dd10 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1dd20 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
1dd30 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
1dd40 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
1dd50 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
1dd60 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c  <b>Function</b><
1dd70 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74  td width="30"><t
1dd80 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20  d><b>Equivalent 
1dd90 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c  strftime()</b>.<
1dda0 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e  tr><td>   date(.
1ddb0 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64  ..)      <td><td
1ddc0 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
1ddd0 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72  %m-%d', ...).<tr
1dde0 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e  ><td>   time(...
1ddf0 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
1de00 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25 4d   strftime('%H:%M
1de10 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
1de20 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e  td>   datetime(.
1de30 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ..)  <td><td>  s
1de40 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1de50 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e  d %H:%M:%S', ...
1de60 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c  ).<tr><td>   jul
1de70 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e  ianday(...) <td>
1de80 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1de90 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c  %J', ...).</tabl
1dea0 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
1deb0 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79  )^..<p>.The only
1dec0 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f   reasons for pro
1ded0 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  viding functions
1dee0 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72 66   other than strf
1def0 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63 6f  time() is.for co
1df00 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f  nvenience and fo
1df10 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f  r efficiency..</
1df20 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72  p>..<h3>Time Str
1df30 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ings</h3>..<p>^(
1df40 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  A time string ca
1df50 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20 74  n be in any of t
1df60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
1df70 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  mats:</p>..<ol>.
1df80 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1df90 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  DD</i>.<li> <i>Y
1dfa0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c  YYY-MM-DD HH:MM<
1dfb0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1dfc0 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c  -MM-DD HH:MM:SS<
1dfd0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1dfe0 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e  -MM-DD HH:MM:SS.
1dff0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
1e000 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
1e010 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f  >T</b><i>HH:MM</
1e020 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1e030 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
1e040 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  ><i>HH:MM:SS</i>
1e050 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1e060 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
1e070 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
1e080 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
1e090 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
1e0a0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
1e0b0 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
1e0c0 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f  i>.<li> <b>now</
1e0d0 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44  b>.<li> <i>DDDDD
1e0e0 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29  DDDDD</i>.</ol>)
1e0f0 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61  ^..<p>.^In forma
1e100 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c 20  ts 5 through 7, 
1e110 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69 74  the "T" is a lit
1e120 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20 73  eral character s
1e130 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20 64  eparating .the d
1e140 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d 65  ate and the time
1e150 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62 79  , as required by
1e160 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33   .[http://www.w3
1e170 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61  c.org/TR/NOTE-da
1e180 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30  tetime | ISO-860
1e190 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20  1]. .^Formats 8 
1e1a0 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20  through 10 that 
1e1b0 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74  specify only a t
1e1c0 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74  ime assume a dat
1e1d0 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31  e of .2000-01-01
1e1e0 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65  . Format 11, the
1e1f0 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69   string 'now', i
1e200 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
1e210 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61   the .current da
1e220 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f  te and time as o
1e230 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
1e240 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65   xCurrentTime me
1e250 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c  thod.of the [sql
1e260 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74  ite3_vfs] object
1e270 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e   in use..^The 'n
1e280 6f 77 27 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ow' argument to 
1e290 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1e2a0 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79 73 20 72  nctions always r
1e2b0 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20 74  eturns exactly t
1e2c0 68 65 0a 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he.same value fo
1e2d0 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63  r multiple invoc
1e2e0 61 74 69 6f 6e 73 20 77 69 74 68 69 6e 20 74 68  ations within th
1e2f0 65 20 73 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f  e same [sqlite3_
1e300 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b  step()] call..^[
1e310 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1e320 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f  dia.org/wiki/Coo
1e330 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73  rdinated_Univers
1e340 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72  al_Time | Univer
1e350 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
1e360 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75  Time (UTC)] is u
1e370 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32  sed. .^Format 12
1e380 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   is the .[http:/
1e390 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1e3a0 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
1e3b0 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  y | Julian day n
1e3c0 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64  umber].expressed
1e3d0 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   as a floating p
1e3e0 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e  oint value..</p>
1e3f0 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20  ..<p>.Formats 2 
1e400 74 68 72 6f 75 67 68 20 31 30 20 6d 61 79 20 62  through 10 may b
1e410 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
1e420 6c 6f 77 65 64 20 62 79 20 61 20 74 69 6d 65 7a  lowed by a timez
1e430 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72 20 6f 66  one indicator of
1e440 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23   the form."<i>&#
1e450 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c  91;+-&#93;HH:MM<
1e460 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20 22 3c 69  /i>" or just "<i
1e470 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65 20 64 61  >Z</i>".  The da
1e480 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1e490 74 69 6f 6e 73 20 75 73 65 20 55 54 43 20 6f 72  tions use UTC or
1e4a0 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74   "zulu".time int
1e4b0 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20  ernally, and so 
1e4c0 74 68 65 20 22 5a 22 20 73 75 66 66 69 78 20 69  the "Z" suffix i
1e4d0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20  s a no-op.  Any 
1e4e0 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22  non-zero "HH:MM"
1e4f0 20 73 75 66 66 69 78 20 69 73 0a 73 75 62 74 72   suffix is.subtr
1e500 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 69  acted from the i
1e510 6e 64 69 63 61 74 65 64 20 64 61 74 65 20 61 6e  ndicated date an
1e520 64 20 74 69 6d 65 20 69 6e 20 6f 72 64 65 72 20  d time in order 
1e530 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20  to compute zulu 
1e540 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c  time..For exampl
1e550 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f  e, all of the fo
1e560 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20 73 74 72  llowing time str
1e570 69 6e 67 73 20 61 72 65 20 65 71 75 69 76 61 6c  ings are equival
1e580 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ent:.</p>..<bloc
1e590 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d  kquote>.2013-10-
1e5a0 30 37 20 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c  07 08:23:19.120<
1e5b0 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 54 30  br>.2013-10-07T0
1e5c0 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e  8:23:19.120Z<br>
1e5d0 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 34 3a 32  .2013-10-07 04:2
1e5e0 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62  3:19.120-04:00<b
1e5f0 72 3e 0a 32 34 35 36 35 37 32 2e 38 34 39 35 32  r>.2456572.84952
1e600 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  685.</blockquote
1e610 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d  >..<p>.^(In form
1e620 61 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30  ats 4, 7, and 10
1e630 2c 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c  , the fractional
1e640 20 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53   seconds value S
1e650 53 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f  S.SSS can have.o
1e660 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74  ne or more digit
1e670 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
1e680 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20  decimal point.  
1e690 45 78 61 63 74 6c 79 20 74 68 72 65 65 20 64 69  Exactly three di
1e6a0 67 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69  gits are.shown i
1e6b0 6e 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62  n the examples b
1e6c0 65 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20  ecause only the 
1e6d0 66 69 72 73 74 20 74 68 72 65 65 20 64 69 67 69  first three digi
1e6e0 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
1e6f0 6e 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt.to the result
1e700 2c 20 62 75 74 20 74 68 65 20 69 6e 70 75 74 20  , but the input 
1e710 73 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20  string can have 
1e720 66 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68  fewer or more th
1e730 61 6e 20 74 68 72 65 65 20 64 69 67 69 74 73 0a  an three digits.
1e740 61 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d  and the date/tim
1e750 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  e functions will
1e760 20 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63   still operate c
1e770 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69  orrectly.)^.Simi
1e780 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32  larly, format 12
1e790 20 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31   is shown with 1
1e7a0 30 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69  0 significant di
1e7b0 67 69 74 73 2c 20 62 75 74 20 74 68 65 20 64 61  gits, but the da
1e7c0 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e  te/time.function
1e7d0 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63  s will really ac
1e7e0 63 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20  cept as many or 
1e7f0 61 73 20 66 65 77 20 64 69 67 69 74 73 20 61 73  as few digits as
1e800 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74   are necessary t
1e810 6f 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o.represent the 
1e820 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1e830 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64  r..</p>..<h3>Mod
1e840 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ifiers</h3>..<p>
1e850 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
1e860 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
1e870 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
1e880 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74 20   modifiers that 
1e890 0a 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f  .alter date and/
1e8a0 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d  or time. ^Each m
1e8b0 6f 64 69 66 69 65 72 0a 69 73 20 61 20 74 72 61  odifier.is a tra
1e8c0 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  nsformation that
1e8d0 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74   is applied to t
1e8e0 68 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f  he time value to
1e8f0 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69   its left..^Modi
1e900 66 69 65 72 73 20 61 72 65 20 61 70 70 6c 69 65  fiers are applie
1e910 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  d from left to r
1e920 69 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69  ight; order is i
1e930 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20  mportant..^(The 
1e940 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69  available modifi
1e950 65 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ers are as follo
1e960 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws.</p>..<ol>.<l
1e970 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e  i> NNN days.<li>
1e980 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20   NNN hours.<li> 
1e990 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e  NNN minutes.<li>
1e9a0 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64   NNN.NNNN second
1e9b0 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68  s.<li> NNN month
1e9c0 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73  s.<li> NNN years
1e9d0 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d  .<li> start of m
1e9e0 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20  onth.<li> start 
1e9f0 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61  of year.<li> sta
1ea00 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77  rt of day.<li> w
1ea10 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e  eekday N.<li> un
1ea20 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63  ixepoch.<li> loc
1ea30 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20  altime.<li> utc 
1ea40 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  .</ol>)^..<p>^Th
1ea50 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69  e first six modi
1ea60 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68  fiers (1 through
1ea70 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20   6) .simply add 
1ea80 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d  the specified am
1ea90 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20  ount of time to 
1eaa0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
1eab0 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20  e .specified by 
1eac0 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 69  the preceding ti
1ead0 6d 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64  mestring and mod
1eae0 69 66 69 65 72 73 2e 0a 5e 54 68 65 20 27 73 27  ifiers..^The 's'
1eaf0 20 63 68 61 72 61 63 74 65 72 20 61 74 20 74 68   character at th
1eb00 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6d 6f 64  e end of the mod
1eb10 69 66 69 65 72 20 6e 61 6d 65 73 20 69 73 20 6f  ifier names is o
1eb20 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74 65 20 74  ptional..^Note t
1eb30 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e  hat "&plusmn;NNN
1eb40 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62   months" works b
1eb50 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20  y rendering the 
1eb60 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e  original date in
1eb70 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44  to.the YYYY-MM-D
1eb80 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67  D format, adding
1eb90 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e   the &plusmn;NNN
1eba0 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68   to the MM month
1ebb0 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72   value, then.nor
1ebc0 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73  malizing the res
1ebd0 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72  ult.  ^Thus, for
1ebe0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61   example, the da
1ebf0 74 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f  ta 2001-03-31 mo
1ec00 64 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f  dified.by '+1 mo
1ec10 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79  nth' initially y
1ec20 69 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31  ields 2001-04-31
1ec30 2c 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79  , but April only
1ec40 20 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20   has 30 days.so 
1ec50 74 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d  the date is norm
1ec60 61 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30  alized to 2001-0
1ec70 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61  5-01.  ^A simila
1ec80 72 20 65 66 66 65 63 74 20 6f 63 63 75 72 73 20  r effect occurs 
1ec90 77 68 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61  when.the origina
1eca0 6c 20 64 61 74 65 20 69 73 20 46 65 62 72 75 61  l date is Februa
1ecb0 72 79 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79  ry 29 of a leapy
1ecc0 65 61 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69  ear and the modi
1ecd0 66 69 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b  fier is.&plusmn;
1ece0 4e 20 79 65 61 72 73 20 77 68 65 72 65 20 4e 20  N years where N 
1ecf0 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c  is not a multipl
1ed00 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a  e of four.</p>..
1ed10 3c 70 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f  <p>^The "start o
1ed20 66 22 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20  f" modifiers (7 
1ed30 74 68 72 6f 75 67 68 20 39 29 20 73 68 69 66 74  through 9) shift
1ed40 20 74 68 65 20 64 61 74 65 20 62 61 63 6b 77 61   the date backwa
1ed50 72 64 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69  rds .to the begi
1ed60 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72  nning of the cur
1ed70 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72  rent month, year
1ed80 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70   or day.</p>..<p
1ed90 3e 5e 54 68 65 20 22 77 65 65 6b 64 61 79 22 20  >^The "weekday" 
1eda0 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e 63 65  modifier advance
1edb0 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 77 61  s the date forwa
1edc0 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64  rd to the next d
1edd0 61 74 65 20 0a 77 68 65 72 65 20 74 68 65 20 77  ate .where the w
1ede0 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73  eekday number is
1edf0 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c   N. Sunday is 0,
1ee00 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e   Monday is 1, an
1ee10 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a  d so forth.</p>.
1ee20 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70  .<p>^The "unixep
1ee30 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31  och" modifier (1
1ee40 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  1) only works if
1ee50 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   it immediately 
1ee60 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73  follows .a times
1ee70 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44  tring in the DDD
1ee80 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20  DDDDDDD format. 
1ee90 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20  .^This modifier 
1eea0 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44 44  causes the DDDDD
1eeb0 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65  DDDDD to be inte
1eec0 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20  rpreted not .as 
1eed0 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  a Julian day num
1eee0 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c  ber as it normal
1eef0 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74  ly would be, but
1ef00 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   as.[http://en.w
1ef10 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1ef20 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e  i/Unix_time | Un
1ef30 69 78 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a  ix Time] - the .
1ef40 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
1ef50 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49  s since 1970.  I
1ef60 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  f the "unixepoch
1ef70 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20  " modifier does 
1ef80 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d  not.follow a tim
1ef90 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66  estring of the f
1efa0 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44 20 77  orm DDDDDDDDDD w
1efb0 68 69 63 68 20 65 78 70 72 65 73 73 65 73 20 74  hich expresses t
1efc0 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63  he number.of sec
1efd0 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 20  onds since 1970 
1efe0 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69  or if other modi
1eff0 66 69 65 72 73 0a 73 65 70 61 72 61 74 65 20 74  fiers.separate t
1f000 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1f010 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69  odifier from pri
1f020 6f 72 20 44 44 44 44 44 44 44 44 44 44 20 74 68  or DDDDDDDDDD th
1f030 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20  en the.behavior 
1f040 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75  is undefined..Du
1f050 65 20 74 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c  e to precision l
1f060 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73  imitations impos
1f070 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
1f080 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66  entations use.of
1f090 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73   64-bit integers
1f0a0 2c 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  , the "unixepoch
1f0b0 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20  " modifier only 
1f0c0 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20  works for.dates 
1f0d0 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d  between 0000-01-
1f0e0 30 31 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20  01 00:00:00 and 
1f0f0 35 33 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32  5352-11-01 10:52
1f100 3a 34 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a  :47 (unix times.
1f110 6f 66 20 2d 36 32 31 36 37 32 31 39 32 30 30 20  of -62167219200 
1f120 74 68 72 6f 75 67 68 20 31 30 36 37 35 31 39 39  through 10675199
1f130 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  1167).</p>..<tcl
1f140 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 6f 63  >hd_fragment loc
1f150 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d  altime {localtim
1f160 65 20 6d 6f 64 69 66 69 65 72 7d 20 7b 27 75 74  e modifier} {'ut
1f170 63 27 20 6d 6f 64 69 66 69 65 72 7d 3c 2f 74 63  c' modifier}</tc
1f180 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61  l>.<p>^The "loca
1f190 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20  ltime" modifier 
1f1a0 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65  (12) assumes the
1f1b0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20   time string to 
1f1c0 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55  its left is in.U
1f1d0 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
1f1e0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20  ated Time (UTC) 
1f1f0 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20  and adjusts the 
1f200 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74  time.string so t
1f210 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20  hat it displays 
1f220 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22  localtime.  If "
1f230 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f  localtime".follo
1f240 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69  ws a time that i
1f250 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20  s not UTC, then 
1f260 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
1f270 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65  undefined..^(The
1f280 20 22 75 74 63 22 20 6d 6f 64 69 66 69 65 72 20   "utc" modifier 
1f290 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20  is the opposite 
1f2a0 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20  of "localtime". 
1f2b0 20 0a 22 75 74 63 22 20 61 73 73 75 6d 65 73 20   ."utc" assumes 
1f2c0 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a  that the string.
1f2d0 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
1f2e0 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65  n the local time
1f2f0 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73  zone and adjusts
1f300 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20   that string to 
1f310 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20  be in UTC.)^.If 
1f320 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67  the prior string
1f330 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c   is not in local
1f340 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72  time, then the r
1f350 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69  esult of "utc" i
1f360 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s.undefined.</p>
1f370 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
1f380 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  h3>..^(<p>Comput
1f390 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61  e the current da
1f3a0 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  te.<p>..<blockqu
1f3b0 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
1f3c0 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75  'now');</blockqu
1f3d0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1f3e0 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61  pute the last da
1f3f0 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  y of the current
1f400 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c   month.</p>..<bl
1f410 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1f420 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72  date('now','star
1f430 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20  t of month','+1 
1f440 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29  month','-1 day')
1f450 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1f460 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1f470 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
1f480 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
1f490 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
1f4a0 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  466.</p>..<block
1f4b0 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43  quote>.    SELEC
1f4c0 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
1f4d0 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
1f4e0 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  h');.</blockquot
1f4f0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1f500 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
1f510 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
1f520 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
1f530 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d  941466, and .com
1f540 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72  pensate for your
1f550 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e   local timezone.
1f560 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1f570 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
1f580 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
1f590 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c   'unixepoch', 'l
1f5a0 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c  ocaltime');.</bl
1f5b0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1f5c0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
1f5d0 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73  rrent unix times
1f5e0 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  tamp.</p>..<bloc
1f5f0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1f600 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1f610 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  now');.</blockqu
1f620 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1f630 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
1f640 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68  of days since th
1f650 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65  e signing of the
1f660 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a   US Declaration.
1f670 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e  of Independence.
1f680 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1f690 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
1f6a0 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
1f6b0 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
1f6c0 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
1f6d0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1f6e0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
1f6f0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
1f700 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
1f710 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
1f720 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f730 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
1f740 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
1f750 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1f760 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
1f770 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
1f780 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
1f790 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
1f7a0 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
1f7b0 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
1f7c0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
1f7d0 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
1f7e0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1f7f0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
1f800 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
1f810 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
1f820 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
1f830 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1f840 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
1f850 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
1f860 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
1f870 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
1f880 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
1f890 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
1f8a0 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
1f8b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1f8c0 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
1f8d0 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
1f8e0 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
1f8f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1f900 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
1f910 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
1f920 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
1f930 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
1f940 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
1f950 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
1f960 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
1f970 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
1f980 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
1f990 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
1f9a0 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
1f9b0 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
1f9c0 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
1f9d0 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
1f9e0 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
1f9f0 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
1fa00 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
1fa10 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
1fa20 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
1fa30 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
1fa40 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
1fa50 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
1fa60 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
1fa70 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
1fa80 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
1fa90 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
1faa0 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
1fab0 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
1fac0 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
1fad0 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
1fae0 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
1faf0 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
1fb00 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
1fb10 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
1fb20 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1fb30 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
1fb40 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
1fb50 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
1fb60 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
1fb70 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
1fb80 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
1fb90 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
1fba0 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
1fbb0 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
1fbc0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
1fbd0 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
1fbe0 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
1fbf0 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
1fc00 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
1fc10 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
1fc20 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
1fc30 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
1fc40 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
1fc50 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
1fc60 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
1fc70 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
1fc80 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
1fc90 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
1fca0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
1fcb0 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
1fcc0 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
1fcd0 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
1fce0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
1fcf0 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
1fd00 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
1fd10 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
1fd20 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
1fd30 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
1fd40 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
1fd50 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
1fd60 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
1fd70 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
1fd80 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
1fd90 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
1fda0 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
1fdb0 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
1fdc0 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1fdd0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
1fde0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
1fdf0 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
1fe00 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
1fe10 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
1fe20 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
1fe30 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
1fe40 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
1fe50 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
1fe60 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1fe70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1feb0 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
1fec0 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
1fed0 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
1fee0 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  nc}.</tcl>..<p>.
1fef0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
1ff00 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
1ff10 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
1ff20 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
1ff30 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
1ff40 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
1ff50 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
1ff60 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
1ff70 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
1ff80 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
1ff90 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
1ffa0 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
1ffb0 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
1ffc0 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
1ffd0 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
1ffe0 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
1fff0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
20000 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
20010 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
20020 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
20030 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
20040 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
20050 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
20060 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
20070 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
20080 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
20090 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
200a0 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
200b0 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
200c0 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
200d0 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
200e0 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
200f0 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
20100 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
20110 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
20120 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
20130 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
20140 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
20150 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
20160 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
20170 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
20180 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
20190 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
201a0 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
201b0 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
201c0 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
201d0 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
201e0 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
201f0 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
20200 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
20210 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
20220 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
20230 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
20240 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
20250 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
20260 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
20270 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
20280 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
20290 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
202a0 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
202b0 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
202c0 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
202d0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
202e0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
202f0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
20300 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
20310 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
20320 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
20330 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20340 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
20350 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
20360 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
20370 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
20380 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
20390 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
203a0 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
203b0 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
203c0 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
203d0 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
203e0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
203f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
20400 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
20410 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
20420 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
20430 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
20440 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
20450 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
20460 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
20470 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
20480 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
20490 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
204a0 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
204b0 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
204c0 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
204d0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
204e0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
204f0 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
20500 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
20510 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61  n.  it is used a
20520 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
20530 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
20540 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
20550 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
20560 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
20570 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
20580 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
20590 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
205a0 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
205b0 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
205c0 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
205d0 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
205e0 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
205f0 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
20600 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
20610 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
20620 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20630 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
20640 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
20650 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
20660 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
20670 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
20680 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
20690 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
206a0 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
206b0 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
206c0 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
206d0 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
206e0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
206f0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
20700 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
20710 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
20720 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
20730 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
20740 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
20750 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
20760 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
20770 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
20780 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20790 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
207a0 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
207b0 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
207c0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
207d0 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
207e0 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
207f0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
20800 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
20810 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
20820 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
20830 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
20840 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
20850 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
20860 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
20870 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
20880 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20890 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
208a0 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
208b0 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
208c0 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
208d0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
208e0 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
208f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20900 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
20910 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28  sum() and total(
20920 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
20930 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73  tions.  return s
20940 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
20950 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
20960 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68   group..  ^If th
20970 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
20980 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74  ULL input rows t
20990 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
209a0 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74  s.  NULL but tot
209b0 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30  al() returns 0.0
209c0 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20  ..  NULL is not 
209d0 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66  normally a helpf
209e0 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68  ul result for th
209f0 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73  e sum of no rows
20a00 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73  .  but the SQL s
20a10 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73  tandard requires
20a20 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68   it and most oth
20a30 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73  er.  SQL databas
20a40 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d  e engines implem
20a50 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77  ent sum() that w
20a60 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65  ay so SQLite doe
20a70 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61  s it in the.  sa
20a80 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20  me way in order 
20a90 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
20aa0 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e  .   The non-stan
20ab0 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e  dard total() fun
20ac0 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69  ction.  is provi
20ad0 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
20ae0 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
20af0 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
20b00 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20  gn problem.  in 
20b10 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
20b20 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65  .</p>..  <p>^The
20b30 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
20b40 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
20b50 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
20b60 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  lue..  ^The resu
20b70 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61  lt of sum() is a
20b80 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
20b90 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  if all non-NULL 
20ba0 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
20bb0 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69  ers..  ^If any i
20bc0 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73  nput to sum() is
20bd0 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65   neither an inte
20be0 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20  ger or a NULL.  
20bf0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
20c00 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
20c10 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63  int value.  whic
20c20 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70  h might be an ap
20c30 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74  proximation to t
20c40 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e  he true sum.</p>
20c50 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69  ..  <p>^Sum() wi
20c60 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74  ll throw an "int
20c70 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65  eger overflow" e
20c80 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20  xception if all 
20c90 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74  inputs.  are int
20ca0 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20  egers or NULL.  
20cb0 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
20cc0 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
20cd0 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
20ce0 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
20cf0 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e  on..  ^Total() n
20d00 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69  ever throws an i
20d10 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e  nteger overflow.
20d20 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
20d30 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
20d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d80 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
20d90 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b   INSERT insert {
20da0 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d  INSERT *INSERTs}
20db0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
20dc0 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d  eDiagram insert-
20dd0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
20de0 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  The INSERT state
20df0 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68  ment comes in th
20e00 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e  ree basic forms.
20e10 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e    .<ul>.<li><p>^
20e20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28  The first form (
20e30 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53  with the "VALUES
20e40 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74  " keyword) creat
20e50 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e  es one or more.n
20e60 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78  ew rows in.an ex
20e70 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49  isting table. ^I
20e80 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f  f the <yyterm>co
20e90 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
20ea0 6d 3e 20 6c 69 73 74 20 61 66 74 65 72 0a 3c 79  m> list after.<y
20eb0 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
20ec0 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f 6d 69  </yyterm> is omi
20ed0 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  tted then the nu
20ee0 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69  mber.of values i
20ef0 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63  nserted into eac
20f00 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68  h row.must be th
20f10 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
20f20 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
20f30 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
20f40 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
20f50 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
20f60 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
20f70 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72  st expression fr
20f80 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a  om each term of.
20f90 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
20fa0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
20fb0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
20fc0 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65  olumn of each ne
20fd0 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f  w row,.and so fo
20fe0 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62  rth for each sub
20ff0 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69  sequent expressi
21000 6f 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74 65 72  on. ^If a <yyter
21010 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
21020 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 73  yterm>.list is s
21030 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
21040 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
21050 75 65 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d  ues in each term
21060 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c 69   of the.VALUE li
21070 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68  st must match th
21080 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63  e number of.spec
21090 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e  ified columns. ^
210a0 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65  Each of the name
210b0 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  d columns of the
210c0 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
210d0 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 72  lated.with the r
210e0 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61  esults of evalua
210f0 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ting the corresp
21100 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78  onding VALUES ex
21110 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65  pression. ^Table
21120 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f  .columns that do
21130 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
21140 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61  he column list a
21150 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  re populated wit
21160 68 20 74 68 65 20 0a 5b 64 65 66 61 75 6c 74 20  h the .[default 
21170 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20 28 73  column value] (s
21180 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
21190 20 6f 66 20 74 68 65 20 5b 43 52 45 41 54 45 20   of the [CREATE 
211a0 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
211b0 29 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c 4c 20  ), or.with NULL 
211c0 69 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74 20 76  if no [default v
211d0 61 6c 75 65 5d 20 69 73 20 73 70 65 63 69 66 69  alue] is specifi
211e0 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
211f0 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
21200 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
21210 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b  ent contains a [
21220 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
21230 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
21240 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
21250 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
21260 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
21270 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
21280 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
21290 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
212a0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
212b0 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
212c0 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
212d0 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
212e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
212f0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
21300 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
21310 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
21320 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
21330 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
21340 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
21350 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
21360 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
21370 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
21380 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
21390 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
213a0 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
213b0 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
213c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
213d0 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
213e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
213f0 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d  , including.[com
21400 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61  pound SELECTs] a
21410 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
21420 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52  ents with [ORDER
21430 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d   BY] and/or [LIM
21440 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61  IT] clauses, .ma
21450 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20  y be used in an 
21460 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21470 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a   of this form...
21480 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64  <li><p>The third
21490 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45   form of an INSE
214a0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
214b0 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c  with DEFAULT VAL
214c0 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52  UES..^(The INSER
214d0 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41  T ... DEFAULT VA
214e0 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69  LUES statement i
214f0 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20  nserts a single 
21500 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65  new row into the
21510 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20  .named table.)^ 
21520 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ^Each column of 
21530 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70  the new row is p
21540 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74  opulated with it
21550 73 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75  s .[default valu
21560 65 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e 55  e], or with a NU
21570 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74  LL if no default
21580 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66   value is specif
21590 69 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66 20  ied .as part of 
215a0 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  the column defin
215b0 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52  ition in the [CR
215c0 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
215d0 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c  ement...</ul>..<
215e0 70 3e 5e 54 68 65 20 22 52 45 50 4c 41 43 45 22  p>^The "REPLACE"
215f0 20 61 6e 64 20 22 49 4e 53 45 52 54 20 4f 52 20   and "INSERT OR 
21600 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 66  <i>action</i>" f
21610 6f 72 6d 73 20 73 70 65 63 69 66 79 20 61 6e 20  orms specify an 
21620 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
21630 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
21640 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21650 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
21660 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45  ng this one INSE
21670 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  RT command..See 
21680 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
21690 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
216a0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
216b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
216c0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
216d0 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20  ith MySQL, ^the 
216e0 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68  parser allows th
216f0 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e  e use of the.sin
21700 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68  gle keyword <a h
21710 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63  ref="lang_replac
21720 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c  e.html">REPLACE<
21730 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73  /a> as an .alias
21740 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
21750 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28  REPLACE"...<p>^(
21760 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69  The optional "<i
21770 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
21780 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78  <b>.</b>" prefix
21790 20 6f 6e 20 74 68 65 20 0a 3c 79 79 74 65 72 6d   on the .<yyterm
217a0 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  >table-name</yyt
217b0 65 72 6d 3e 0a 69 73 20 73 75 70 70 6f 72 74 65  erm>.is supporte
217c0 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  d for top-level 
217d0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
217e0 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
217f0 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
21800 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
21810 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
21820 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
21830 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
21840 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
21850 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
21860 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
21870 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
21880 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
21890 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
218a0 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
218b0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
218c0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
218d0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
218e0 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
218f0 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<tcl>.##
21900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21940 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
21950 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
21960 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
21970 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
21980 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
21990 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  CT}}..RecursiveB
219a0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
219b0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
219c0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
219d0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
219e0 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
219f0 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
21a00 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
21a10 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
21a20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
21a30 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
21a40 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
21a50 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
21a60 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
21a70 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
21a80 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
21a90 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
21aa0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
21ab0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
21ac0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
21ad0 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
21ae0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
21af0 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
21b00 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
21b10 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
21b20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
21b30 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
21b40 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
21b50 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
21b60 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
21b70 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
21b80 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
21b90 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
21ba0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
21bb0 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
21bc0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
21bd0 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
21be0 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
21bf0 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
21c00 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
21c10 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
21c20 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
21c30 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
21c40 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
21c50 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
21c60 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f  to [UNIQUE], [NO
21c70 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d  T NULL],.[CHECK]
21c80 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  , and [PRIMARY K
21c90 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  EY] constraints.
21ca0 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  .The ON CONFLICT
21cb0 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20   algorithm does 
21cc0 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f  not.apply to [FO
21cd0 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
21ce0 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72  aints]..There ar
21cf0 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20  e five conflict 
21d00 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21d10 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f  ithm choices:.RO
21d20 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46  LLBACK, ABORT, F
21d30 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
21d40 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64   REPLACE..^The d
21d50 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
21d60 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21d70 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
21d80 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
21d90 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
21da0 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
21db0 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
21dc0 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
21dd0 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
21de0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21df0 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rs, the ROLLBACK
21e00 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
21e10 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
21e20 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
21e30 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53  tement with.an S
21e40 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
21e50 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73   error and rolls
21e60 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e   back the curren
21e70 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  t transaction..^
21e80 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
21e90 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
21ea0 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
21eb0 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
21ec0 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
21ed0 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
21ee0 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  ) then the ROLLB
21ef0 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK resolution a
21f00 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74  lgorithm works t
21f10 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41  he same as the.A
21f20 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c  BORT algorithm.<
21f30 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
21f40 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
21f50 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
21f60 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
21f70 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21f80 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f   occurs, the ABO
21f90 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RT.resolution al
21fa0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
21fb0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
21fc0 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e  tatement.with an
21fd0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
21fe0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63  NT error and bac
21ff0 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67  ks out any chang
22000 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63  es.made by the c
22010 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
22020 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65  ment; but change
22030 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f  s caused.by prio
22040 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
22050 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
22060 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65   transaction are
22070 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74   preserved and t
22080 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  he.transaction r
22090 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54  emains active..T
220a0 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
220b0 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  lt behavior and 
220c0 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65  the behavior spe
220d0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51  cified by the SQ
220e0 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c  L.standard.</p><
220f0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
22100 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
22110 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
22120 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
22130 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
22140 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73  rs, the FAIL.res
22150 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
22160 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
22170 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
22180 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54  nt with an.SQLIT
22190 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
221a0 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41  or.  ^But the FA
221b0 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f  IL resolution do
221c0 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20  es not.back out 
221d0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66  prior changes of
221e0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
221f0 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e  nt that failed n
22200 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74  or does.it end t
22210 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
22220 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66  ^For example, if
22230 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   an UPDATE.state
22240 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64  ment encountered
22250 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
22260 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31  olation on the 1
22270 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74  00th row that.it
22280 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64   attempts to upd
22290 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69  ate, then the fi
222a0 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67  rst 99 row chang
222b0 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64  es are preserved
222c0 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20  .but changes to 
222d0 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79  rows 100 and bey
222e0 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e  ond never occur.
222f0 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
22300 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74  b>IGNORE</b></dt
22310 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
22320 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
22330 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
22340 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20  on occurs, .the 
22350 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f  IGNORE resolutio
22360 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70  n algorithm skip
22370 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68  s the one row th
22380 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20  at contains.the 
22390 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
223a0 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tion and continu
223b0 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75  es processing su
223c0 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66  bsequent rows.of
223d0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
223e0 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67  nt as if nothing
223f0 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68   went wrong..Oth
22400 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
22410 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
22420 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
22430 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
22440 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73  iolation are ins
22450 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
22460 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65  .normally. ^No e
22470 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
22480 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
22490 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
224a0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
224b0 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
224c0 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
224d0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
224e0 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51 55  > ^When a [UNIQU
224f0 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b  E] or [PRIMARY K
22500 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  EY] constraint v
22510 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
22520 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c   .the REPLACE al
22530 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
22540 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
22550 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
22560 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
22570 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
22580 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
22590 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
225a0 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
225b0 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
225c0 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
225d0 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
225e0 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74  [NOT NULL] const
225f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
22600 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
22610 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73  ACE conflict.res
22620 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73  olution replaces
22630 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
22640 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74  with.the default
22650 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20   value for that 
22660 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68  column, or if th
22670 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20  e column has no 
22680 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74  default.value, t
22690 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c  hen the ABORT al
226a0 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
226b0 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d 20 63  .^If a [CHECK] c
226c0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
226d0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
226e0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
226f0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
22700 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72  rithm always wor
22710 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f  ks like ABORT.</
22720 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  p>..<p>^When the
22730 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
22740 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
22750 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
22760 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
22770 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
22780 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49  int, [CREATE TRI
22790 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72  GGER | delete tr
227a0 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20  iggers] fire if 
227b0 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63  and only if.[rec
227c0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20  ursive_triggers 
227d0 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69  pragma | recursi
227e0 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65  ve triggers] are
227f0 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c   enabled.</p>..<
22800 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  p>^The [sqlite3_
22810 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70  update_hook | up
22820 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f  date hook] is no
22830 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f  t invoked for ro
22840 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65  ws that.are dele
22850 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ted by the REPLA
22860 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
22870 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e  lution strategy.
22880 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c    ^Nor does.REPL
22890 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ACE increment th
228a0 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
228b0 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e  es | change coun
228c0 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74  ter]..The except
228d0 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20  ional behaviors 
228e0 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
228f0 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20  paragraph might 
22900 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74  change .in a fut
22910 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
22920 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</dl>..<p>^The 
22930 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
22940 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
22950 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52  ause of an INSER
22960 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
22970 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
22980 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
22990 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
229a0 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
229b0 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
229c0 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
229d0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
229e0 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
229f0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
22a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
22a40 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
22a50 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
22a60 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
22a70 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
22a80 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
22a90 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  ^The REINDEX com
22aa0 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
22ab0 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
22ac0 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
22ad0 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
22ae0 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
22af0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
22b00 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
22b10 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
22b20 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
22b30 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f  he REINDEX keywo
22b40 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  rd is not follow
22b50 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
22b60 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61  n-sequence or da
22b70 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69  tabase .object i
22b80 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20  dentifier, then 
22b90 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
22ba0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
22bb0 62 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c  bases are rebuil
22bc0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  t...<p>^If the R
22bd0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
22be0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
22bf0 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
22c00 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c  ce name, then.al
22c10 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
22c20 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
22c30 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
22c40 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e   named collation
22c50 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72   sequences.are r
22c60 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e  ecreated. ..<p>^
22c70 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d  Or, if the argum
22c80 65 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20  ent attached to 
22c90 74 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e  the REINDEX iden
22ca0 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  tifies a specifi
22cb0 63 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c  c .database tabl
22cc0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  e, then all indi
22cd0 63 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ces attached to 
22ce0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
22cf0 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20  le are rebuilt. 
22d00 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69  .^If it identifi
22d10 65 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61  es a specific da
22d20 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68  tabase index, th
22d30 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64  en just that ind
22d40 65 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e  ex is recreated.
22d50 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d  ..<p>^For a comm
22d60 61 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  and of the form 
22d70 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e 61 6d 65  "REINDEX <i>name
22d80 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63 68 0a 61  </i>", a match.a
22d90 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 63  gainst <yyterm>c
22da0 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79  ollation-name</y
22db0 79 74 65 72 6d 3e 20 74 61 6b 65 73 20 70 72 65  yterm> takes pre
22dc0 63 65 64 65 6e 63 65 20 6f 76 65 72 20 61 20 6d  cedence over a m
22dd0 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79 79  atch.against <yy
22de0 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c  term>index-name<
22df0 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c 79 79 74  /yyterm> or <yyt
22e00 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
22e10 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73 20 61 6d  yyterm>..This am
22e20 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
22e30 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
22e40 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
22e50 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 79 79 74  pecifying a.<yyt
22e60 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
22e70 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e 20 72 65  /yyterm> when re
22e80 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69  indexing a speci
22e90 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
22ea0 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
22eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ef0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
22f00 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
22f10 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
22f20 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
22f30 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
22f40 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
22f50 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
22f60 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
22f70 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
22f80 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
22f90 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
22fa0 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
22fb0 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
22fc0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
22fd0 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
22fe0 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
22ff0 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
23000 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
23010 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
23020 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
23030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23070 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
23080 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75  ction {WITH clau
23090 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f  se} with {{commo
230a0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
230b0 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75  ons} WITH}..Recu
230c0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
230d0 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c  am with-clause.<
230e0 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e  /tcl>..<p>Common
230f0 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
23100 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c  ns or CTEs act l
23110 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76  ike temporary [v
23120 69 65 77 73 5d 20 74 68 61 74 20 65 78 69 73 74  iews] that exist
23130 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75  .only for the du
23140 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67  ration of a sing
23150 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
23160 2e 20 20 54 68 65 72 65 20 61 72 65 20 74 77 6f  .  There are two
23170 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e   kinds of.common
23180 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23190 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61  ns: "ordinary" a
231a0 6e 64 20 22 72 65 63 75 72 73 69 76 65 22 2e 20  nd "recursive". 
231b0 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e  Ordinary .common
231c0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
231d0 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66  ns are helpful f
231e0 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65  or making.querie
231f0 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65  s easier to unde
23200 72 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72  rstand by factor
23210 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f  ing.subqueries o
23220 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53  ut of the main S
23230 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65  QL statement..Re
23240 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
23250 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
23260 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61 62 69  .provide the abi
23270 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61  lity to do hiera
23280 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72  rchical or.recur
23290 73 69 76 65 20 71 75 65 72 69 65 73 20 6f 66 20  sive queries of 
232a0 74 72 65 65 73 20 61 6e 64 20 67 72 61 70 68 73  trees and graphs
232b0 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74  , a capability.t
232c0 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72  hat is not other
232d0 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69  wise available i
232e0 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
232f0 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d  ge...<p>All comm
23300 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23310 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61  ions (ordinary a
23320 6e 64 20 72 65 63 75 72 73 69 76 65 29 20 61 72  nd recursive) ar
23330 65 20 0a 63 72 65 61 74 65 64 20 62 79 20 70 72  e .created by pr
23340 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20  epending a WITH 
23350 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20  clause in front 
23360 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b  of a [SELECT], [
23370 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45  INSERT], [DELETE
23380 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ],.or [UPDATE] s
23390 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e  tatement.  A sin
233a0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  gle WITH clause 
233b0 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20  can specify one 
233c0 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74  or more.common t
233d0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
233e0 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20  , some of which 
233f0 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64  are ordinary and
23400 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61   some of which.a
23410 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c  re recursive...<
23420 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
23430 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64  ordinarycte {ord
23440 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
23450 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c  le expressions}<
23460 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61  /tcl>.<h3>Ordina
23470 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  ry Common Table 
23480 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
23490 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79  ..<p>An ordinary
234a0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
234b0 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61  pression works a
234c0 73 20 69 66 20 69 74 20 77 65 72 65 20 61 20 5b  s if it were a [
234d0 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74  view] that.exist
234e0 73 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  s for the durati
234f0 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73  on of a single s
23500 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e  tatement.  Ordin
23510 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
23520 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65  .expressions are
23530 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74   useful for fact
23540 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65  oring out subque
23550 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20  ries and making 
23560 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20  the overall.SQL 
23570 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72  statement easier
23580 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64   to read and und
23590 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57  erstand...<p>A W
235a0 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63  ITH clause can c
235b0 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20  ontain ordinary 
235c0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
235d0 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66  ressions even if
235e0 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65  .it includes the
235f0 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f   RECURSIVE keywo
23600 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20  rd.  The use of 
23610 52 45 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e  RECURSIVE does n
23620 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20  ot force.common 
23630 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23640 73 20 74 6f 20 62 65 20 72 65 63 75 72 73 69 76  s to be recursiv
23650 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61  e...<tcl>.hd_fra
23660 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65 63  gment recursivec
23670 74 65 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f  te {recursive co
23680 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23690 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72  ssions} \.{recur
236a0 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63  sive query}.</tc
236b0 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65  l>.<h3>Recursive
236c0 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78   Common Table Ex
236d0 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
236e0 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63  <p>A recursive c
236f0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23700 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  ession can be us
23710 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75  ed to write a qu
23720 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61  ery that.walks a
23730 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20   tree or graph. 
23740 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   A recursive com
23750 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23760 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d  sion has the sam
23770 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61  e.basic syntax a
23780 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  s an ordinary co
23790 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
237a0 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ssion, but with 
237b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64  the following.ad
237c0 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65  ditional feature
237d0 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68  s:..<ol>.<li> Th
237e0 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
237f0 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61  ".     must be a
23800 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   [compound selec
23810 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67  t] where the rig
23820 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e  ht-most [compoun
23830 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20  d-operator] is. 
23840 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e      either UNION
23850 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c   or UNION ALL..<
23860 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61  li> The table na
23870 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d  med on the left-
23880 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
23890 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74   AS keyword must
238a0 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61   appear.     exa
238b0 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
238c0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
238d0 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53  the right-most S
238e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
238f0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70       of the comp
23900 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64  ound select, and
23910 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c   nowhere else..<
23920 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20  /ol>..<p>To put 
23930 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20  it another way, 
23940 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  a recursive comm
23950 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23960 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69  ion must.look li
23970 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ke the following
23980 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76  :..<tcl>Recursiv
23990 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  eBubbleDiagram r
239a0 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63  ecursive-cte</tc
239b0 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68 65 20  l>..<p>Call the 
239c0 74 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 74  table named by t
239d0 68 65 20 5b 63 74 65 2d 74 61 62 6c 65 2d 6e 61  he [cte-table-na
239e0 6d 65 5d 20 69 6e 20 61 20 72 65 63 75 72 73 69  me] in a recursi
239f0 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve.common table 
23a00 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20 22  expression the "
23a10 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
23a20 2e 0a 49 6e 20 74 68 65 20 5b 72 65 63 75 72 73  ..In the [recurs
23a30 69 76 65 2d 63 74 65 5d 20 62 75 62 62 6c 65 20  ive-cte] bubble 
23a40 64 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74  diagram above, t
23a50 68 65 20 72 65 63 75 72 73 69 76 65 0a 74 61 62  he recursive.tab
23a60 6c 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 65  le must appear e
23a70 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
23a80 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
23a90 66 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 72  f the .<yyterm>r
23aa0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
23ab0 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20 6d 75 73  /yyterm>.and mus
23ac0 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79  t not appear any
23ad0 77 68 65 72 65 20 65 6c 73 65 20 69 6e 20 65 69  where else in ei
23ae0 74 68 65 72 20 74 68 65 0a 3c 79 79 74 65 72 6d  ther the.<yyterm
23af0 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
23b00 2f 79 79 74 65 72 6d 3e 20 6f 72 20 74 68 65 0a  /yyterm> or the.
23b10 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
23b20 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
23b30 3e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75 62  >, including sub
23b40 71 75 65 72 69 65 73 2e 0a 54 68 65 20 3c 79 79  queries..The <yy
23b50 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c  term>initial-sel
23b60 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6d 61 79  ect</yyterm> may
23b70 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   be.a [compound 
23b80 73 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74 20  select], but it 
23b90 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  may not include 
23ba0 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
23bb0 49 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54  IT, or OFFSET..T
23bc0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
23bd0 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ect must be a si
23be0 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74  mple select, not
23bf0 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68   a compound.  Th
23c00 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e.recursive-sele
23c10 63 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ct is allowed to
23c20 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
23c30 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64  R BY, LIMIT, and
23c40 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e  /or OFFSET...<p>
23c50 54 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72 69  The basic algori
23c60 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e  thm for computin
23c70 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
23c80 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
23c90 61 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f  able.is as follo
23ca0 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52  ws:..<ol>.<li> R
23cb0 75 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69  un the <yyterm>i
23cc0 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79  nitial-select</y
23cd0 79 74 65 72 6d 3e 20 61 6e 64 20 61 64 64 20 74  yterm> and add t
23ce0 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20  he results to a 
23cf0 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c  queue..<li> Whil
23d00 65 20 74 68 65 20 71 75 65 75 65 20 69 73 20 6e  e the queue is n
23d10 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79  ot empty:.<ol ty
23d20 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74  pe="a">.<li> Ext
23d30 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f  ract a single ro
23d40 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  w from the queue
23d50 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68  ..<li> Insert th
23d60 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e  at single row in
23d70 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
23d80 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74   table.<li> Pret
23d90 65 6e 64 20 74 68 61 74 20 74 68 65 20 73 69 6e  end that the sin
23da0 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74  gle row just ext
23db0 72 61 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e  racted is the on
23dc0 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74  ly.     row in t
23dd0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
23de0 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72  le and run the r
23df0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
23e00 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c  .     adding all
23e10 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20   results to the 
23e20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f  queue..</ol>.</o
23e30 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  l>..<p>The basic
23e40 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65   procedure above
23e50 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79   may modified by
23e60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
23e70 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a  dditional rules:
23e80 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
23e90 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72   If a UNION oper
23ea0 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68  ator connects th
23eb0 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e <yyterm>initia
23ec0 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
23ed0 3e 20 77 69 74 68 20 74 68 65 0a 20 20 3c 79 79  > with the.  <yy
23ee0 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73  term>recursive-s
23ef0 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20  elect</yyterm>, 
23f00 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f  then only add ro
23f10 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ws to the queue 
23f20 69 66 20 0a 20 20 6e 6f 20 69 64 65 6e 74 69 63  if .  no identic
23f30 61 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65  al row has.  bee
23f40 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64  n previously add
23f50 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed to the queue.
23f60 20 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20    Repeated rows 
23f70 61 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65  are discarded be
23f80 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64  fore being.  add
23f90 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ed to the queue 
23fa0 65 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65  even if the repe
23fb0 61 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61  ated rows have a
23fc0 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72  lready been extr
23fd0 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65  acted.  from the
23fe0 20 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65   queue by the re
23ff0 63 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49  cursion step.  I
24000 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
24010 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74  s UNION ALL,.  t
24020 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e  hen all rows gen
24030 65 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74  erated by both t
24040 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69  he <yyterm>initi
24050 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  al-select</yyter
24060 6d 3e 20 61 6e 64 20 74 68 65 0a 20 20 3c 79 79  m> and the.  <yy
24070 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73  term>recursive-s
24080 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61  elect</yyterm> a
24090 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20  re always added 
240a0 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
240b0 6e 20 69 66 0a 20 20 74 68 65 79 20 61 72 65 20  n if.  they are 
240c0 72 65 70 65 61 74 73 2e 0a 20 20 57 68 65 6e 20  repeats..  When 
240d0 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61  determining if a
240e0 20 72 6f 77 20 69 73 20 72 65 70 65 61 74 65 64   row is repeated
240f0 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f  , NULL values co
24100 6d 70 61 72 65 0a 20 20 65 71 75 61 6c 20 74 6f  mpare.  equal to
24110 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e 64   one another and
24120 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 6e   not equal to an
24130 79 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c  y other value..<
24140 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d  li><p>.  The LIM
24150 49 54 20 63 6c 61 75 73 65 2c 20 69 66 20 70 72  IT clause, if pr
24160 65 73 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65  esent, determine
24170 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
24180 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
24190 74 0a 20 20 77 69 6c 6c 20 65 76 65 72 20 62 65  t.  will ever be
241a0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
241b0 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 69 6e  cursive table in
241c0 20 73 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65   step 2b..  Once
241d0 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 72 65   the limit is re
241e0 61 63 68 65 64 2c 20 74 68 65 20 72 65 63 75 72  ached, the recur
241f0 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20  sion stops..  A 
24200 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65  limit of zero me
24210 61 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f 77 73  ans that no rows
24220 20 61 72 65 20 65 76 65 72 20 61 64 64 65 64 20   are ever added 
24230 74 6f 20 74 68 65 0a 20 20 72 65 63 75 72 73 69  to the.  recursi
24240 76 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 61 20  ve table, and a 
24250 6e 65 67 61 74 69 76 65 20 6c 69 6d 69 74 20 6d  negative limit m
24260 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65  eans an unlimite
24270 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  d number of rows
24280 0a 20 20 6d 61 79 20 62 65 20 61 64 64 65 64 20  .  may be added 
24290 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
242a0 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   table..<li><p>.
242b0 20 20 54 68 65 20 4f 46 46 53 45 54 20 63 6c 61    The OFFSET cla
242c0 75 73 65 2c 20 69 66 20 69 74 20 69 73 20 70 72  use, if it is pr
242d0 65 73 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20  esent and has a 
242e0 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e  positive value N
242f0 2c 20 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20  , prevents the. 
24300 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72   first N rows fr
24310 6f 6d 20 62 65 69 6e 67 20 61 64 64 65 64 20 74  om being added t
24320 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
24330 74 61 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72  table..  The fir
24340 73 74 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74  st N rows are st
24350 69 6c 6c 20 70 72 6f 63 65 73 73 65 64 0a 20 20  ill processed.  
24360 62 79 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 72  by the <yyterm>r
24370 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
24380 2f 79 79 74 65 72 6d 3e 20 26 6d 64 61 73 68 3b  /yyterm> &mdash;
24390 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65   they.  just are
243a0 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68   not added to th
243b0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
243c0 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74  e.  Rows are not
243d0 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a   counted toward.
243e0 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65    fulfilling the
243f0 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c   LIMIT until all
24400 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76   OFFSET rows hav
24410 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a  e been skipped..
24420 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20  <li><p>.  If an 
24430 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
24440 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64  is present, it d
24450 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72  etermines the or
24460 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
24470 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65  s.  are extracte
24480 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  d from the queue
24490 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66   in step 2a.  If
244a0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44   there is no ORD
244b0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20  ER BY clause,.  
244c0 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69  then the order i
244d0 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
244e0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e   extracted is un
244f0 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68  defined.  (In th
24500 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c  e current.  impl
24510 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
24520 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20  queue becomes a 
24530 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45  FIFO if the ORDE
24540 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
24550 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70  mitted,.  but ap
24560 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c  plications shoul
24570 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20  d not depend on 
24580 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20  that fact since 
24590 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e  it might change.
245a0 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  ).</ul>..<tcl>hd
245b0 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c  _fragment rcex1<
245c0 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73  /tcl>.<h4>Recurs
245d0 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c  ive Query Exampl
245e0 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  es</h4>..<p>The 
245f0 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20  following query 
24600 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65  returns all inte
24610 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61  gers between 1 a
24620 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c  nd 1000000:..<bl
24630 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
24640 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
24650 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45  cnt(x) AS (VALUE
24660 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  S(1) UNION ALL S
24670 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63  ELECT x+1 FROM c
24680 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30  nt WHERE x<10000
24690 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f  00).SELECT x FRO
246a0 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
246b0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
246c0 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73  onsider how this
246d0 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54   query works.  T
246e0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
246f0 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64  t.runs first and
24700 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c   returns a singl
24710 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e  e row.with a sin
24720 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20  gle column "1". 
24730 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73   This one row is
24740 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
24750 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61  eue.  In.step 2a
24760 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  , that one row i
24770 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
24780 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61   the queue and a
24790 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54  dded to "cnt"..T
247a0 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  hen the recursiv
247b0 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20  e-select is run 
247c0 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69  in accordance wi
247d0 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72  th step 2c gener
247e0 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e  ating.a single n
247f0 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75  ew row with valu
24800 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20  e "2" to add to 
24810 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20  the queue.  The 
24820 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20  queue still.has 
24830 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70  one row, so step
24840 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65   2 repeats.  The
24850 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72   "2" row is extr
24860 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20  acted and added 
24870 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65  to the.recursive
24880 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20   table by steps 
24890 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e  2a and 2b.  Then
248a0 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e   the row contain
248b0 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61  ing 2 is used .a
248c0 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65  s if it were the
248d0 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e   complete conten
248e0 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
248f0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  ve table and the
24900 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65   .recursive-sele
24910 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c  ct is run again,
24920 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
24930 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22  row with value "
24940 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74  3" being added.t
24950 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68  o the queue.  Th
24960 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39  is repeats 99999
24970 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69  9 times until fi
24980 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61  nally at step 2a
24990 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20   the.only value 
249a0 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20  on the queue is 
249b0 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67  a row containing
249c0 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20   1000000.  That 
249d0 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64  row is.extracted
249e0 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
249f0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24a00 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d  e.  But this tim
24a10 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61  e, the.WHERE cla
24a20 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72  use causes the r
24a30 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
24a40 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77  to return no row
24a50 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20  s, so the.queue 
24a60 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e  remains empty an
24a70 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  d the recursion 
24a80 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70  stops...<p><b>Op
24a90 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a  timization note:
24aa0 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63  </b>.In the disc
24ab0 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74  ussion above, st
24ac0 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69  atements like "i
24ad0 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e  nsert the row in
24ae0 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65  to.the recursive
24af0 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62   table" should b
24b00 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e  e understood con
24b10 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c  ceptually, not l
24b20 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75  iterally..It sou
24b30 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65  nds as if SQLite
24b40 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67   is accumulating
24b50 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f   a huge table.co
24b60 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c  ntaining one mil
24b70 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20  lion rows, then 
24b80 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73  going back and s
24b90 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62  canning that tab
24ba0 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62  le.from top to b
24bb0 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74  ottom to generat
24bc0 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57  e the result.  W
24bd0 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65  hat really happe
24be0 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71  ns.is that the q
24bf0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73  uery optimizer s
24c00 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20  ees that values 
24c10 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63  in the."cnt" rec
24c20 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65  ursive table are
24c30 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e   only used once.
24c40 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77    So as each row
24c50 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65   is added to.the
24c60 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24c70 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d  , that row is im
24c80 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e  mediately return
24c90 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
24ca0 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43  f the main.SELEC
24cb0 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  T statement and 
24cc0 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20  then discarded. 
24cd0 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d   SQLite does <em
24ce0 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75  >not</em> accumu
24cf0 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79  late.a temporary
24d00 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
24d10 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73  g a million rows
24d20 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d  .  Very little m
24d30 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20  emory is.needed 
24d40 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65  to run the above
24d50 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
24d60 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70  er, if the examp
24d70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f  le had used.UNIO
24d80 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49  N instead of UNI
24d90 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c  ON ALL, then SQL
24da0 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ite would have h
24db0 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e  ad to keep aroun
24dc0 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79  d.all previously
24dd0 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65   generated conte
24de0 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  nt in order to c
24df0 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61  heck for duplica
24e00 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65  tes..For this re
24e10 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  ason, programmer
24e20 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20  s should strive 
24e30 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c  to use UNION ALL
24e40 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f   instead.of UNIO
24e50 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e  N when feasible.
24e60 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76  ..<p>Here is a v
24e70 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
24e80 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65  previous example
24e90 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24ea0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
24eb0 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20  IVE.  cnt(x) AS 
24ec0 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a  (.     SELECT 1.
24ed0 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20       UNION ALL. 
24ee0 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46      SELECT x+1 F
24ef0 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49  ROM cnt.      LI
24f00 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a  MIT 1000000.  ).
24f10 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
24f20 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
24f30 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65  quote>..<p>There
24f40 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65   are two differe
24f50 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72  nces in this var
24f60 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69  iation.  The ini
24f70 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22  tial-select is."
24f80 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61  SELECT 1" instea
24f90 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22  d of "VALUES(1)"
24fa0 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65  .  But those are
24fb0 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a   just different.
24fc0 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79  syntaxes for say
24fd0 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20  ing exactly the 
24fe0 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65  same thing.  The
24ff0 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73   other change is
25000 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73   that the.recurs
25010 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62  ion is stopped b
25020 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72  y a LIMIT rather
25030 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c   than a WHERE cl
25040 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f  ause.  The use o
25050 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68  f.LIMIT means th
25060 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d  at when the one-
25070 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73  millionth row is
25080 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63   added to the "c
25090 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72  nt" table.(and r
250a0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d  eturned by the m
250b0 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e  ain SELECT, than
250c0 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  ks to the query 
250d0 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20  optimizer).then 
250e0 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
250f0 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ops immediately 
25100 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
25110 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68  w many rows migh
25120 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65  t be.left in the
25130 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65   queue.  On more
25140 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73   complex queries
25150 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d  , it can sometim
25160 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20  es be.difficult 
25170 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
25180 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
25190 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20  will eventually 
251a0 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20  cause the.queue 
251b0 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65  to drain and the
251c0 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65   recursion to te
251d0 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68  rminate.  But th
251e0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  e LIMIT clause w
251f0 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20  ill.always stop 
25200 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  the recursion.  
25210 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72  So it is good pr
25220 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73  actice to always
25230 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54   include a.LIMIT
25240 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66   clause as a saf
25250 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20  ety if an upper 
25260 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a  bound on the siz
25270 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  e of the recursi
25280 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c  on .is known...<
25290 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
252a0 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  rcex2</tcl>.<h4>
252b0 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65  Hierarchical Que
252c0 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
252d0 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20  ..<p>Consider a 
252e0 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72  table that descr
252f0 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73  ibes the members
25300 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74   of an organizat
25310 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74  ion as.well as t
25320 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d  he chain-of-comm
25330 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20  and within that 
25340 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c  organization:..<
25350 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
25360 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
25370 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
25380 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
25390 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
253a0 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74  ES org,.  height
253b0 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72   INT,.  -- other
253c0 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64   content omitted
253d0 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  .);.</pre></bloc
253e0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72  kquote>..<p>Ever
253f0 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20  y member in the 
25400 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73  organization has
25410 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73   a name, and mos
25420 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61  t members have.a
25430 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28   single boss.  (
25440 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20  The head of the 
25450 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69  whole organizati
25460 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62  on has a NULL."b
25470 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65  oss" field.) The
25480 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72   rows of the "or
25490 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  g" table form a 
254a0 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69  tree...<p>Here i
254b0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63  s a query that c
254c0 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72  omputes the aver
254d0 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20  age height over 
254e0 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63  everyone.in Alic
254f0 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  e's organization
25500 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63  , including Alic
25510 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
25520 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
25530 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72  SIVE.  works_for
25540 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20  _alice(n) AS (. 
25550 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
25560 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  ').    UNION.   
25570 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
25580 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72  M org, works_for
25590 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52  _alice.     WHER
255a0 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73  E org.boss=works
255b0 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29  _for_alice.n.  )
255c0 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67  .SELECT avg(heig
255d0 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48  ht) FROM org. WH
255e0 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20  ERE org.name IN 
255f0 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b  works_for_alice;
25600 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
25610 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78  ote>..<p>The nex
25620 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74  t example uses t
25630 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  wo .common table
25640 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
25650 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
25660 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c  ause.  .The foll
25670 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f  owing table reco
25680 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65  rds a family tre
25690 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
256a0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
256b0 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d  LE family(.  nam
256c0 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
256d0 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52  EY,.  mom TEXT R
256e0 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79  EFERENCES family
256f0 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46  ,.  dad TEXT REF
25700 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a  ERENCES family,.
25710 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c    born DATETIME,
25720 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45  .  died DATETIME
25730 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69  , -- NULL if sti
25740 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74  ll alive.  -- ot
25750 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c  her content.);.<
25760 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25770 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69  e>..<p>The "fami
25780 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d  ly" table is sim
25790 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c  ilar to the earl
257a0 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20  ier "org" table 
257b0 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77  except that .now
257c0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70   there are two p
257d0 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d  arents to each m
257e0 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74  ember..We want t
257f0 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e  o know all livin
25800 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41  g ancestors of A
25810 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73  lice, from oldes
25820 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41  t to youngest..A
25830 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f  n ordinary commo
25840 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
25850 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c  on, "parent_of",
25860 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73   is defined firs
25870 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72  t.  That.ordinar
25880 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20  y CTE is a view 
25890 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
258a0 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72   to find all par
258b0 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69  ents of any.indi
258c0 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72  vidual.  That or
258d0 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68  dinary CTE is th
258e0 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22  en used in the "
258f0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
25900 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45  e".recursive CTE
25910 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65  .  The recursive
25920 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65   CTE is then use
25930 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71  d in the final q
25940 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  uery:..<blockquo
25950 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
25960 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74  CURSIVE.  parent
25970 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74  _of(name, parent
25980 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
25990 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20   name, mom FROM 
259a0 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c  family UNION SEL
259b0 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52  ECT name, dad FR
259c0 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e  OM family),.  an
259d0 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28  cestor_of_alice(
259e0 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45  name) AS.    (SE
259f0 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
25a00 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45   parent_of WHERE
25a10 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20   name='Alice'.  
25a20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
25a30 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20    SELECT parent 
25a40 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a  FROM parent_of J
25a50 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  OIN ancestor_of_
25a60 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65  alice USING(name
25a70 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79  )).SELECT family
25a80 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73  .name FROM ances
25a90 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61  tor_of_alice, fa
25aa0 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65  mily. WHERE ance
25ab0 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61  stor_of_alice.na
25ac0 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20  me=family.name. 
25ad0 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55    AND died IS NU
25ae0 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72  LL. ORDER BY bor
25af0 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  n;.</pre></block
25b00 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  quote>..<tcl>hd_
25b10 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
25b20 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73  tcl>.<h4>Queries
25b30 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68   Against A Graph
25b40 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73  </h4>..<p>A vers
25b50 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74  ion control syst
25b60 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79  em (VCS) will ty
25b70 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68  pically store th
25b80 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69  e evolving.versi
25b90 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74  ons of a project
25ba0 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61   as a directed a
25bb0 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41  cyclic graph (DA
25bc0 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76  G).  Call each.v
25bd0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  ersion of the pr
25be0 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e  oject a "checkin
25bf0 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65  ".  A single.che
25c00 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65  ckin can have ze
25c10 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ro or more paren
25c20 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69  ts.  Most checki
25c30 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66  ns (except the.f
25c40 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e  irst) have a sin
25c50 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20  gle parent, but 
25c60 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
25c70 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69   merge, a checki
25c80 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f  n.might have two
25c90 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72   or three or mor
25ca0 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63  e parents.  A sc
25cb0 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61  hema to keep tra
25cc0 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61  ck of.checkins a
25cd0 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  nd the order in 
25ce0 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72  which they occur
25cf0 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65   might look some
25d00 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a  thing like.this:
25d10 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25d20 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
25d30 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49   checkin(.  id I
25d40 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
25d50 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45  EY,.  mtime INTE
25d60 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70  GER -- timestamp
25d70 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b   when this check
25d80 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43  in occurred.);.C
25d90 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69  REATE TABLE deri
25da0 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d  vedfrom(.  xfrom
25db0 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
25dc0 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
25dd0 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20  ckin, -- parent 
25de0 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e  checkin.  xto IN
25df0 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52  TEGER NOT NULL R
25e00 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69  EFERENCES checki
25e10 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20  n,   -- derived 
25e20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52  checkin.  PRIMAR
25e30 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29  Y KEY(xfrom,xto)
25e40 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  .);.CREATE INDEX
25e50 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63   derivedfrom_bac
25e60 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d  k ON derivedfrom
25e70 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70  (xto,xfrom);.</p
25e80 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25e90 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20  ..<p>This graph 
25ea0 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64  is acyclic.  And
25eb0 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20   we assume that 
25ec0 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65  the mtime of eve
25ed0 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e  ry.child checkin
25ee0 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e   is no less than
25ef0 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c   the mtime of al
25f00 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20  l its parents.  
25f10 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65  But.unlike the e
25f20 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c  arlier examples,
25f30 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68   this graph migh
25f40 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20  t have multiple 
25f50 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69  paths of.differi
25f60 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65  ng lengths betwe
25f70 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b  en any two check
25f80 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74  ins...<p>We want
25f90 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65   to know the twe
25fa0 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  nty most recent 
25fb0 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d  ancestors in tim
25fc0 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68  e (out of.the th
25fd0 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75  ousands and thou
25fe0 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
25ff0 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20  rs in the whole 
26000 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e  DAG) for.checkin
26010 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28   "@BASELINE".  (
26020 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20  A query similar 
26030 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a  to this is used.
26040 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  by the <a href="
26050 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69  http://www.fossi
26060 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73  l-scm.org/">Foss
26070 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68  il</a> VCS to.sh
26080 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65  ow the N most re
26090 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f  cent ancestors o
260a0 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20  f a check.  For 
260b0 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66  example:.<a href
260c0 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ="http://www.sql
260d0 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
260e0 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
260f0 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  0">http://www.sq
26100 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
26110 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
26120 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b  30</a>.)..<block
26130 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26140 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63   RECURSIVE.  anc
26150 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20  estor(id,mtime) 
26160 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
26170 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63  id, mtime FROM c
26180 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d  heckin WHERE id=
26190 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e  @BASELINE.    UN
261a0 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64  ION.    SELECT d
261b0 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d  erivedfrom.xfrom
261c0 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a  , checkin.mtime.
261d0 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73        FROM ances
261e0 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d  tor, derivedfrom
261f0 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57  , checkin.     W
26200 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64  HERE ancestor.id
26210 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f  =derivedfrom.xto
26220 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63  .       AND chec
26230 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72  kin.id=derivedfr
26240 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52  om.xfrom.     OR
26250 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d  DER BY checkin.m
26260 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c  time DESC.     L
26270 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45  IMIT 20.  ).SELE
26280 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69  CT * FROM checki
26290 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20  n JOIN ancestor 
262a0 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65  USING(id);.</pre
262b0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
262c0 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42  <p>.The "ORDER B
262d0 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20  Y checkin.mtime 
262e0 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68  DESC" term in th
262f0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
26300 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65  ct makes.the que
26310 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  ry run much fast
26320 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67  er by preventing
26330 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69   it from followi
26340 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74  ng.branches that
26350 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a   merge checkins.
26360 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20  from long ago.  
26370 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72  The ORDER BY for
26380 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
26390 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75  e-select to focu
263a0 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s.on the most re
263b0 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74  cent checkins, t
263c0 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e  he ones we want.
263d0 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52    Without the OR
263e0 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65  DER BY.on the re
263f0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
26400 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72  one would be for
26410 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74  ced to compute t
26420 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20  he complete set 
26430 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20  of.thousands of 
26440 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20  ancestors, sort 
26450 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d  them all by mtim
26460 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e, then take the
26470 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65   top twenty..The
26480 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74   ORDER BY essent
26490 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20  ially sets up a 
264a0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74  priority queue t
264b0 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72  hat.forces the r
264c0 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74  ecursive query t
264d0 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f  o look at the mo
264e0 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74  st recent ancest
264f0 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77  ors first,.allow
26500 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61  ing the use of a
26510 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f   LIMIT clause to
26520 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63   restrict the sc
26530 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79  ope of the.query
26540 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65   to just the che
26550 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73  ckins of interes
26560 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
26570 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79  ment withorderby
26580 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72  </tcl>.<h4>Contr
26590 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72  olling Depth-Fir
265a0 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74  st Versus Breadt
265b0 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f  h-First Search O
265c0 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f  f a Tree.Using O
265d0 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70  RDER BY</h4>..<p
265e0 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61  >An ORDER BY cla
265f0 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72  use on the recur
26600 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20  sive-select can 
26610 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  be used to contr
26620 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73  ol.whether the s
26630 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20  earch of a tree 
26640 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f  is depth-first o
26650 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e  r breadth-first.
26660 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c    To.illustrate,
26670 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76   we will use a v
26680 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
26690 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d  "org" table from
266a0 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76   an example.abov
266b0 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22  e, without the "
266c0 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20  height" column, 
266d0 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65  and with some re
266e0 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64  al data inserted
266f0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26700 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
26710 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
26720 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
26730 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
26740 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54  RENCES org.) WIT
26750 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45  HOUT ROWID;.INSE
26760 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
26770 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29  ES('Alice',NULL)
26780 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
26790 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27  g VALUES('Bob','
267a0 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20  Alice');.INSERT 
267b0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
267c0 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29  'Cindy','Alice')
267d0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
267e0 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c  g VALUES('Dave',
267f0 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49  'Bob');.INSERT I
26800 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
26810 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e  Emma','Bob');.IN
26820 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
26830 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e  LUES('Fred','Cin
26840 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  dy');.INSERT INT
26850 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61  O org VALUES('Ga
26860 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f  il','Cindy');.</
26870 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
26880 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  >..<p>Here is a 
26890 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68  query to show th
268a0 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65  e tree structure
268b0 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69   in a breadth-fi
268c0 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62  rst pattern:..<b
268d0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
268e0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
268f0 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d   under_alice(nam
26900 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20  e,level) AS (.  
26910 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
26920 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  ,0).    UNION AL
26930 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67  L.    SELECT org
26940 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69  .name, under_ali
26950 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20  ce.level+1.     
26960 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75   FROM org JOIN u
26970 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72  nder_alice ON or
26980 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69  g.boss=under_ali
26990 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44  ce.name.     ORD
269a0 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45  ER BY 2.  ).SELE
269b0 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
269c0 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
269d0 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
269e0 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
269f0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26a00 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42  .<p>The "ORDER B
26a10 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e  Y 2" (which mean
26a20 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f  s the same as "O
26a30 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c  RDER BY under_al
26a40 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61  ice.level+1").ca
26a50 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65  uses higher leve
26a60 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
26a70 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69  zation chart (wi
26a80 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65  th smaller "leve
26a90 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65  l" values).to be
26aa0 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74   processed first
26ab0 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
26ac0 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73   breadth-first s
26ad0 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70  earch.  The outp
26ae0 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ut is:..<blockqu
26af0 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a  ote><pre>.Alice.
26b00 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a  ...Bob....Cindy.
26b10 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
26b20 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64  .Emma.......Fred
26b30 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72  .......Gail.</pr
26b40 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26b50 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68  .<p>But if we ch
26b60 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42  ange the ORDER B
26b70 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20  Y clause to add 
26b80 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66  the "DESC" modif
26b90 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63  ier, that will.c
26ba0 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c  ause lower level
26bb0 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
26bc0 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67  ation (with larg
26bd0 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65  er "level" value
26be0 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73  s) to be.process
26bf0 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20  ed first by the 
26c00 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
26c10 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
26c20 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61   depth-first sea
26c30 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  rch:..<blockquot
26c40 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
26c50 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61  URSIVE.  under_a
26c60 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29  lice(name,level)
26c70 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
26c80 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20  ('Alice',0).    
26c90 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
26ca0 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75  LECT org.name, u
26cb0 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
26cc0 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72  +1.      FROM or
26cd0 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69  g JOIN under_ali
26ce0 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75  ce ON org.boss=u
26cf0 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a  nder_alice.name.
26d00 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20       ORDER BY 2 
26d10 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a  <b>DESC</b>.  ).
26d20 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
26d30 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
26d40 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
26d50 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
26d60 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
26d70 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  te>..<p>The outp
26d80 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73  ut of this revis
26d90 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62  ed query is:..<b
26da0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
26db0 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e  Alice....Bob....
26dc0 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d  ...Dave.......Em
26dd0 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ma....Cindy.....
26de0 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69  ..Fred.......Gai
26df0 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  l.</pre></blockq
26e00 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  uote>..<p>When t
26e10 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
26e20 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
26e30 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65  om the recursive
26e40 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65  -select, the.que
26e50 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20  ue behaves as a 
26e60 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75  FIFO, which resu
26e70 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68  lts in a breadth
26e80 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a  -first search...
26e90 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
26ea0 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f  t mandelbrot {co
26eb0 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c  mpute the Mandel
26ec0 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a  brot set}</tcl>.
26ed0 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52  <h4>Outlandish R
26ee0 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45  ecursive Query E
26ef0 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
26f00 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71  >The following q
26f10 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e  uery computes an
26f20 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f   approximation o
26f30 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  f the Mandelbrot
26f40 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73   Set.and outputs
26f50 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41   the result as A
26f60 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63  SCII-art:..<bloc
26f70 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
26f80 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61  H RECURSIVE.  xa
26f90 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45  xis(x) AS (VALUE
26fa0 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-2.0) UNION AL
26fb0 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20  L SELECT x+0.05 
26fc0 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45  FROM xaxis WHERE
26fd0 20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20 20 79 61   x&lt;1.2),.  ya
26fe0 78 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45  xis(y) AS (VALUE
26ff0 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-1.0) UNION AL
27000 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46  L SELECT y+0.1 F
27010 52 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45 20  ROM yaxis WHERE 
27020 79 26 6c 74 3b 31 2e 30 29 2c 0a 20 20 6d 28 69  y&lt;1.0),.  m(i
27030 74 65 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20  ter, cx, cy, x, 
27040 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
27050 43 54 20 30 2c 20 78 2c 20 79 2c 20 30 2e 30 2c  CT 0, x, y, 0.0,
27060 20 30 2e 30 20 46 52 4f 4d 20 78 61 78 69 73 2c   0.0 FROM xaxis,
27070 20 79 61 78 69 73 0a 20 20 20 20 55 4e 49 4f 4e   yaxis.    UNION
27080 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
27090 69 74 65 72 2b 31 2c 20 63 78 2c 20 63 79 2c 20  iter+1, cx, cy, 
270a0 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c 20 32 2e  x*x-y*y + cx, 2.
270b0 30 2a 78 2a 79 20 2b 20 63 79 20 46 52 4f 4d 20  0*x*y + cy FROM 
270c0 6d 20 0a 20 20 20 20 20 57 48 45 52 45 20 28 78  m .     WHERE (x
270d0 2a 78 20 2b 20 79 2a 79 29 20 26 6c 74 3b 20 34  *x + y*y) &lt; 4
270e0 2e 30 20 41 4e 44 20 69 74 65 72 26 6c 74 3b 32  .0 AND iter&lt;2
270f0 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65 72  8.  ),.  m2(iter
27100 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a 20  , cx, cy) AS (. 
27110 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69 74     SELECT max(it
27120 65 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d  er), cx, cy FROM
27130 20 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c 20   m GROUP BY cx, 
27140 63 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20 41  cy.  ),.  a(t) A
27150 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 67  S (.    SELECT g
27160 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62  roup_concat( sub
27170 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d  str(' .+*#', 1+m
27180 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29  in(iter/7,4), 1)
27190 2c 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d 20  , '') .    FROM 
271a0 6d 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a 20  m2 GROUP BY cy. 
271b0 20 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70 5f   ).SELECT group_
271c0 63 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29 2c  concat(rtrim(t),
271d0 78 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a 3c  x'0a') FROM a;.<
271e0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
271f0 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 71  e>..<p>In this q
27200 75 65 72 79 2c 20 74 68 65 20 22 78 61 78 69 73  uery, the "xaxis
27210 22 20 61 6e 64 20 22 79 61 78 69 73 22 20 43 54  " and "yaxis" CT
27220 45 73 20 64 65 66 69 6e 65 20 74 68 65 20 67 72  Es define the gr
27230 69 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f 72  id of points for
27240 0a 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64 65  .which the Mande
27250 6c 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20 62  lbrot Set will b
27260 65 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e 20  e approximated. 
27270 20 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   Each row in the
27280 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c 78  ."m(iter,cx,cy,x
27290 2c 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20 74  ,y)" CTE means t
272a0 68 61 74 20 61 66 74 65 72 20 22 69 74 65 72 22  hat after "iter"
272b0 20 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   iterations, the
272c0 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65 72   Mandelbrot.iter
272d0 61 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20 61  ation starting a
272e0 74 20 63 78 2c 63 79 20 68 61 73 20 72 65 61 63  t cx,cy has reac
272f0 68 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20 20  hed point x,y.  
27300 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  The number of it
27310 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69 73  erations.in this
27320 20 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d 69   example is limi
27330 74 65 64 20 74 6f 20 32 38 20 28 77 68 69 63 68  ted to 28 (which
27340 20 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74 73   severely limits
27350 20 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20   the resolution 
27360 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74 69  of.the computati
27370 6f 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66 69  on, but is suffi
27380 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72 65  cient for low-re
27390 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d 61  solution ASCII-a
273a0 72 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65 20  rt output)..The 
273b0 22 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29 22  "m2(iter,cx,cy)"
273c0 20 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20 6d   CTE holds the m
273d0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
273e0 20 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61 63   iterations reac
273f0 68 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69 6e  hed when.startin
27400 67 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63 79  g at point cx,cy
27410 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68 20  ..Finally, each 
27420 72 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74 29  row in the "a(t)
27430 22 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73 74  " CTE holds a st
27440 72 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20 61  ring .which is a
27450 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20   single line of 
27460 74 68 65 20 6f 75 74 70 75 74 20 41 53 43 49 49  the output ASCII
27470 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43 54  -art..The SELECT
27480 20 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74 68   statement at th
27490 65 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72 69  e end just queri
274a0 65 73 20 74 68 65 20 22 61 22 20 43 54 45 20 74  es the "a" CTE t
274b0 6f 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20 6c  o.retrieve all l
274c0 69 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61 72  ines of ASCII-ar
274d0 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a  t, one by one...
274e0 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20 71  <p>Running the q
274f0 75 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61 6e  uery above in an
27500 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e 64   SQLite [command
27510 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65 73  -line shell] res
27520 75 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c 6c  ults.in the foll
27530 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a 3c  owing output:..<
27540 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
27550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27570 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20       ....#.     
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
275a0 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20  #*...           
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275e0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
275f0 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b  ...+####....   +
27600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27610 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23              ..##
27620 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b  +*##########+.++
27630 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ++.             
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e               .+.
27650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27660 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
27670 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e     .............
27680 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
27690 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20  ####+.+.        
276a0 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e        ..++..#...
276b0 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  ..*#############
276c0 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
276d0 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
276e0 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
276f0 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
27700 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23          ....+*##
27710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
27730 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
27740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e  ##############..
27760 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
27770 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
27780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27790 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ##..            
277a0 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
277b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
277c0 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
277d0 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e       ..++..#....
277e0 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .*##############
277f0 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
27800 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e          ........
27810 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23  .....+##########
27820 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20  #########+.+.   
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23         .+.######
27850 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a            ..##+*
27880 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b  ##########+.++++
27890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
278b0 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20  ....+####....   
278c0 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20     ..+####+..   
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27910 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20  ..#*...         
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23             ....#
27940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f       +..</pre></
27970 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63  blockquote>..<tc
27980 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75  l>hd_fragment su
27990 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64 6f  doku {solve Sudo
279a0 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63  ku puzzles} </tc
279b0 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74 20  l>.<p>This next 
279c0 71 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20 53  query solves a S
279d0 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20 54  udoku puzzle.  T
279e0 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
279f0 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e 65  puzzle is.define
27a00 64 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72 61  d by an 81-chara
27a10 63 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72 6d  cter string form
27a20 65 64 20 62 79 20 72 65 61 64 69 6e 67 20 65 6e  ed by reading en
27a30 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a 70  tries from the.p
27a40 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62 79  uzzle box row by
27a50 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20 74   row from left t
27a60 6f 20 72 69 67 68 74 20 61 6e 64 20 74 68 65 6e  o right and then
27a70 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74   from top to bot
27a80 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61 72  tom..Blank squar
27a90 65 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c 65  es in the puzzle
27aa0 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20   are denoted by 
27ab0 61 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 2e  a "." character.
27ac0 20 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70 75    .Thus the inpu
27ad0 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63  t string:..<bloc
27ae0 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e  kquote>.53..7...
27af0 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e  .6..195....98...
27b00 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38  .6.8...6...34..8
27b10 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36  .3..17...2...6.6
27b20 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35  ....28....419..5
27b30 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63  ....8..79.</bloc
27b40 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72  kquote>..<p>Corr
27b50 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75 7a  esponds to a puz
27b60 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a  zle like this:..
27b70 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
27b80 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63  ble border="1" c
27b90 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e 0a  ellpadding="5">.
27ba0 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c 74  <tr><td>5<td>3<t
27bb0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64  d> <td> <td>7<td
27bc0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27bd0 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c  .<tr><td>6<td> <
27be0 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c 74  td> <td>1<td>9<t
27bf0 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>5<td> <td> <td
27c00 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 39  >.<tr><td> <td>9
27c10 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
27c20 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  td> <td> <td>6<t
27c30 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64 3e  d>.<tr><td>8<td>
27c40 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36   <td> <td> <td>6
27c50 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27c60 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74  td>3.<tr><td>4<t
27c70 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
27c80 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  > <td>3<td> <td>
27c90 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37   <td>1.<tr><td>7
27ca0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27cb0 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>2<td> <td> <t
27cc0 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74 64  d> <td>6.<tr><td
27cd0 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
27ce0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32   <td> <td> <td>2
27cf0 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>8<td>.<tr><t
27d00 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27d10 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e  >4<td>1<td>9<td>
27d20 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e   <td> <td>5.<tr>
27d30 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27d40 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td> <td>8<td> <t
27d50 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f  d> <td>7<td>9.</
27d60 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
27d70 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69 73  ote>..<p>This is
27d80 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74 20   the query that 
27d90 73 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a 6c  solves the puzzl
27da0 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
27db0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
27dc0 53 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75 64  SIVE.  input(sud
27dd0 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
27de0 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31  S('53..7....6..1
27df0 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e  95....98....6.8.
27e00 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31  ..6...34..8.3..1
27e10 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32  7...2...6.6....2
27e20 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38  8....419..5....8
27e30 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64 69  ..79').  ),.  di
27e40 67 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20 28  gits(z, lp) AS (
27e50 0a 20 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c  .    VALUES('1',
27e60 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1).    UNION AL
27e70 4c 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41 53  L SELECT.    CAS
27e80 54 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c  T(lp+1 AS TEXT),
27e90 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74   lp+1 FROM digit
27ea0 73 20 57 48 45 52 45 20 6c 70 26 6c 74 3b 39 0a  s WHERE lp&lt;9.
27eb0 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29    ),.  x(s, ind)
27ec0 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
27ed0 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
27ee0 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
27ef0 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
27f00 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20     SELECT.      
27f10 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64  substr(s, 1, ind
27f20 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73  -1) || z || subs
27f30 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20  tr(s, ind+1),.  
27f40 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
27f50 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
27f60 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
27f70 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20   ind+1), '.' ). 
27f80 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69      FROM x, digi
27f90 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52  ts AS z.    WHER
27fa0 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e  E ind>0.      AN
27fb0 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20  D NOT EXISTS (. 
27fc0 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
27fd0 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20  T 1.            
27fe0 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53    FROM digits AS
27ff0 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20   lp.            
28000 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
28010 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
28020 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20  9)*9 + lp, 1).  
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
28040 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
28050 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28   ((ind-1)%9) + (
28060 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a  lp-1)*9 + 1, 1).
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
28090 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20  s, (((ind-1)/3) 
280a0 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20  % 3) * 3.       
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
280d0 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20  * 27 + lp.      
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29    + ((lp-1) / 3)
28100 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20   * 6, 1).       
28110 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73    ).  ).SELECT s
28120 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
28130 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d=0;.</pre></blo
28140 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
28150 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66   "input" CTE def
28160 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70  ines the input p
28170 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69  uzzle..The "digi
28180 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20  ts" CTE defines 
28190 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  a table that hol
281a0 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65  ds all digits be
281b0 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54  tween 1 and 9..T
281c0 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69  he work of solvi
281d0 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  ng the puzzle is
281e0 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74   undertaken by t
281f0 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65  he "x" CTE..An e
28200 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29  ntry in x(s,ind)
28210 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
28220 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72  81-character str
28230 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61 6c  ing "s" is a val
28240 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  id.sudoku puzzle
28250 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66   (it has no conf
28260 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74 20  licts) and that 
28270 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77  the first unknow
28280 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20 61  n character.is a
28290 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22  t position "ind"
282a0 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61  , or ind==0 if a
282b0 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f 73  ll character pos
282c0 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65  itions are fille
282d0 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20  d in..The goal, 
282e0 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70  then, is to comp
282f0 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20  ute entries for 
28300 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64  "x" with an "ind
28310 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20  " of 0...<p>The 
28320 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20  solver works by 
28330 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69  adding new entri
28340 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72 65  es to the "x" re
28350 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47  cursive table..G
28360 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69  iven prior entri
28370 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69 76  es, the recursiv
28380 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20 74  e-select tries t
28390 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67  o fill in a sing
283a0 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20  le new.position 
283b0 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20  with all values 
283c0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
283d0 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f  that actually wo
283e0 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74  rk in that.posit
283f0 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69  ion.  The compli
28400 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54  cated "NOT EXIST
28410 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20 74  S" subquery is t
28420 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69  he magic that.fi
28430 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68 65  gures out whethe
28440 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61  r or not each ca
28450 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72 69  ndidate "s" stri
28460 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75  ng is a valid.su
28470 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e  doku puzzle or n
28480 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61  ot...<p>The fina
28490 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e  l answer is foun
284a0 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  d by looking for
284b0 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 69   a string with i
284c0 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72  nd==0..If the or
284d0 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72  iginal sudoku pr
284e0 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61  oblem did not ha
284f0 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75  ve a unique solu
28500 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71  tion, then.the q
28510 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e  uery will return
28520 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f   all possible so
28530 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65  lutions.  If the
28540 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65   original proble
28550 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65  m.was unsolvable
28560 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77  , then no rows w
28570 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
28580 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
28590 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65  the unique.answe
285a0 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  r is:..<blockquo
285b0 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32  te>.534678912672
285c0 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37 38  1953481983425678
285d0 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37 39  5976142342685379
285e0 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33 37  1713924856961537
285f0 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35 32  2842874196353452
28600 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  86179.</blockquo
28610 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75  te>..<p>The solu
28620 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65  tion was compute
28630 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33  d in less than 3
28640 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  00 milliseconds 
28650 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b  on a modern.work
28660 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69  station...<h3>Li
28670 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61  mitations And Ca
28680 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e  veats</h3>..<ul>
28690 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
286a0 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  H clause cannot 
286b0 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
286c0 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
286d0 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  ]..<li><p>.The W
286e0 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20  ITH clause must 
286f0 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65  appear at the be
28700 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70  ginning of a top
28710 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20  -level [SELECT] 
28720 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20  statement.or at 
28730 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
28740 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68   a subquery.  Th
28750 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
28760 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65  nnot be prepende
28770 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20  d to.the second 
28780 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45  or subsequent SE
28790 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
287a0 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  f a [compound se
287b0 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  lect]..<li><p>.T
287c0 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63  he SQL:1999 spec
287d0 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
287e0 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
287f0 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48  word follow WITH
28800 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61   in any.WITH cla
28810 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65  use that include
28820 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  s a recursive co
28830 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
28840 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ssion.  However,
28850 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
28860 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65  ty with SqlServe
28870 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51  r and Oracle, SQ
28880 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e  Lite does not en
28890 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e  force this rule.
288a0 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  .</ul>..<tcl>.##
288b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
288c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
288d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
288e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
288f0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
28900 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
28910 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
28920 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  y}..RecursiveBub
28930 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
28940 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a  t-stmt.</tcl>...
28950 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
28960 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
28970 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
28980 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
28990 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
289a0 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
289b0 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
289c0 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
289d0 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
289e0 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c   columns.  A SEL
289f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
28a00 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20  es not make.any 
28a10 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
28a20 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65  atabase...<p>The
28a30 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
28a40 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
28a50 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74  above attempts t
28a60 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f  o show as much o
28a70 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61  f the.SELECT sta
28a80 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73  tement syntax as
28a90 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73   possible in a s
28aa0 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62  ingle diagram, b
28ab0 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64  ecause some read
28ac0 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65  ers.find that he
28ad0 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c  lpful.  The foll
28ae0 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64  owing "[factored
28af0 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69  -select-stmt]" i
28b00 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
28b10 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73  .syntax diagrams
28b20 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73 20   that expresses 
28b30 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20  the same syntax 
28b40 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72 65  but tries to bre
28b50 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64  ak the syntax .d
28b60 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72  own into smaller
28b70 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a   chunks...<tcl>.
28b80 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
28b90 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c  iagram --initial
28ba0 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72  ly-hidden factor
28bb0 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  ed-select-stmt s
28bc0 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
28bd0 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  >..<p>Note that 
28be0 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73 20  there are paths 
28bf0 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74  through the synt
28c00 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61 74  ax diagrams that
28c10 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  .are not allowed
28c20 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53   in practice.  S
28c30 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75  ome examples:.<u
28c40 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53  l>.<li>A [VALUES
28c50 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  ] clause can be 
28c60 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
28c70 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t in a [compound
28c80 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61   SELECT].    tha
28c90 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20  t uses a [WITH] 
28ca0 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73  clause, but a [s
28cb0 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68  imple SELECT] th
28cc0 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20  at consists of. 
28cd0 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45     just a [VALUE
28ce0 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  S] clause cannot
28cf0 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
28d00 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e  a [WITH] clause.
28d10 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20  .<li>The [WITH] 
28d20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75  clause must occu
28d30 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53  r on the first S
28d40 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70  ELECT of a [comp
28d50 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20  ound SELECT]..  
28d60 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c    It cannot foll
28d70 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f  ow a [compound-o
28d80 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a  perator]..</ul>.
28d90 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20  These and other 
28da0 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72  similar syntax r
28db0 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20  estrictions are 
28dc0 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
28dd0 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53   text...<p>The S
28de0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28df0 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70  is the most comp
28e00 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20  licated command 
28e10 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
28e20 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65  age..To make the
28e30 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73   description eas
28e40 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73  ier to follow, s
28e50 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73 61  ome of the passa
28e60 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69  ges below descri
28e70 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20 64  be.the way the d
28e80 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
28e90 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
28ea0 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  nt is determined
28eb0 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a   as a series of.
28ec0 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70  steps. It is imp
28ed0 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69  ortant to keep i
28ee0 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73  n mind that this
28ef0 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73   is purely illus
28f00 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61  trative -.in pra
28f10 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53 51  ctice neither SQ
28f20 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68  Lite nor any oth
28f30 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73  er SQL engine is
28f40 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c   required to fol
28f50 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79  low .this or any
28f60 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63 20   other specific 
28f70 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68  process...<tcl>h
28f80 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c  d_fragment simpl
28f90 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20  eselect {simple 
28fa0 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68  SELECT}</tcl>.<h
28fb0 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20  3>Simple Select 
28fc0 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a  Processing</h3>.
28fd0 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20  .<p>The core of 
28fe0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
28ff0 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20  nt is a "simple 
29000 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79  SELECT" shown by
29010 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72   the.[select-cor
29020 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73  e] and [simple-s
29030 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74  elect-stmt] synt
29040 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f  ax diagrams belo
29050 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65  w.  .In practice
29060 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74  , most SELECT st
29070 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d  atements are sim
29080 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
29090 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  ments...<tcl>.Re
290a0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
290b0 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65  gram simple-sele
290c0 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
290d0 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47  ore.</tcl>..<p>G
290e0 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65  enerating the re
290f0 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c  sults of a simpl
29100 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
29110 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20  nt is presented 
29120 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70  as a four step p
29130 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65  rocess in the de
29140 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a  scription below:
29150 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ol>.  <li> <p
29160 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70  >[FROM clause] p
29170 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
29180 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68  nput data for th
29190 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
291a0 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d  is.       determ
291b0 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20  ined. The input 
291c0 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69  data is either i
291d0 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
291e0 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20  le row with 0.  
291f0 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66       columns (if
29200 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f   there is no FRO
29210 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20  M clause) or is 
29220 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
29230 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c  e FROM.       cl
29240 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
29250 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
29260 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
29270 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
29280 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
29290 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
292a0 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
292b0 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
292c0 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
292d0 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
292e0 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
292f0 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
29300 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
29310 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
29320 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
29330 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
29340 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
29350 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
29360 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
29370 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
29380 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
29390 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
293a0 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
293b0 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
293c0 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
293d0 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
293e0 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
293f0 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
29400 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
29410 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
29420 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
29430 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
29440 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
29450 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
29460 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
29470 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
29480 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
29490 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
294a0 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
294b0 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
294c0 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
294d0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
294e0 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
294f0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
29500 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
29510 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
29520 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
29530 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
29540 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
29550 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
29560 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
29570 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
29580 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
29590 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
295a0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
295b0 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
295c0 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
295d0 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
295e0 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
295f0 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
29600 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
29610 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
29620 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
29630 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
29640 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
29650 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
29660 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
29670 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
29680 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
29690 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
296a0 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
296b0 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
296c0 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
296d0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
296e0 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
296f0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
29700 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
29710 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
29720 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
29730 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
29740 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
29750 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
29760 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
29770 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
29780 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
29790 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
297a0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
297b0 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
297c0 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
297d0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
297e0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
297f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29800 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
29810 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
29820 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
29830 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75  eyword. ^A subqu
29840 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e  ery specified.in
29850 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75   the table-or-su
29860 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67  bquery following
29870 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
29880 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
29890 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
298a0 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20  s.handled as if 
298b0 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63  it was a table c
298c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61  ontaining the da
298d0 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
298e0 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62  xecuting the.sub
298f0 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
29900 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
29910 20 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61   the subquery ha
29920 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e  s the.[collation
29930 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  |collation seque
29940 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69  nce] and [affini
29950 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ty] of the corre
29960 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
29970 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75  ion.in the subqu
29980 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ery statement...
29990 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
299a0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61  only a single ta
299b0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
299c0 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75  in the FROM.clau
299d0 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70  se, then the inp
299e0 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
299f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
29a00 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74  ment is the cont
29a10 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65  ents of the.name
29a20 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65  d table. ^If the
29a30 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20  re is more than 
29a40 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62  one table or sub
29a50 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c  query in FROM cl
29a60 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f  ause.then the co
29a70 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61  ntents of all ta
29a80 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71  bles and/or subq
29a90 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65  ueries.are joine
29aa0 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
29ab0 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20  dataset for the 
29ac0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
29ad0 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61  atement to opera
29ae0 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68  te on..Exactly h
29af0 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63  ow the data is c
29b00 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20  ombined depends 
29b10 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20  on the specific 
29b20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20  [join-operator] 
29b30 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
29b40 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
29b50 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
29b60 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
29b70 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
29b80 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
29b90 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
29ba0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
29bb0 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
29bc0 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
29bd0 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
29be0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
29bf0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
29c00 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
29c10 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
29c20 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
29c30 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
29c40 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
29c50 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
29c60 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
29c70 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
29c80 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
29c90 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
29ca0 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
29cb0 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
29cc0 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
29cd0 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
29ce0 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
29cf0 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
29d00 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
29d10 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
29d20 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
29d30 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
29d40 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
29d50 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29d60 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  ub></i> rows of 
29d70 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29d80 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29d90 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  ub></i> columns,
29da0 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
29db0 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
29dc0 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>N<sub><small>r
29dd0 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
29de0 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c  b></i> rows of.<
29df0 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>M<sub><small>r
29e00 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
29e10 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
29e20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
29e30 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
29e40 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e  dataset of .<i>N
29e50 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74  <sub><small>left
29e60 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74  </small></sub>&t
29e70 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c  imes;N<sub><smal
29e80 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c  l>right</small><
29e90 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20  /sub></i>.rows, 
29ea0 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
29eb0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29ec0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29ed0 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  ub>+M<sub><small
29ee0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
29ef0 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
29f00 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
29f10 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
29f20 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
29f30 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
29f40 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
29f50 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
29f60 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
29f70 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
29f80 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
29f90 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
29fa0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
29fb0 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
29fc0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
29fd0 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f  datasets. .If jo
29fe0 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  in-operator does
29ff0 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e   have ON or USIN
2a000 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65  G clauses, those
2a010 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63   are handled acc
2a020 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f  ording to.the fo
2a030 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
2a040 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  oints:..<ul>.  <
2a050 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72  li> <p>^(If ther
2a060 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73  e is an ON claus
2a070 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78  e then the ON ex
2a080 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20  pression is.    
2a090 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72     evaluated for
2a0a0 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
2a0b0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2a0c0 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20  ct as a .       
2a0d0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
2a0e0 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
2a0f0 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78  for which the ex
2a100 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2a110 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72  es to .       tr
2a120 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
2a130 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2a140 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  .)^..  <li> <p>^
2a150 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53  If there is a US
2a160 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20  ING clause.     
2a170 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74    then each of t
2a180 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
2a190 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65  specified must e
2a1a0 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61  xist in the data
2a1b0 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20  sets to .       
2a1c0 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e  both the left an
2a1d0 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a  d right of the j
2a1e0 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28  oin-operator. ^(
2a1f0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
2a200 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f   named.       co
2a210 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65  lumns, the expre
2a220 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72  ssion "lhs.X = r
2a230 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74  hs.X" is evaluat
2a240 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
2a250 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61  of.       the ca
2a260 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2a270 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2a280 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2a290 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20  rows for which. 
2a2a0 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65        all such e
2a2b0 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
2a2c0 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
2a2d0 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2a2e0 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74  he.       result
2a2f0 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f   set.)^ ^When co
2a300 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61  mparing values a
2a310 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20  s a result of a 
2a320 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2a330 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20  e.       normal 
2a340 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69  rules for handli
2a350 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63  ng affinities, c
2a360 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2a370 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20  es and NULL.    
2a380 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d     values in com
2a390 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20  parisons apply. 
2a3a0 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ^The column from
2a3b0 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20   the dataset on 
2a3c0 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d  the.       left-
2a3d0 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
2a3e0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
2a3f0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
2a400 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  be on the left-h
2a410 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20  and.       side 
2a420 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
2a430 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66  n operator (=) f
2a440 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2a450 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  of collation .  
2a460 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e       sequence an
2a470 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65  d affinity prece
2a480 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c  dence...       <
2a490 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72  p>^For each pair
2a4a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e   of columns iden
2a4b0 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e  tified by a USIN
2a4c0 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f  G clause, the co
2a4d0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d  lumn.       from
2a4e0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2a4f0 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74  dataset is omitt
2a500 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e  ed from the join
2a510 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69  ed dataset. ^Thi
2a520 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65  s .       is the
2a530 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
2a540 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47   between a USING
2a550 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20   clause and its 
2a560 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20  equivalent ON.  
2a570 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
2a580 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
2a590 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
2a5a0 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a  word is in the j
2a5b0 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65  oin-operator the
2a5c0 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c  n an.       impl
2a5d0 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73  icit USING claus
2a5e0 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  e is added to th
2a5f0 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  e join-constrain
2a600 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74  ts. The implicit
2a610 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c  .       USING cl
2a620 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61  ause contains ea
2a630 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ch of the column
2a640 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65   names that appe
2a650 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20  ar in both.     
2a660 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72    the left and r
2a670 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  ight-hand input 
2a680 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20  datasets.)^ ^If 
2a690 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
2a6a0 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69  ht-hand.       i
2a6b0 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65  nput datasets fe
2a6c0 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20  ature no common 
2a6d0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68  column names, th
2a6e0 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  en the NATURAL k
2a6f0 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61  eyword.       ha
2a700 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  s no effect on t
2a710 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
2a720 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47  e join. ^A USING
2a730 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61   or ON clause ma
2a740 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20  y.       not be 
2a750 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20  added to a join 
2a760 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2a770 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
2a780 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  rd...  <li> <p>^
2a790 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  (If the join-ope
2a7a0 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54  rator is a "LEFT
2a7b0 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
2a7c0 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
2a7d0 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20  n.       after. 
2a7e0 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
2a7f0 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
2a800 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
2a810 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
2a820 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
2a830 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
2a840 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
2a850 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
2a860 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
2a870 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
2a880 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
2a890 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
2a8a0 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
2a8b0 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
2a8c0 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
2a8d0 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
2a8e0 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
2a8f0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
2a900 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
2a910 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
2a920 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
2a930 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
2a940 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
2a950 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
2a960 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
2a970 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
2a980 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
2a990 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
2a9a0 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
2a9b0 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
2a9c0 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
2a9d0 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
2a9e0 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
2a9f0 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
2aa00 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
2aa10 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
2aa20 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
2aa30 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
2aa40 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
2aa50 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
2aa60 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
2aa70 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20  gment crossjoin 
2aa80 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53  {treats the CROS
2aa90 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20  S JOIN operator 
2aaa0 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e  specially}</tcl>
2aab0 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
2aac0 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  : Special handli
2aad0 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e  ng of CROSS JOIN
2aae0 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20  .</b>.^There is 
2aaf0 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  no difference be
2ab00 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52  tween the "INNER
2ab10 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2ab20 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72  nd "," join.oper
2ab30 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20  ators. They are 
2ab40 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72  completely inter
2ab50 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51  changeable in SQ
2ab60 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f  Lite..^(The "CRO
2ab70 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70  SS JOIN" join op
2ab80 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20  erator produces 
2ab90 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20  the same result 
2aba0 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
2abb0 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
2abc0 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
2abd0 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53  , but is .[CROSS
2abe0 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69   JOIN|handled di
2abf0 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65  fferently by the
2ac00 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2ac10 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65  ].in that it pre
2ac20 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20  vents the query 
2ac30 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72  optimizer from r
2ac40 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61  eordering.the ta
2ac50 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
2ac60 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  .  An applicatio
2ac70 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e  n programmer can
2ac80 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a   use the CROSS J
2ac90 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f  OIN .operator to
2aca0 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65   directly influe
2acb0 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68  nce the algorith
2acc0 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e  m that is chosen
2acd0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68   to implement.th
2ace0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2acf0 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  nt.  Avoid using
2ad00 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65   CROSS JOIN exce
2ad10 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73  pt in specific s
2ad20 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65  ituations .where
2ad30 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20   manual control 
2ad40 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  of the query opt
2ad50 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65  imizer is desire
2ad60 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a  d.  Avoid using.
2ad70 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79  CROSS JOIN early
2ad80 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   in the developm
2ad90 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63  ent of an applic
2ada0 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73  ation as doing s
2adb0 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22  o is.a <a href="
2adc0 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67  http://c2.com/cg
2add0 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65  i/wiki?Premature
2ade0 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72  Optimization">pr
2adf0 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61  emature.optimiza
2ae00 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73  tion</a>.  The s
2ae10 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2ae20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73  of CROSS JOIN is
2ae30 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69   an SQLite-speci
2ae40 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20  fic.feature and 
2ae50 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66  is not a part of
2ae60 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20   standard SQL.. 
2ae70 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f        ..<tcl>hd_
2ae80 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c  fragment wherecl
2ae90 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2aea0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45  hd_keywords {WHE
2aeb0 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  RE clause}</tcl>
2aec0 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20  .<p><b>2. WHERE 
2aed0 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67  clause filtering
2aee0 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  .</b>..<p>^(If a
2aef0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
2af00 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
2af10 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
2af20 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2af30 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
2af40 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
2af50 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
2af60 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f  ession]. Only ro
2af70 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2af80 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
2af90 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2afa0 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69  es to true are i
2afb0 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2afc0 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
2afd0 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52  continuing.)^  R
2afe0 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64  ows are excluded
2aff0 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
2b000 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
2b010 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74  ause.evaluates t
2b020 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f  o either false o
2b030 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20  r NULL...<p>For 
2b040 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20  a JOIN or INNER 
2b050 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f  JOIN or CROSS JO
2b060 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  IN, there is no 
2b070 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2b080 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74  en .a constraint
2b090 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b0a0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2b0b0 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f  and one in the O
2b0c0 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76  N clause.  Howev
2b0d0 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a  er,.for a LEFT J
2b0e0 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45  OIN or LEFT OUTE
2b0f0 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66  R JOIN, the diff
2b100 65 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69  erence is very i
2b110 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61  mportant.  .In a
2b120 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20   LEFT JOIN,.the 
2b130 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66  extra NULL row f
2b140 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  or the right-han
2b150 64 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64  d table is added
2b160 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65   after ON clause
2b170 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20   processing.but 
2b180 62 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61  before WHERE cla
2b190 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  use processing. 
2b1a0 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66   A constraint of
2b1b0 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e   the form "left.
2b1c0 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e  x=right.y".in an
2b1d0 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20   ON clause will 
2b1e0 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20  therefore allow 
2b1f0 74 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65  through the adde
2b200 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20  d all-NULL rows 
2b210 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62  of the.right tab
2b220 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74  le.  But if that
2b230 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74   same constraint
2b240 20 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45   is in the WHERE
2b250 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69   clause a NULL i
2b260 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c  n."right.y" will
2b270 20 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70   prevent the exp
2b280 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d  ression "left.x=
2b290 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65  right.y" from be
2b2a0 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68  ing true, and.th
2b2b0 75 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20  us exclude that 
2b2c0 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74  row from the out
2b2d0 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47  put...<p><b>3. G
2b2e0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
2b2f0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2b300 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ows.</b>.<tcl>hd
2b310 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74  _fragment result
2b320 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  set</tcl>.<tcl>h
2b330 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75  d_keywords {resu
2b340 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
2b350 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f  ns} {GROUP BY}</
2b360 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68  tcl>..<p>Once th
2b370 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f  e input data fro
2b380 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  m the FROM claus
2b390 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65  e has been filte
2b3a0 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45  red by the.WHERE
2b3b0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2b3c0 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65  on (if any), the
2b3d0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2b3e0 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70  ows for the simp
2b3f0 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63  le .SELECT are c
2b400 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74  alculated. Exact
2b410 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64  ly how this is d
2b420 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77  one depends on w
2b430 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c  hether the simpl
2b440 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20  e .SELECT is an 
2b450 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e  aggregate or non
2b460 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2b470 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  , and whether or
2b480 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20   not a GROUP.BY 
2b490 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69  clause was speci
2b4a0 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c  fied...<p> The l
2b4b0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
2b4c0 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53  ns between the S
2b4d0 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
2b4e0 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e  eywords is known
2b4f0 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65   as.the result e
2b500 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20  xpression list. 
2b510 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78   ^If a result ex
2b520 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2b530 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69  special expressi
2b540 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20  on."*" then all 
2b550 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
2b560 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75  nput data are su
2b570 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2b580 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
2b590 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72  n..^(If the expr
2b5a0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c  ession is the al
2b5b0 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f  ias of a table o
2b5c0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
2b5d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f  e FROM clause.fo
2b5e0 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74  llowed by ".*" t
2b5f0 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2b600 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74  from the named t
2b610 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
2b620 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64   are.substituted
2b630 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20   for the single 
2b640 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28  expression.)^ ^(
2b650 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
2b660 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22  o use a "*" or."
2b670 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2b680 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65  ion in any conte
2b690 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  xt other than a 
2b6a0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2b6b0 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69  n list.)^.^(It i
2b6c0 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20  s also an error 
2b6d0 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20  to use a "*" or 
2b6e0 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
2b6f0 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65  sion in a simple
2b700 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68   SELECT.query th
2b710 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  at does not have
2b720 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29   a FROM clause.)
2b730 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d  ^..<p> ^(The num
2b740 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
2b750 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72  n the rows retur
2b760 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  ned by a simple 
2b770 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2b780 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65  .is equal to the
2b790 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   number of expre
2b7a0 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2b7b0 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
2b7c0 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74  list after.subst
2b7d0 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64  itution of * and
2b7e0 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73   alias.* express
2b7f0 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73  ions.)^ Each res
2b800 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75  ult row is calcu
2b810 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74  lated by.evaluat
2b820 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69  ing the expressi
2b830 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2b840 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2b850 74 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  t with respect t
2b860 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f  o a.single row o
2b870 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c  f input data or,
2b880 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71   for aggregate q
2b890 75 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73  ueries, with res
2b8a0 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a  pect to a group.
2b8b0 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20  of rows...<ul>. 
2b8c0 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2b8d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2b8e0 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67   is <b>a non-agg
2b8f0 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e  regate query</b>
2b900 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68  , then .    each
2b910 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b920 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2b930 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61  sion list is eva
2b940 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2b950 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64  row in.    the d
2b960 61 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20  ataset filtered 
2b970 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  by the WHERE cla
2b980 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  use...  <li><p>^
2b990 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
2b9a0 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
2b9b0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2b9c0 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2b9d0 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
2b9e0 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67  se, then each ag
2b9f0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2ba00 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
2ba10 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61  -set is .    eva
2ba20 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f  luated once acro
2ba30 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ss the entire da
2ba40 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e  taset. ^Each non
2ba50 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2ba60 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65  ssion.    in the
2ba70 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
2ba80 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
2ba90 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  r an arbitrarily
2baa0 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66   selected row of
2bab0 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2bac0 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69  . ^The same arbi
2bad0 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2bae0 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72   row is used for
2baf0 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67   each.    non-ag
2bb00 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2bb10 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  on. ^Or, if the 
2bb20 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73  dataset contains
2bb30 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e   zero rows, then
2bb40 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61   .    each non-a
2bb50 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2bb60 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
2bb70 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63   against a row c
2bb80 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e  onsisting.    en
2bb90 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76  tirely of NULL v
2bba0 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54  alues...   <p>^T
2bbb0 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66  he single row of
2bbc0 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61   result-set data
2bbd0 20 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c   created by eval
2bbe0 75 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65  uating the aggre
2bbf0 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e  gate.    and non
2bc00 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2bc10 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2bc20 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74  sult-set forms t
2bc30 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a  he result of an.
2bc40 20 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75      aggregate qu
2bc50 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
2bc60 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  OUP BY clause. ^
2bc70 41 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  An aggregate que
2bc80 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20  ry without a.   
2bc90 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2bca0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
2bcb0 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20  exactly one row 
2bcc0 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66  of data, even if
2bcd0 20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a   there are.    z
2bce0 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75  ero rows of inpu
2bcf0 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c  t data...  <li><
2bd00 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43  p>^(If the SELEC
2bd10 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2bd20 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2bd30 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
2bd40 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61  P.    BY</b> cla
2bd50 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f  use, then each o
2bd60 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2bd70 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
2bd80 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47  art of the.    G
2bd90 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69  ROUP BY clause i
2bda0 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2bdb0 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2bdc0 64 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f  dataset. Each ro
2bdd0 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73  w.    is then as
2bde0 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f  signed to a "gro
2bdf0 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65  up" based on the
2be00 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66   results; rows f
2be10 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65  or which.    the
2be20 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
2be30 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50  uating the GROUP
2be40 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20   BY expressions 
2be50 61 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74  are the same get
2be60 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f  .    assigned to
2be70 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e   the same group.
2be80 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  )^ ^For the purp
2be90 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67  oses of grouping
2bea0 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20   rows, NULL .   
2beb0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2bec0 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54  idered equal. ^T
2bed0 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66  he usual rules f
2bee0 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65  or [collation|se
2bef0 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f  lecting a.    co
2bf00 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2bf10 5d 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20  ] with which to 
2bf20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
2bf30 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65  ues apply when e
2bf40 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78  valuating.    ex
2bf50 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47  pressions in a G
2bf60 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20  ROUP BY clause. 
2bf70 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
2bf80 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42  s in the GROUP B
2bf90 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20  Y clause.    do 
2bfa0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76  <em>not</em> hav
2bfb0 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69  e to be expressi
2bfc0 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ons that appear 
2bfd0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e  in the result. ^
2bfe0 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69  The.    expressi
2bff0 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
2c000 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74  Y clause may not
2c010 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78   be aggregate ex
2c020 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20  pressions...    
2c030 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47  <p>^(If a HAVING
2c040 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2c050 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c  fied, it is eval
2c060 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
2c070 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f  ach group .    o
2c080 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f  f rows as a [boo
2c090 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2c0a0 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  . If the result 
2c0b0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
2c0c0 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
2c0d0 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68  use is false, th
2c0e0 65 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61  e group is disca
2c0f0 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rded.)^ ^If the 
2c100 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2c110 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74  .    an aggregat
2c120 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
2c130 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63   is evaluated ac
2c140 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
2c150 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a   the group. ^If.
2c160 20 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61      a HAVING cla
2c170 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67  use is a non-agg
2c180 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2c190 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2c1a0 65 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a  ed with respect.
2c1b0 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72      to an arbitr
2c1c0 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2c1d0 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75  ow from the grou
2c1e0 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  p.  ^The HAVING 
2c1f0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20  expression may. 
2c200 20 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75     refer to valu
2c210 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
2c220 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
2c230 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
2c240 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20  e result.</p>.. 
2c250 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72     <p>^Each expr
2c260 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2c270 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e  sult-set is then
2c280 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2c290 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f  for each.    gro
2c2a0 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20  up of rows. ^If 
2c2b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2c2c0 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65  s an aggregate e
2c2d0 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2c2e0 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2c2f0 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2c300 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f  in the group. ^O
2c310 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20  therwise, it is 
2c320 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2c330 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61  t.    a single a
2c340 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65  rbitrarily chose
2c350 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69  n row from withi
2c360 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66  n the group. ^If
2c370 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20   there is more. 
2c380 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d     than one non-
2c390 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2c3a0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2c3b0 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  lt-set, then all
2c3c0 20 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73   such.    expres
2c3d0 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
2c3e0 74 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ted for the same
2c3f0 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45   row...    <p>^E
2c400 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70  ach group of inp
2c410 75 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20  ut dataset rows 
2c420 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69  contributes a si
2c430 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20  ngle row to the 
2c440 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75  .    set of resu
2c450 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63  lt rows. ^Subjec
2c460 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61  t to filtering a
2c470 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2c480 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20  he DISTINCT.    
2c490 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d  keyword, the num
2c4a0 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
2c4b0 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65  rned by an aggre
2c4c0 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
2c4d0 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63  a GROUP.    BY c
2c4e0 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
2c4f0 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
2c500 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77  of groups of row
2c510 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70  s produced by ap
2c520 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47  plying.    the G
2c530 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49  ROUP BY and HAVI
2c540 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68  NG clauses to th
2c550 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
2c560 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a   dataset..</ul>.
2c570 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61  .<p><b>4. Remova
2c580 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72  l of duplicate r
2c590 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72  ows (DISTINCT pr
2c5a0 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c  ocessing).</b>.<
2c5b0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2c5c0 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c  distinct</tcl>.<
2c5d0 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2c5e0 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e  {DISTINCT}</tcl>
2c5f0 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65  ..<p>^One of the
2c600 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54   ALL or DISTINCT
2c610 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f   keywords may fo
2c620 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20  llow the SELECT 
2c630 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69  keyword in a .si
2c640 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2c650 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73  ement. ^If the s
2c660 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
2c670 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68  a SELECT ALL, th
2c680 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65  en the.entire se
2c690 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2c6a0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79   are returned by
2c6b0 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66   the SELECT. ^If
2c6c0 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a   neither ALL or.
2c6d0 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65  DISTINCT are pre
2c6e0 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
2c6f0 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66  ehavior is as if
2c700 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66   ALL were specif
2c710 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69  ied. .^If the si
2c720 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2c730 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
2c740 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  , then duplicate
2c750 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2c760 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d.from the set o
2c770 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65  f result rows be
2c780 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72  fore it is retur
2c790 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  ned. ^For the pu
2c7a0 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74  rposes of.detect
2c7b0 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2c7c0 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c  ws, two NULL val
2c7d0 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
2c7e0 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20  ed to be equal. 
2c7f0 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65  ^The.normal rule
2c800 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20  s for selecting 
2c810 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2c820 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
2c830 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68  text values with
2c840 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68  .apply...<tcl>.h
2c850 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f  d_fragment compo
2c860 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65  und {compound se
2c870 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  lect} {compound 
2c880 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64  query} {compound
2c890 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75   SELECT} {compou
2c8a0 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63  nd SELECTs}.</tc
2c8b0 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20  l>.<h3>Compound 
2c8c0 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74  Select Statement
2c8d0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f  s</h3>..<p>Two o
2c8e0 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53  r more [simple S
2c8f0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2c900 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74  s may be connect
2c910 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66  ed together to f
2c920 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53  orm.a compound S
2c930 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20  ELECT using the 
2c940 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
2c950 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45  , INTERSECT or E
2c960 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a  XCEPT operator,.
2c970 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20  as shown by the 
2c980 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61  following diagra
2c990 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  m:..<tcl>.Recurs
2c9a0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2c9b0 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
2c9c0 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
2c9d0 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  >^In a compound 
2c9e0 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
2c9f0 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
2ca00 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20  CTs must return 
2ca10 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72  the same .number
2ca20 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
2ca30 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70  ns. ^As the comp
2ca40 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70  onents of a comp
2ca50 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74  ound SELECT must
2ca60 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  .be simple SELEC
2ca70 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68  T statements, th
2ca80 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  ey may not conta
2ca90 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72  in [ORDER BY] or
2caa0 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2cab0 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e  ..^[ORDER BY] an
2cac0 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  d [LIMIT] clause
2cad0 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72  s may only occur
2cae0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2caf0 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75  he entire compou
2cb00 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74  nd.SELECT, and t
2cb10 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  hen only if the 
2cb20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66  final element of
2cb30 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73   the compound is
2cb40 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20   not a [VALUES] 
2cb50 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63  clause...<p>^A c
2cb60 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
2cb70 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
2cb80 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
2cb90 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
2cba0 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
2cbb0 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
2cbc0 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
2cbd0 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
2cbe0 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
2cbf0 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
2cc00 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
2cc10 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
2cc20 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
2cc30 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
2cc40 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
2cc50 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
2cc60 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2cc70 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
2cc80 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
2cc90 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
2cca0 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
2ccb0 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
2ccc0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
2ccd0 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
2cce0 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
2ccf0 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
2cd00 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
2cd10 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2cd20 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
2cd30 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
2cd40 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
2cd50 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
2cd60 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
2cd70 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
2cd80 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
2cd90 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
2cda0 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
2cdb0 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
2cdc0 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
2cdd0 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
2cde0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2cdf0 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
2ce00 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
2ce10 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
2ce20 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
2ce30 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
2ce40 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
2ce50 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
2ce60 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
2ce70 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
2ce80 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
2ce90 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
2cea0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2ceb0 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
2cec0 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
2ced0 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2cee0 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
2cef0 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
2cf00 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
2cf10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2cf20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
2cf30 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
2cf40 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
2cf50 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
2cf60 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
2cf70 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
2cf80 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
2cf90 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
2cfa0 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
2cfb0 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
2cfc0 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
2cfd0 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
2cfe0 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
2cff0 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
2d000 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
2d010 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
2d020 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
2d030 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
2d040 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
2d050 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
2d060 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
2d070 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
2d080 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
2d090 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
2d0a0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2d0b0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2d0c0 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
2d0d0 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
2d0e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2d0f0 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
2d100 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
2d110 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
2d120 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
2d130 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
2d140 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20  erby {order by} 
2d150 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e  {ORDER BY}</tcl>
2d160 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42  .<h3>The ORDER B
2d170 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  Y clause</h3>..<
2d180 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74  p>If a SELECT st
2d190 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74  atement that ret
2d1a0 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  urns more than o
2d1b0 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ne row does not 
2d1c0 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59  have an.ORDER BY
2d1d0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64   clause, the ord
2d1e0 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  er in which the 
2d1f0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2d200 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
2d210 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20  Or, if a SELECT 
2d220 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68  statement does h
2d230 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2d240 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2d250 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73   list of.express
2d260 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f  ions attached to
2d270 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65   the ORDER BY de
2d280 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65  termine the orde
2d290 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a  r in which rows.
2d2a0 61 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20  are returned to 
2d2b0 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e  the user...<p>.^
2d2c0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2d2d0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2d2e0 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20  , only the last 
2d2f0 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
2d300 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61  imple SELECT].ma
2d310 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  y have an ORDER 
2d320 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74  BY clause. ^That
2d330 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2d340 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f   will apply acro
2d350 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20  ss all elements 
2d360 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of.the compound.
2d370 20 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d   ^If the right-m
2d380 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  ost element of a
2d390 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2d3a0 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d  T] is a [VALUES]
2d3b0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f   clause,.then no
2d3c0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2d3d0 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74   is allowed on t
2d3e0 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  hat statement...
2d3f0 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69  .<p>^Rows are fi
2d400 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64  rst sorted based
2d410 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
2d420 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
2d430 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
2d440 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52  ession in the OR
2d450 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65  DER BY list, the
2d460 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65  n ties are broke
2d470 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  n.by evaluating 
2d480 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d  the second left-
2d490 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
2d4a0 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f  and so on. The o
2d4b0 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77  rder in which.tw
2d4c0 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  o rows for which
2d4d0 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2d4e0 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
2d4f0 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75  te to equal valu
2d500 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20  es are.returned 
2d510 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45  is undefined. ^E
2d520 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2d530 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
2d540 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
2d550 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed.by one of the
2d560 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73   keywords ASC (s
2d570 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72  maller values ar
2d580 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74  e returned first
2d590 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65  ) or DESC (large
2d5a0 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74  r.values are ret
2d5b0 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49  urned first). ^I
2d5c0 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72  f neither ASC or
2d5d0 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66   DESC are specif
2d5e0 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f  ied, rows.are so
2d5f0 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  rted in ascendin
2d600 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  g (smaller value
2d610 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62  s first) order b
2d620 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45  y default...<p>E
2d630 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2d640 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65  ression is proce
2d650 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ssed as follows:
2d660 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
2d670 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
2d680 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2d690 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65   a constant inte
2d6a0 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65  ger K then the.e
2d6b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e  xpression is con
2d6c0 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73  sidered an alias
2d6d0 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f   for the K-th co
2d6e0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
2d6f0 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20  lt set.(columns 
2d700 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f  are numbered fro
2d710 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
2d720 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29  starting with 1)
2d730 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  ...<li><p>^If th
2d740 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2d750 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e  ssion is an iden
2d760 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72  tifier that corr
2d770 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61  esponds to.the a
2d780 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74  lias of one of t
2d790 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he output column
2d7a0 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  s, then the expr
2d7b0 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
2d7c0 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f  ered.an alias fo
2d7d0 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a  r that column...
2d7e0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2d7f0 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2d800 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2d810 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65   any other expre
2d820 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76  ssion, it .is ev
2d830 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
2d840 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75  returned value u
2d850 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65  sed to order the
2d860 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49   output rows. ^I
2d870 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f.the SELECT sta
2d880 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70  tement is a simp
2d890 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  le SELECT, then 
2d8a0 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20  an ORDER BY may 
2d8b0 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69  contain any.arbi
2d8c0 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
2d8d0 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20  s. ^However, if 
2d8e0 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  the SELECT is a 
2d8f0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2d900 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65   then.ORDER BY e
2d910 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
2d920 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20  are not aliases 
2d930 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  to output column
2d940 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c  s must be exactl
2d950 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e  y.the same as an
2d960 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64   expression used
2d970 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f   as an output co
2d980 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  lumn..</ol>..<p>
2d990 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2d9a0 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77  s of sorting row
2d9b0 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  s, values are co
2d9c0 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61  mpared in the sa
2d9d0 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63  me way.as for [c
2d9e0 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73  omparison expres
2d9f0 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c  sions]. The coll
2da00 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
2da10 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74  sed to compare.t
2da20 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69  wo text values i
2da30 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
2da40 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20  follows:..<ol>. 
2da50 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2da60 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2da70 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20  ion is assigned 
2da80 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2da90 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65  ence using.  the
2daa0 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54   postfix [COLLAT
2dab0 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65  E operator], the
2dac0 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
2dad0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2dae0 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20  ce is.  used..  
2daf0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2db00 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2db10 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2db20 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20   an alias to an 
2db30 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61  expression.  tha
2db40 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67  t has been assig
2db50 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
2db60 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74  sequence using t
2db70 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43  he postfix .  [C
2db80 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d  OLLATE operator]
2db90 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61  , then the colla
2dba0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73  tion sequence as
2dbb0 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c  signed to the al
2dbc0 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69  iased.  expressi
2dbd0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c  on is used..  <l
2dbe0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2dbf0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
2dc00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2dc10 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c   column or an al
2dc20 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72  ias of.  an expr
2dc30 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ession that is a
2dc40 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68   column, then th
2dc50 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
2dc60 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
2dc70 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  .  the column is
2dc80 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70   used. .  <li><p
2dc90 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  >^Otherwise, the
2dca0 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74   [BINARY] collat
2dcb0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
2dcc0 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  used..</ol>..<p>
2dcd0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2dce0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2dcf0 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  , all ORDER BY e
2dd00 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
2dd10 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65  andled.as aliase
2dd20 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65  s for one of the
2dd30 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
2dd40 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of the compound.
2dd50 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .^(If an ORDER B
2dd60 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2dd70 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
2dd80 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74  lias, then SQLit
2dd90 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c  e searches.the l
2dda0 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20  eft-most SELECT 
2ddb0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  in the compound 
2ddc0 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c  for a result col
2ddd0 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73  umn that matches
2dde0 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f   either.the seco
2ddf0 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65  nd or third rule
2de00 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61  s above. If a ma
2de10 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
2de20 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61  e search stops a
2de30 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd.the expressio
2de40 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20  n is handled as 
2de50 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
2de60 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74   result column t
2de70 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a  hat it has been.
2de80 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e  matched against.
2de90 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
2dea0 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
2deb0 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
2dec0 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a  d, and so on.)^.
2ded0 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20  ^If no matching 
2dee0 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
2def0 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72  e found in the r
2df00 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
2df10 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74   any.constituent
2df20 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61   SELECT, it is a
2df30 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74  n error. ^Each t
2df40 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52  erm of the ORDER
2df50 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72   BY clause is.pr
2df60 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65  ocessed separate
2df70 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61  ly and may be ma
2df80 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65  tched against re
2df90 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f  sult columns fro
2dfa0 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45  m different.SELE
2dfb0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
2dfc0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f   the compound.</
2dfd0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
2dfe0 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74  ment limitoffset
2dff0 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54   {LIMIT} {OFFSET
2e000 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
2e010 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33  LIMIT clause</h3
2e020 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  >..<p>^The LIMIT
2e030 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
2e040 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65  to place an uppe
2e050 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
2e060 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
2e070 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e  turned by the en
2e080 74 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74  tire SELECT stat
2e090 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  ement...<p>^In a
2e0a0 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2e0b0 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73  T], only the.las
2e0c0 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
2e0d0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2e0e0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49  may contain a LI
2e0f0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49  MIT clause.  .^I
2e100 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2e110 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49  LECT], .the LIMI
2e120 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73  T clause applies
2e130 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63   to the entire c
2e140 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73  ompound, not jus
2e150 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45  t the final SELE
2e160 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68  CT..^If the righ
2e170 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
2e180 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
2e190 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e  UES clause] then
2e1a0 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
2e1b0 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70  .is allowed...<p
2e1c0 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70  >^Any scalar exp
2e1d0 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75  ression may be u
2e1e0 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49  sed in the .LIMI
2e1f0 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e  T clause, so lon
2e200 67 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65  g as it evaluate
2e210 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  s to an integer 
2e220 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2e230 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2e240 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2e250 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74  n integer. ^If t
2e260 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  he expression ev
2e270 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c  aluates to a NUL
2e280 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20  L .value or any 
2e290 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74  other value that
2e2a0 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
2e2b0 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2e2c0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
2e2d0 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n.error is retur
2e2e0 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d  ned. ^If the LIM
2e2f0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2e300 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67  aluates to a neg
2e310 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65  ative value,.the
2e320 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70  n there is no up
2e330 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
2e340 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2e350 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72  returned. ^Other
2e360 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54  wise, the.SELECT
2e370 20 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72   returns the fir
2e380 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73  st N rows of its
2e390 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79   result set only
2e3a0 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65  , where N is the
2e3b0 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20   value.that the 
2e3c0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2e3d0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e   evaluates to. ^
2e3e0 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
2e3f0 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  T statement woul
2e400 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68  d.return less th
2e410 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75  an N rows withou
2e420 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  t a LIMIT clause
2e430 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72  , then the entir
2e440 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a  e result set is.
2e450 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e  returned. ..<p>^
2e460 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  The expression a
2e470 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f  ttached to the o
2e480 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63  ptional OFFSET c
2e490 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66  lause that may f
2e4a0 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c  ollow a.LIMIT cl
2e4b0 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65  ause must also e
2e4c0 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e  valuate to an in
2e4d0 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75  teger, or a valu
2e4e0 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f  e that can be.lo
2e4f0 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
2e500 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
2e510 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73  . ^If an express
2e520 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45  ion has an OFFSE
2e530 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74  T clause,.then t
2e540 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20  he first M rows 
2e550 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are omitted from
2e560 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2e570 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
2e580 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
2e590 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20   and the next N 
2e5a0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2e5b0 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e  d, where M and N
2e5c0 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
2e5d0 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20  that.the OFFSET 
2e5e0 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
2e5f0 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72  s evaluate to, r
2e600 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72  espectively. ^Or
2e610 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a  , if the SELECT.
2e620 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73  would return les
2e630 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20  s than M+N rows 
2e640 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61  if it did not ha
2e650 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  ve a LIMIT claus
2e660 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73  e, then the.firs
2e670 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69  t M rows are ski
2e680 70 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d  pped and the rem
2e690 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20  aining rows (if 
2e6a0 61 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65  any) are returne
2e6b0 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45  d. ^If the.OFFSE
2e6c0 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74  T clause evaluat
2e6d0 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  es to a negative
2e6e0 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75   value, the resu
2e6f0 6c 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  lts are the same
2e700 20 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76   as if it.had ev
2e710 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e  aluated to zero.
2e720 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66  ..<p>^Instead of
2e730 20 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53   a separate OFFS
2e740 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c  ET clause, the L
2e750 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
2e760 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c  specify two.scal
2e770 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  ar expressions s
2e780 65 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f  eparated by a co
2e790 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  mma. ^In this ca
2e7a0 73 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78  se, the first ex
2e7b0 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64  pression.is used
2e7c0 20 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65   as the OFFSET e
2e7d0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
2e7e0 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20  e second as the 
2e7f0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2e800 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65  ..This is counte
2e810 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20  r-intuitive, as 
2e820 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f  when using the O
2e830 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65  FFSET clause the
2e840 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74   second of.the t
2e850 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  wo expressions i
2e860 73 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  s the OFFSET and
2e870 20 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c   the first the L
2e880 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65  IMIT. .This reve
2e890 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73  rsal of the offs
2e8a0 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20  et and limit is 
2e8b0 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74  intentional.- it
2e8c0 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
2e8d0 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
2e8e0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
2e8f0 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65   systems..Howeve
2e900 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  r, to avoid conf
2e910 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  usion, programme
2e920 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20  rs are strongly 
2e930 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73  encouraged to us
2e940 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68  e.the form of th
2e950 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  e LIMIT clause t
2e960 68 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46  hat uses the "OF
2e970 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e  FSET" keyword an
2e980 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20  d avoid.using a 
2e990 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74  LIMIT clause wit
2e9a0 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  h a comma-separa
2e9b0 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63  ted offset...<tc
2e9c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
2e9d0 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61  lues {VALUES cla
2e9e0 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c  use} VALUES</tcl
2e9f0 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53  >.<h3>The VALUES
2ea00 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2ea10 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56  >^(The phrase "V
2ea20 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
2ea30 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  st</i>)" means t
2ea40 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73  he same thing.as
2ea50 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
2ea60 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e  -list</i>".)^  ^
2ea70 28 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c  (The phrase."VAL
2ea80 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  UES(<i>expr-list
2ea90 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e  -1</i>),...,(<i>
2eaa0 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29  expr-list-N</i>)
2eab0 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2eac0 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43  .thing as "SELEC
2ead0 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31  T <i>expr-list-1
2eae0 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e  </i> UNION ALL .
2eaf0 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c  .. UNION ALL.SEL
2eb00 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2eb10 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68  -N</i>".)^  Both
2eb20 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73   forms are the s
2eb30 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74  ame, except that
2eb40 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53  .the number of S
2eb50 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2eb60 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69   in a compound i
2eb70 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51  s limited by.[SQ
2eb80 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f  LITE_LIMIT_COMPO
2eb90 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72  UND_SELECT] wher
2eba0 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  eas the number o
2ebb0 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55  f rows in a.VALU
2ebc0 45 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f  ES clause has no
2ebd0 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
2ebe0 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
2ebf0 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e  some restriction
2ec00 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20  s on the use of 
2ec10 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  a VALUES clause 
2ec20 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f  that are.not sho
2ec30 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78  wn on the syntax
2ec40 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e   diagrams:..<ul>
2ec50 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
2ec60 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2ec70 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
2ec80 5b 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69  [ORDER BY]...<li
2ec90 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63  ><p>.^A VALUES c
2eca0 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
2ecb0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d  followed by [LIM
2ecc0 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33  IT]..</ul>...<h3
2ecd0 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65  >The WITH Clause
2ece0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43  </h3>..<p>^SELEC
2ecf0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79  T statements may
2ed00 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70   be optionally p
2ed10 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e  receded by a sin
2ed20 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65  gle.[WITH clause
2ed30 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f  ] that defines o
2ed40 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d  ne or more [comm
2ed50 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
2ed60 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69  ions].for use wi
2ed70 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20  thin the SELECT 
2ed80 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c  statement...<tcl
2ed90 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62  >hd_fragment tab
2eda0 66 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c  func1 {table-val
2edb0 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  ued functions in
2edc0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2edd0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c  }</tcl>.<h3>Tabl
2ede0 65 2d 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f  e-valued Functio
2edf0 6e 73 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43  ns In The FROM C
2ee00 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  lause</h3>..<p>A
2ee10 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
2ee20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b   that contains [
2ee30 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20  hidden columns] 
2ee40 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65  can be used like
2ee50 0a 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64  .a [table-valued
2ee60 20 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68   function] in th
2ee70 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20  e FROM clause.  
2ee80 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  The arguments to
2ee90 20 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65   the.table-value
2eea0 64 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d  d function becom
2eeb0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e  e constraints on
2eec0 20 74 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75   the HIDDEN colu
2eed0 6d 6e 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75  mns of.the virtu
2eee0 61 6c 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74  al table.  Addit
2eef0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
2ef00 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69  n can be found i
2ef10 6e 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c  n the.[table-val
2ef20 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69  ued functions|vi
2ef30 72 74 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75  rtual table docu
2ef40 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63  mentation]...<tc
2ef50 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
2ef60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ef70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ef80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ef90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2efa0 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45  #.Section UPDATE
2efb0 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20   update {UPDATE 
2efc0 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72  *UPDATEs}..Recur
2efd0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
2efe0 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f  m update-stmt.</
2eff0 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44  tcl>..<p>^An UPD
2f000 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
2f010 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20   used to modify 
2f020 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20  a subset of the 
2f030 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e  values stored in
2f040 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72   .zero or more r
2f050 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ows of the datab
2f060 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  ase table identi
2f070 66 69 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75  fied by the .[qu
2f080 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
2f090 6d 65 5d 20 73 70 65 63 69 66 69 65 64 20 61 73  me] specified as
2f0a0 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44   part of the UPD
2f0b0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ATE statement...
2f0c0 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
2f0d0 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  E statement does
2f0e0 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52   not have a WHER
2f0f0 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
2f100 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20  ws in the.table 
2f110 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20  are modified by 
2f120 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68  the UPDATE. ^Oth
2f130 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41  erwise, the UPDA
2f140 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20  TE affects only 
2f150 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77  those.rows for w
2f160 68 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63  hich the WHERE c
2f170 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65  lause.[boolean e
2f180 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61  xpression|boolea
2f190 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
2f1a0 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f  true]. ^It is no
2f1b0 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  t an error if th
2f1c0 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64  e.WHERE clause d
2f1d0 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65  oes not evaluate
2f1e0 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79   to true for any
2f1f0 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
2f200 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65  e - this just.me
2f210 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44  ans that the UPD
2f220 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66  ATE statement af
2f230 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e  fects zero rows.
2f240 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63  ..<p>The modific
2f250 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65  ations made to e
2f260 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64  ach row affected
2f270 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74   by an UPDATE st
2f280 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65  atement are.dete
2f290 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69  rmined by the li
2f2a0 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
2f2b0 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
2f2c0 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63  SET keyword. Eac
2f2d0 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65  h.assignment spe
2f2e0 63 69 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d  cifies a <yyterm
2f2f0 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
2f300 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66  term> to the lef
2f310 74 20 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73  t of the .equals
2f320 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c   sign and a.scal
2f330 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  ar expression to
2f340 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72   the right. ^For
2f350 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72   each affected r
2f360 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  ow, the named co
2f370 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f  lumns.are set to
2f380 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e   the values foun
2f390 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
2f3a0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f3b0 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73  g scalar .expres
2f3c0 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e  sions. ^If a sin
2f3d0 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20  gle column-name 
2f3e0 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61  appears more tha
2f3f0 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69  n once in the li
2f400 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74  st of.assignment
2f410 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c   expressions, al
2f420 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d  l but the rightm
2f430 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69  ost occurrence i
2f440 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75  s ignored. ^Colu
2f450 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns.that do not 
2f460 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69  appear in the li
2f470 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
2f480 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64  s are left unmod
2f490 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c  ified. ^The scal
2f4a0 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  ar.expressions m
2f4b0 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75  ay refer to colu
2f4c0 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62  mns of the row b
2f4d0 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49  eing updated. ^I
2f4e0 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a  n this case all.
2f4f0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2f500 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
2f510 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
2f520 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
2f530 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  ...<p>^The optio
2f540 6e 61 6c 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f  nal "OR <i>actio
2f550 6e 3c 2f 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20  n</i>" conflict 
2f560 63 6c 61 75 73 65 20 74 68 61 74 20 66 6f 6c 6c  clause that foll
2f570 6f 77 73 20 74 68 65 0a 55 50 44 41 54 45 20 6b  ows the.UPDATE k
2f580 65 79 77 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68  eyword allows th
2f590 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61  e user to nomina
2f5a0 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f  te a specific.co
2f5b0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
2f5c0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
2f5d0 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
2f5e0 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50  ring this one UP
2f5f0 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65  DATE command..Re
2f600 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69  fer to the secti
2f610 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20  on entitled [ON 
2f620 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64  CONFLICT] for ad
2f630 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2f640 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72  tion...<h3>Restr
2f650 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54  ictions on UPDAT
2f660 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
2f670 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
2f680 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ER</h3>..<p>The 
2f690 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69  following additi
2f6a0 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74  onal syntax rest
2f6b0 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74  rictions apply t
2f6c0 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  o UPDATE stateme
2f6d0 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77  nts that.occur w
2f6e0 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
2f6f0 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  f a [CREATE TRIG
2f700 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
2f710 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70   ..<ul>.  <li><p
2f720 3e 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61  >^The <yyterm>ta
2f730 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
2f740 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  > specified as p
2f750 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45  art of an UPDATE
2f760 20 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e   .      statemen
2f770 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61  t within.      a
2f780 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
2f790 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
2f7a0 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  d. ^(In other wo
2f7b0 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c  rds, the.      <
2f7c0 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
2f7d0 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
2f7e0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
2f7f0 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  me of the UPDATE
2f800 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c   is.      not al
2f810 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
2f820 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73  ggers.)^ ^Unless
2f830 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
2f840 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a  ich the trigger.
2f850 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65        is attache
2f860 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50  d is in the TEMP
2f870 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
2f880 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
2f890 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20  ed by the.      
2f8a0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2f8b0 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74  must reside in t
2f8c0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2f8d0 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
2f8e0 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77  table.      to w
2f8f0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
2f900 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
2f910 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
2f920 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
2f930 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64       unqualified
2f940 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2f950 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  le being updated
2f960 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
2f970 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20  the same way.   
2f980 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20     as it is for 
2f990 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
2f9a0 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
2f9b0 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
2f9c0 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20  MP database,.   
2f9d0 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e     then the main
2f9e0 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
2f9f0 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
2fa00 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
2fa10 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20   they were.     
2fa20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c   attached)...  <
2fa30 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
2fa40 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
2fa50 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
2fa60 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
2fa70 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74   UPDATE.      st
2fa80 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
2fa90 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
2faa0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
2fab0 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
2fac0 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41  clauses for UPDA
2fad0 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74  TE are unsupport
2fae0 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20  ed within.      
2faf0 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64  triggers, regard
2fb00 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
2fb10 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20  ilation options 
2fb20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
2fb30 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  Lite..</ul>..<h3
2fb40 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
2fb50 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61  and ORDER BY Cla
2fb60 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
2fb70 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  If SQLite is bui
2fb80 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  lt with the [SQL
2fb90 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2fba0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
2fbb0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2fbc0 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e  ion then the syn
2fbd0 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54  tax of the UPDAT
2fbe0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  E statement is e
2fbf0 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74  xtended.with opt
2fc00 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
2fc10 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
2fc20 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  )^ as follows:</
2fc30 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
2fc40 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
2fc50 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
2fc60 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41  ..<p>^If an UPDA
2fc70 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
2fc80 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
2fc90 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2fca0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
2fcb0 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64  .will be updated
2fcc0 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61   is found by eva
2fcd0 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f  luating the acco
2fce0 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73  mpanying express
2fcf0 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a  ion and casting.
2fd00 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
2fd10 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74   value. ^A negat
2fd20 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74  ive value is int
2fd30 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
2fd40 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20  limit"...<p>^If 
2fd50 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2fd60 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2fd70 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  o non-negative v
2fd80 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e  alue <i>N</i> an
2fd90 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61  d the.UPDATE sta
2fda0 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
2fdb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
2fdc0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
2fdd0 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t would be updat
2fde0 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63  ed in.the absenc
2fdf0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
2fe00 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
2fe10 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
2fe20 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74  e ORDER BY and t
2fe30 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69  he.first <i>N</i
2fe40 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20  > updated. ^(If 
2fe50 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2fe60 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e  ment also has an
2fe70 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a   OFFSET clause,.
2fe80 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
2fe90 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
2fea0 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e  nd cast to an in
2feb0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
2fec0 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65  the OFFSET.expre
2fed0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2fee0 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  to a non-negativ
2fef0 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e  e value <i>M</i>
2ff00 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
2ff10 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61   <i>M</i>.rows a
2ff20 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74  re skipped and t
2ff30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e  he following <i>
2ff40 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74  N</i> rows updat
2ff50 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c  ed instead.)^..<
2ff60 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
2ff70 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
2ff80 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
2ff90 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
2ffa0 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75   that.would be u
2ffb0 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62  pdated in the ab
2ffc0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
2ffd0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
2ffe0 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
2fff0 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
30000 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
30010 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
30020 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
30030 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61  termine .which a
30040 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61  re actually upda
30050 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
30060 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
30070 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
30080 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e  ement is used on
30090 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
300a0 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20  which.rows fall 
300b0 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
300c0 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77  . The order in w
300d0 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f  hich rows are mo
300e0 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72  dified is arbitr
300f0 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69  ary.and is not i
30100 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65  nfluenced by the
30110 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
30120 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  .)^..<tcl>.#####
30130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30170 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
30180 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20  n VACUUM vacuum 
30190 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76  VACUUM..Recursiv
301a0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76  eBubbleDiagram v
301b0 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c  acuum-stmt.</tcl
301c0 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43  >..<p>.  The VAC
301d0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75  UUM command rebu
301e0 69 6c 64 73 20 61 6e 20 65 6e 74 69 72 65 20 64  ilds an entire d
301f0 61 74 61 62 61 73 65 2c 20 70 61 63 6b 69 6e 67  atabase, packing
30200 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 73 0a   the content as.
30210 20 20 74 69 67 68 74 6c 79 20 61 73 20 70 6f 73    tightly as pos
30220 73 69 62 6c 65 2e 20 54 68 65 72 65 20 61 72 65  sible. There are
30230 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73   several .  reas
30240 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69  ons an applicati
30250 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73  on might do this
30260 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c  :..<ul>.  <li> <
30270 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74  p> ^Unless SQLit
30280 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20  e is running in 
30290 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c  "auto_vacuum=FUL
302a0 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20  L" mode, when a 
302b0 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e  large.     amoun
302c0 74 20 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c  t of data is del
302d0 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  eted from the da
302e0 74 61 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c  tabase file it l
302f0 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70  eaves behind emp
30300 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f  ty.     space, o
30310 72 20 22 66 72 65 65 22 20 64 61 74 61 62 61 73  r "free" databas
30320 65 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65  e pages. This me
30330 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
30340 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20   file might.    
30350 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20   be larger than 
30360 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61  strictly necessa
30370 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43  ry. ^Running VAC
30380 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74  UUM to rebuild t
30390 68 65 20 0a 20 20 20 20 20 64 61 74 61 62 61 73  he .     databas
303a0 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20  e reclaims this 
303b0 73 70 61 63 65 20 61 6e 64 20 72 65 64 75 63 65  space and reduce
303c0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
303d0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
303e0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72  ..  <li> <p> ^Fr
303f0 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20  equent inserts, 
30400 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c  updates, and del
30410 65 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74  etes can cause t
30420 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
30430 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20  .     to become 
30440 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65  fragmented - whe
30450 72 65 20 64 61 74 61 20 66 6f 72 20 61 20 73 69  re data for a si
30460 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  ngle table or in
30470 64 65 78 20 69 73 20 73 63 61 74 74 65 72 65 64  dex is scattered
30480 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68   .     around th
30490 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
304a0 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d   ^Running VACUUM
304b0 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 61   ensures that ea
304c0 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20  ch table and.   
304d0 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65    index is large
304e0 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67  ly stored contig
304f0 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68  uously within th
30500 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
30510 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63   ^In some.     c
30520 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79  ases, VACUUM may
30530 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65   also reduce the
30540 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69   number of parti
30550 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
30560 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61  s in.     the da
30570 74 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67  tabase, reducing
30580 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
30590 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
305a0 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20  urther...  <li> 
305b0 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74  <p> ^Normally, t
305c0 68 65 20 64 61 74 61 62 61 73 65 20 5b 70 61 67  he database [pag
305d0 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74  e_size] and whet
305e0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64  her or not the d
305f0 61 74 61 62 61 73 65 0a 20 20 20 20 20 73 75 70  atabase.     sup
30600 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75  ports [auto_vacu
30610 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66  um] must be conf
30620 69 67 75 72 65 64 20 62 65 66 6f 72 65 20 74 68  igured before th
30630 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
30640 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79  is.     actually
30650 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76   created. ^Howev
30660 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20  er, when not in 
30670 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
30680 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20  ] mode, the .   
30690 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e    [page_size] an
306a0 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75  d/or [auto_vacuu
306b0 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66  m] properties of
306c0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
306d0 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20  abase may be.   
306e0 20 20 63 68 61 6e 67 65 64 20 62 79 20 75 73 69    changed by usi
306f0 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a  ng the [page_siz
30700 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69  e pragma|page_si
30710 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20  ze]  and/or .   
30720 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70    [auto_vacuum|p
30730 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75  ragma auto_vacuu
30740 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74  m] pragmas and t
30750 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  hen immediately 
30760 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74  VACUUMing.     t
30770 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68  he database. ^Wh
30780 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65  en in [write-ahe
30790 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e  ad log] mode, on
307a0 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ly the [auto_vac
307b0 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72  uum].     suppor
307c0 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62  t property can b
307d0 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20  e changed using 
307e0 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  VACUUM..</ul>..<
307f0 70 3e 4f 6e 20 61 6c 6c 20 76 65 72 73 69 6f 6e  p>On all version
30800 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68 72 6f  s of SQLite thro
30810 75 67 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31  ugh [version 3.1
30820 34 2e 31 5d 2c 20 0a 74 68 65 20 56 41 43 55 55  4.1], .the VACUU
30830 4d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77  M command only w
30840 6f 72 6b 65 64 20 6f 6e 20 74 68 65 20 6d 61 69  orked on the mai
30850 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
30860 61 2e 20 20 0a 54 68 65 20 6f 70 74 69 6f 6e 61  a.  .The optiona
30870 6c 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61  l <yyterm>schema
30880 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61  -name</yyterm> a
30890 72 67 75 6d 65 6e 74 20 77 61 73 0a 61 63 63 65  rgument was.acce
308a0 70 74 65 64 20 62 79 20 73 69 6c 65 6e 74 6c 79  pted by silently
308b0 20 69 67 6e 6f 72 65 64 2e 20 20 42 65 67 69 6e   ignored.  Begin
308c0 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65  ning with SQLite
308d0 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e 30   [version 3.15.0
308e0 5d 2c 0a 61 6e 79 20 64 61 74 61 62 61 73 65 20  ],.any database 
308f0 6f 74 68 65 72 20 74 68 61 6e 20 54 45 4d 50 20  other than TEMP 
30900 63 61 6e 20 62 65 20 76 61 63 75 75 6d 65 64 20  can be vacuumed 
30910 62 79 20 70 72 6f 76 69 64 69 6e 67 20 69 74 73  by providing its
30920 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d  .<yyterm>schema-
30930 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 73  name</yyterm> as
30940 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20 49   an argument.  I
30950 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
30960 73 0a 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 64  s.omitted, the d
30970 65 66 61 75 6c 74 20 69 73 20 22 6d 61 69 6e 22  efault is "main"
30980 2e 20 20 54 68 65 20 73 63 68 65 6d 61 2d 6e 61  .  The schema-na
30990 6d 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74  me argument is t
309a0 68 65 0a 6e 61 6d 65 20 66 6f 6c 6c 6f 77 69 6e  he.name followin
309b0 67 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  g the AS keyword
309c0 20 69 6e 20 74 68 65 20 5b 41 54 54 41 43 48 5d   in the [ATTACH]
309d0 20 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 74 20   statement, not 
309e0 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74 68 65 20  the.name of the 
309f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a  database file...
30a00 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
30a10 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
30a20 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
30a30 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
30a40 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
30a50 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
30a60 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
30a70 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
30a80 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
30a90 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
30aa0 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
30ab0 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
30ac0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
30ad0 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
30ae0 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
30af0 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
30b00 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
30b10 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
30b20 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
30b30 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
30b40 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
30b50 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
30b60 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
30b70 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
30b80 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
30b90 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
30ba0 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
30bb0 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
30bc0 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
30bd0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
30be0 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
30bf0 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
30c00 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
30c10 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
30c20 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
30c30 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
30c40 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
30c50 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c  ..<p>^(As of SQL
30c60 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c  ite version 3.1,
30c70 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
30c80 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
30c90 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
30ca0 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
30cb0 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
30cc0 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
30cd0 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
30ce0 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
30cf0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
30d00 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
30d10 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
30d20 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
30d30 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
30d40 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
30d50 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
30d60 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
30d70 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
30d80 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
30d90 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
30da0 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
30db0 56 41 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72  VACUUM.  However
30dc0 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61  , using.[auto_va
30dd0 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74  cuum] can lead t
30de0 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73 65  o extra database
30df0 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74   file fragmentat
30e00 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f  ion.  And [auto_
30e10 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74  vacuum].does not
30e20 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c   compact partial
30e30 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
30e40 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
30e50 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a  as VACUUM does..
30e60 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  </p>..<h3>Restri
30e70 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ctions</h3>..<p>
30e80 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66  ^A VACUUM will f
30e90 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20  ail if there is 
30ea0 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  an open transact
30eb0 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ion, or if there
30ec0 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65   are one or.more
30ed0 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61 74   active SQL stat
30ee0 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69  ements when it i
30ef0 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 54 68 65 20  s run...<p>^The 
30f00 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
30f10 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
30f20 20 6f 62 73 63 75 72 65 20 65 72 72 6f 72 20 69   obscure error i
30f30 66 20 74 68 65 0a 5b 64 61 74 61 62 61 73 65 20  f the.[database 
30f40 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 63 6f 6e 74  connection] cont
30f50 61 69 6e 73 20 61 6e 79 20 5b 41 54 54 41 43 48  ains any [ATTACH
30f60 5d 2d 65 64 20 64 61 74 61 62 61 73 65 20 77 68  ]-ed database wh
30f70 6f 73 65 0a 73 63 68 65 6d 61 2d 6e 61 6d 65 20  ose.schema-name 
30f80 69 73 20 22 76 61 63 75 75 6d 5f 64 62 22 2e 20  is "vacuum_db". 
30f90 20 54 68 69 73 20 69 73 20 64 75 65 20 74 6f 20   This is due to 
30fa0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68  the fact that th
30fb0 65 0a 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e.VACUUM command
30fc0 20 5b 41 54 54 41 43 48 5d 2d 65 73 20 61 20 74   [ATTACH]-es a t
30fd0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 6e  emporary table n
30fe0 61 6d 65 64 20 22 76 61 63 75 75 6d 5f 64 62 22  amed "vacuum_db"
30ff0 0a 61 73 20 70 61 72 74 20 6f 66 20 69 74 73 20  .as part of its 
31000 70 72 6f 63 65 73 73 69 6e 67 2e 0a 0a 0a 3c 74  processing....<t
31010 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
31020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31060 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45  ##.Section {INDE
31070 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
31080 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  y {{INDEXED BY} 
31090 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a  {NOT INDEXED}}..
310a0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49  </tcl>.<p>^The I
310b0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
310c0 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c   forces the [SQL
310d0 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  ite query planne
310e0 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74  r] to use a.part
310f0 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64  icular named ind
31100 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d  ex on a [DELETE]
31110 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b  , [SELECT], or [
31120 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
31130 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  t..The INDEXED B
31140 59 20 70 68 72 61 73 65 20 69 73 20 61 6e 20 53  Y phrase is an S
31150 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
31160 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61  and.is not porta
31170 62 6c 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c  ble to other SQL
31180 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
31190 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65  s.</p>..<tcl>.Re
311a0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
311b0 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
311c0 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
311d0 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58  ..<p>^The "INDEX
311e0 45 44 20 42 59 20 3c 79 79 74 65 72 6d 3e 69 6e  ED BY <yyterm>in
311f0 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  dex-name</yyterm
31200 3e 22 20 70 68 72 61 73 65 20 73 70 65 63 69 66  >" phrase specif
31210 69 65 73 20 0a 74 68 61 74 20 74 68 65 20 6e 61  ies .that the na
31220 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62  med index.must b
31230 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20  e used in order 
31240 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65  to look up value
31250 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69  s on the precedi
31260 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 3c 79  ng table..^If <y
31270 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65  yterm>index-name
31280 3c 2f 79 79 74 65 72 6d 3e 20 64 6f 65 73 20 6e  </yyterm> does n
31290 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e  ot exist or cann
312a0 6f 74 20 62 65 20 75 73 65 64 20 0a 66 6f 72 20  ot be used .for 
312b0 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 20  the query, then 
312c0 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20  the preparation 
312d0 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
312e0 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68  ment fails..^(Th
312f0 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  e "NOT INDEXED" 
31300 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
31310 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73   that no index s
31320 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65  hall be used whe
31330 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20  n.accessing the 
31340 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c  preceding table,
31350 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
31360 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ed indices creat
31370 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20  e by.UNIQUE and 
31380 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
31390 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65  traints.  Howeve
313a0 72 2c 20 74 68 65 20 5b 72 6f 77 69 64 5d 0a 63  r, the [rowid].c
313b0 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64  an still be used
313c0 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72   to look up entr
313d0 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e  ies even when "N
313e0 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73  OT INDEXED" is s
313f0 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a  pecified.)^</p>.
31400 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
31410 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
31420 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
31430 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
31440 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
31450 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
31460 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
31470 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
31480 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
31490 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
314a0 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
314b0 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
314c0 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
314d0 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
314e0 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
314f0 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
31500 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
31510 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68  sed as such..^Th
31520 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
31530 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76  use does not giv
31540 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  e the optimizer 
31550 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63  hints about whic
31560 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20  h index.to use; 
31570 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74  it gives the opt
31580 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65  imizer a require
31590 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e  ment of which in
315a0 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20  dex to use..^If 
315b0 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
315c0 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f  zer is unable to
315d0 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73   use the index s
315e0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a  pecified by the.
315f0 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c  INDEX BY clause,
31600 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
31610 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
31620 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
31630 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
31640 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f  clause is <em>no
31650 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20  t</em> intended 
31660 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e  for use in tunin
31670 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63  g.the performanc
31680 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  e of a query.  T
31690 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65  he intent of the
316a0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
316b0 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61  se is.to raise a
316c0 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20   run-time error 
316d0 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e  if a schema chan
316e0 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70  ge, such as drop
316f0 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67  ping or.creating
31700 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65   an index, cause
31710 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  s the query plan
31720 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73   for a time-sens
31730 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63  itive query.to c
31740 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45  hange.  The INDE
31750 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
31760 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c   designed to hel
31770 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72  p detect.undesir
31780 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20  able query plan 
31790 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72  changes during r
317a0 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e  egression testin
317b0 67 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 20 0a  g..Application .
317c0 64 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61  developers are a
317d0 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69  dmonished to omi
317e0 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44  t all use of IND
317f0 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61  EXED BY during.a
31800 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67  pplication desig
31810 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  n, implementatio
31820 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20  n, testing, and 
31830 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45  tuning.  If.INDE
31840 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65 20  XED BY is to be 
31850 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20  used at all, it 
31860 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74  should be insert
31870 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a 65  ed at the very.e
31880 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f  nd of the develo
31890 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68  pment process wh
318a0 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e  en "locking down
318b0 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a  " a design.</p>.
318c0 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f  .<h3>See Also:</
318d0 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  h3>..<ol>.<li><p
318e0 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61 6e  >The [query plan
318f0 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20 64  ner checklist] d
31900 65 73 63 72 69 62 65 73 20 73 74 65 70 73 20 74  escribes steps t
31910 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a  hat application.
31920 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  developers shoul
31930 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68  d following to h
31940 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65 72  elp resolve quer
31950 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65  y planner proble
31960 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20 74  ms..Notice the t
31970 68 61 74 20 74 68 65 20 75 73 65 20 6f 66 20 49  hat the use of I
31980 4e 44 45 58 45 44 20 42 59 20 69 73 20 61 20 6c  NDEXED BY is a l
31990 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20 62  ast resort, to b
319a0 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e  e used only.when
319b0 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73 75   all other measu
319c0 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c  res fail.</p>..<
319d0 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74  li><p>[upluscont
319e0 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 22 2b  rol|The unary "+
319f0 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20  " operator].can 
31a00 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 71 75  be used to disqu
31a10 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20 74  alify terms in t
31a20 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
31a30 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64 69  from use by indi
31a40 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73 65  ces..Careful use
31a50 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e 20   of unary + can 
31a60 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20 70  sometimes help p
31a70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65 72 79  revent the query
31a80 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68   planner from.ch
31a90 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e  oosing a poor in
31aa0 64 65 78 20 77 69 74 68 6f 75 74 20 72 65 73 74  dex without rest
31ab0 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75 73  ricting it to us
31ac0 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69 63  ing one specific
31ad0 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c 20   index..Careful 
31ae0 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61  placement of una
31af0 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20 69  ry + operators i
31b00 73 20 61 20 62 65 74 74 65 72 20 6d 65 74 68 6f  s a better metho
31b10 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e  d for controllin
31b20 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65 73  g .which indices
31b30 20 61 72 65 20 75 73 65 64 20 62 79 20 61 20 71   are used by a q
31b40 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  uery.</p>..<li><
31b50 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  p>The [sqlite3_s
31b60 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f  tmt_status()] C/
31b70 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f  C++ interface to
31b80 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65 0a  gether with the.
31b90 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
31ba0 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50  US_FULLSCAN_STEP
31bb0 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54  ] and [SQLITE_ST
31bc0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76  MTSTATUS_SORT] v
31bd0 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64  erbs.can be used
31be0 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72 75   to detect at ru
31bf0 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53  n-time when an S
31c00 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  QL statement is 
31c10 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63  not.making effec
31c20 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69  tive use of indi
31c30 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69  ces.  Many appli
31c40 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66  cations may pref
31c50 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73  er to.use the [s
31c60 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
31c70 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  us()] interface 
31c80 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78 20  to detect index 
31c90 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74 68  misuse.rather th
31ca0 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  an the INDEXED B
31cb0 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69 62  Y phrase describ
31cc0 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f  ed here.</p>.</o
31cd0 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  l>..<tcl>.######
31ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31d20 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74  #######.# A list
31d30 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41   of keywords.  A
31d40 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73   asterisk occurs
31d50 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f   after the keywo
31d60 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23  rd if it is on.#
31d70 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69   the fallback li
31d80 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72  st..#.set keywor
31d90 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
31da0 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49     ABORT.   ACTI
31db0 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54  ON.   ADD.   AFT
31dc0 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54  ER.   ALL.   ALT
31dd0 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20  ER.   ANALYZE.  
31de0 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
31df0 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20 41  C.   ATTACH.   A
31e00 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
31e10 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a  BEFORE.   BEGIN.
31e20 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59     BETWEEN.   BY
31e30 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20 43  .   CASCADE.   C
31e40 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43  ASE.   CAST.   C
31e50 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a  HECK.   COLLATE.
31e60 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d     COLUMN.   COM
31e70 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a  MIT.   CONFLICT.
31e80 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
31e90 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
31ea0 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45  .   CURRENT_DATE
31eb0 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
31ec0 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
31ed0 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53  STAMP.   DATABAS
31ee0 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20  E.   DEFAULT.   
31ef0 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46 45  DEFERRED.   DEFE
31f00 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45  RRABLE.   DELETE
31f10 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54 41  .   DESC.   DETA
31f20 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20  CH.   DISTINCT. 
31f30 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20    DROP.   END.  
31f40 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20   EACH.   ELSE.  
31f50 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50   ESCAPE.   EXCEP
31f60 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20  T.   EXCLUSIVE. 
31f70 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c    EXISTS.   EXPL
31f80 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46  AIN.   FAIL.   F
31f90 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20  OR.   FOREIGN.  
31fa0 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20   FROM.   FULL.  
31fb0 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20   GLOB.   GROUP. 
31fc0 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20    HAVING.   IF. 
31fd0 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45    IGNORE.   IMME
31fe0 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49  DIATE.   IN.   I
31ff0 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a  NDEX.   INDEXED.
32000 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20     INITIALLY.   
32010 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a  INNER.   INSERT.
32020 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e     INSTEAD.   IN
32030 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a  TERSECT.   INTO.
32040 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a     IS.   ISNULL.
32050 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20     JOIN.   KEY. 
32060 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20    LEFT.   LIKE. 
32070 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48    LIMIT.   MATCH
32080 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e  .   NATURAL.   N
32090 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e  O.   NOT.   NOTN
320a0 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
320b0 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f  F.   OFFSET.   O
320c0 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52  N.   OR.   ORDER
320d0 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41  .   OUTER.   PLA
320e0 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50  N.   PRAGMA.   P
320f0 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a  RIMARY.   QUERY.
32100 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 43 55     RAISE.   RECU
32110 52 53 49 56 45 0a 20 20 20 52 45 46 45 52 45 4e  RSIVE.   REFEREN
32120 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20  CES.   REGEXP.  
32130 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45   REINDEX.   RELE
32140 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20  ASE.   RENAME.  
32150 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54   REPLACE.   REST
32160 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20  RICT.   RIGHT.  
32170 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57   ROLLBACK.   ROW
32180 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20  .   SAVEPOINT.  
32190 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20   SELECT.   SET. 
321a0 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a    TABLE.   TEMP.
321b0 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20     TEMPORARY.   
321c0 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52  THEN.   TO.   TR
321d0 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49  ANSACTION.   TRI
321e0 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20  GGER.   UNION.  
321f0 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54   UNIQUE.   UPDAT
32200 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41  E.   USING.   VA
32210 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20  CUUM.   VALUES. 
32220 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41    VIEW.   VIRTUA
32230 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57 49 54  L.   WITH.   WIT
32240 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20 20 20  HOUT.   WHEN.   
32250 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74  WHERE.}]..hd_put
32260 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70  s {<DIV class="p
32270 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65  df_section">}.Se
32280 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65  ction {SQLite Ke
32290 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73  ywords} keywords
322a0 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d   {{*SQL keyword}
322b0 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
322c0 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e  .hd_puts {</DIV>
322d0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
322e0 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70   SQL standard sp
322f0 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20 6e  ecifies a huge n
32300 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64  umber of keyword
32310 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a  s which may not.
32320 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6e  be used as the n
32330 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20  ames of tables, 
32340 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73  indices, columns
32350 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73 65  , databases, use
32360 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69  r-defined.functi
32370 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c  ons, collations,
32380 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
32390 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f  odules, or any o
323a0 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63  ther named objec
323b0 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b  t..The list of k
323c0 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f  eywords is so lo
323d0 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f 70  ng that few peop
323e0 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20  le can remember 
323f0 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f  them all..For mo
32400 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75  st SQL code, you
32410 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73 20  r safest bet is 
32420 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79  to never use any
32430 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
32440 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61  e.word as the na
32450 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66  me of a user-def
32460 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e  ined object.</p>
32470 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74  ..<p>If you want
32480 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72   to use a keywor
32490 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75  d as a name, you
324a0 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69   need to quote i
324b0 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66 6f  t.  There.are fo
324c0 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69  ur ways of quoti
324d0 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53  ng keywords in S
324e0 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  QLite:</p>..<p>.
324f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
32500 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61  ble>.<tr>.<td va
32510 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b  lign="top"><b>'k
32520 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e  eyword'</b></td>
32530 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
32540 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
32550 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71  word in single q
32560 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69 6e  uotes is a strin
32570 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c  g literal.</td><
32580 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
32590 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22  align="top"><b>"
325a0 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64  keyword"</b></td
325b0 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
325c0 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f  ^A keyword in do
325d0 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61  uble-quotes is a
325e0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74  n identifier.</t
325f0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
32600 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
32610 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23  b>&#91;keyword&#
32620 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  93;</b></td><td>
32630 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
32640 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
32650 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
32660 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  s is .        an
32670 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
32680 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
32690 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
326a0 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
326b0 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
326c0 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64  by MS Access and
326d0 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20   SQL Server and 
326e0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
326f0 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
32700 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
32710 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
32720 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
32730 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72  "><b>&#96;keywor
32740 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d&#96;</b></td><
32750 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
32760 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
32770 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e  d in grave accen
32780 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39  ts (ASCII code 9
32790 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  6) is .        a
327a0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
327b0 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
327c0 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
327d0 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
327e0 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
327f0 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73   by MySQL and is
32800 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
32810 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
32820 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
32830 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  td></tr>.</table
32840 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
32850 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73  </p>..<p>For res
32860 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e  ilience when con
32870 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73  fronted with his
32880 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74  torical SQL stat
32890 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77  ements, SQLite.w
328a0 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65  ill sometimes be
328b0 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72  nd the quoting r
328c0 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a  ules above:</p>.
328d0 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  .<ul>.<li><p>^If
328e0 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69   a keyword in si
328f0 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  ngle.quotes (ex:
32900 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72   <b>'key'</b> or
32910 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20   <b>'glob'</b>) 
32920 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
32930 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64  text where.an id
32940 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f  entifier is allo
32950 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61 20  wed but where a 
32960 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
32970 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74  s not allowed, t
32980 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73  hen.the token is
32990 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62   understood to b
329a0 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e an identifier 
329b0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74 72  instead of a str
329c0 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70  ing literal..</p
329d0 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  ></li>..<li><p>^
329e0 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
329f0 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65  double.quotes (e
32a00 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20  x: <b>"key"</b> 
32a10 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e  or <b>"glob"</b>
32a20 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
32a30 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74 20  ontext where.it 
32a40 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76  cannot be resolv
32a50 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66  ed to an identif
32a60 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61 20  ier but where a 
32a70 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69  string literal.i
32a80 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20  s allowed, then 
32a90 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
32aa0 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20  erstood to be a 
32ab0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
32ac0 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65  nstead.of an ide
32ad0 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69  ntifier.</p></li
32ae0 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67  >.</ul>..<p>Prog
32af0 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74  rammers are caut
32b00 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65  ioned not to use
32b10 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74 69   the two excepti
32b20 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69 6e  ons described in
32b30 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62 75  .the previous bu
32b40 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61  llets.  We empha
32b50 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20 65  size that they e
32b60 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61  xist only so tha
32b70 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f  t old.and ill-fo
32b80 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  rmed SQL stateme
32b90 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72  nts will run cor
32ba0 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20  rectly.  Future 
32bb0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
32bc0 74 65 20 6d 69 67 68 74 20 72 61 69 73 65 20 65  te might raise e
32bd0 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66  rrors instead of
32be0 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d   accepting the m
32bf0 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65  alformed.stateme
32c00 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20 74  nts covered by t
32c10 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62  he exceptions ab
32c20 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51  ove.</p>..<p>.SQ
32c30 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65  Lite adds new ke
32c40 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65  ywords from time
32c50 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74   to time when it
32c60 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65   takes on new fe
32c70 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72  atures..So to pr
32c80 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20  event your code 
32c90 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65  from being broke
32ca0 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61  n by future enha
32cb0 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68  ncements, you sh
32cc0 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75  ould.normally qu
32cd0 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69  ote any identifi
32ce0 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e  er that is an En
32cf0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77  glish language w
32d00 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75  ord, even if.you
32d10 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e   do not have to.
32d20 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c  .</p>..<p>.The l
32d30 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20  ist below shows 
32d40 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79  all possible key
32d50 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61 6e  words used by an
32d60 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74  y build of.SQLit
32d70 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  e regardless of 
32d80 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  [compile-time op
32d90 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72  tions].  .Most r
32da0 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67  easonable config
32db0 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73  urations use mos
32dc0 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73  t or all of thes
32dd0 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20  e keywords,.but 
32de0 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61  some keywords ma
32df0 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65  y be omitted whe
32e00 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  n SQL language f
32e10 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73 61  eatures are.disa
32e20 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65  bled..^(Regardle
32e30 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c  ss of the compil
32e40 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61  e-time configura
32e50 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69  tion, any identi
32e60 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74  fier that is not
32e70 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   on.the followin
32e80 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b  g <tcl>hd_puts [
32e90 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64  llength $keyword
32ea0 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65  _list]</tcl> ele
32eb0 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74  ment.list is not
32ec0 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68   a keyword to th
32ed0 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20  e SQL parser in 
32ee0 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62  SQLite:.</p>..<b
32ef0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
32f00 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 3c  e width="100%"><
32f10 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c  tr>.<td align="l
32f20 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  eft" valign="top
32f30 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c  " width="20%">.<
32f40 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e  tcl>.set n [llen
32f50 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
32f60 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65  t].set nCol 5.se
32f70 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24  t nRow [expr {($
32f80 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c  n+$nCol-1)/$nCol
32f90 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61  }].set i 0.forea
32fa0 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64  ch word $keyword
32fb0 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24 69  _list {.  if {$i
32fc0 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68  ==$nRow} {.    h
32fd0 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64  d_puts "</td><td
32fe0 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20   valign=\"top\" 
32ff0 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77  align=\"left\" w
33000 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20  idth=\"20%\">". 
33010 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65     set i 1.  } e
33020 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69  lse {.    incr i
33030 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22  .  }.  hd_puts "
33040 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c  $word<br>\n".}.<
33050 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  /tcl>.</td></tr>
33060 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
33070 75 6f 74 65 3e 29 5e 0a                          uote>)^.