Documentation Source Text

Hex Artifact Content
Login

Artifact 05f475a54db03c319c7acdca9135a21da4ef0959:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
1210: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
1220: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
1230: 3c 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70  <tr><td>.<em>Imp
1240: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d  ortant Note:</em
1250: 3e 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42  >.The 'ALTER TAB
1260: 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f  LE ... RENAME TO
1270: 20 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f   ...' command do
1280: 65 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63  es not update ac
1290: 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20  tion.statements 
12a0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
12b0: 6f 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  or SELECT statem
12c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77  ents within view
12d0: 73 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20  s..If the table 
12e0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73  being renamed is
12f0: 20 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d   referenced from
1300: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1310: 20 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20   or views,.then 
1320: 74 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61  those triggers a
1330: 6e 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65  nd views must be
1340: 20 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63   dropped and rec
1350: 72 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c  reated separatel
1360: 79 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  y.by the applica
1370: 74 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  tion..</td></tr>
1380: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1390: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  quote>..<p>^If [
13a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13b0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66  traints] are .[f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
13d0: 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68  ma | enabled] wh
13e0: 65 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65  en a table is re
13f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a  named, then any.
1400: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1410: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1420: 20 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79   clauses] in any
1430: 20 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74   table (either t
1440: 68 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he.table being r
1450: 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f  enamed or some o
1460: 74 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74  ther table).that
1470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61   refer to the ta
1480: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1490: 64 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74  d are modified t
14a0: 6f 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20  o refer .to the 
14b0: 72 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79  renamed table by
14c0: 20 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a   its new name...
14d0: 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c  <p> ^The ADD COL
14e0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
14f0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
1500: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
1510: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68  sting table..^Th
1520: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
1530: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
1540: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1550: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1560: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1570: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1580: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1590: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
15a0: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
15b0: 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  .^(The new colum
15c0: 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f  n may take any o
15d0: 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d  f the forms perm
15e0: 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52  issible in a [CR
15f0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
1600: 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20  ement, with the 
1610: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
1620: 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c  ctions:)^.<ul>.<
1630: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1640: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1650: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1660: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1670: 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f  /li>.<li>^The co
1680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76  lumn may not hav
1690: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
16a0: 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  e of CURRENT_TIM
16b0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  E, CURRENT_DATE,
16c0: 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49   .    CURRENT_TI
16d0: 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65  MESTAMP, or an e
16e0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
16f0: 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c  entheses.</li>.<
1700: 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  li>^If a NOT NUL
1710: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  L constraint is 
1720: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1730: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
1740: 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75  have a.    defau
1750: 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74  lt value other t
1760: 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49  han NULL..<li>^I
1770: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1780: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1790: 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72  [foreign_keys pr
17a0: 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20  agma | enabled] 
17b0: 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e  and.    a column
17c0: 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e   with a [foreign
17d0: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
17e0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d  FERENCES clause]
17f0: 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74  .    is added, t
1800: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1810: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1820: 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75  lue of NULL..</u
1830: 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73  l>..<p>^Note als
1840: 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69  o that when addi
1850: 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73  ng a [CHECK cons
1860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45  traint], the CHE
1870: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73  CK constraint.is
1880: 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69   not tested agai
1890: 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  nst preexisting 
18a0: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
18b0: 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73  e..^This can res
18c0: 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74  ult in a table t
18d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74  hat contains dat
18e0: 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f  a that.is in vio
18f0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48  lation of the CH
1900: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ECK constraint. 
1910: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
1920: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
1930: 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64  .change to valid
1940: 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ate CHECK constr
1950: 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72  aints as they ar
1960: 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  e added.</p>..<p
1970: 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  > The execution 
1980: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
1990: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
19a0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
19b0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
19c0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
19d0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
19e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
19f0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1a00: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1a10: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1a20: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1a30: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1a40: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1a50: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1a60: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1a70: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1a80: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
1a90: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
1aa0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
1ab0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1ac0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1ad0: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1ae0: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1af0: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1b00: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1b10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1b20: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1b30: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1b40: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1b50: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1b60: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1b70: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1b80: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1b90: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1ba0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1bb0: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1bc0: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1bd0: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1be0: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1bf0: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1c00: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1c10: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1c20: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1c30: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1c40: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1c50: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1c60: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1c70: 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72  <li><p>.Remember
1c80: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61   the format of a
1c90: 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74  ll indexes and t
1ca0: 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1cb0: 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e  ed with table X.
1cc0: 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f  .This informatio
1cd0: 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64  n will be needed
1ce0: 20 69 6e 20 73 74 65 70 20 37 20 62 65 6c 6f 77   in step 7 below
1cf0: 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f  .  One way to do
1d00: 20 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20   this is.to run 
1d10: 61 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65  a query like the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45   following:.SELE
1d30: 43 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  CT type, sql FRO
1d40: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1d50: 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27  WHERE tbl_name='
1d60: 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65  X'...<li><p>.Use
1d70: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
1d80: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e  to construct a n
1d90: 65 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22  ew table "new_X"
1da0: 20 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20   that is in the 
1db0: 64 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20  desired.revised 
1dc0: 66 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20  format of table 
1dd0: 58 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  X.  Make sure th
1de0: 61 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77  at the name "new
1df0: 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c  _X" does not col
1e00: 6c 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78  lide.with any ex
1e10: 69 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d  isting table nam
1e20: 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c  e, of course...<
1e30: 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20  li><p>.Transfer 
1e40: 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69  content from X i
1e50: 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20  nto new_X using 
1e60: 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65  a statement.like
1e70: 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65  : INSERT INTO ne
1e80: 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46  w_X SELECT ... F
1e90: 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ROM X...<li><p>.
1ea0: 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  If foreign key c
1eb0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 65  onstraints are e
1ec0: 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20  nabled,.disable 
1ed0: 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41 47  them using [PRAG
1ee0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
1ef0: 7c 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e  | PRAGMA foreign
1f00: 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69  _keys=OFF]...<li
1f10: 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c  ><p>.Drop the ol
1f20: 64 20 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f  d table X:  [DRO
1f30: 50 20 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54  P TABLE | DROP T
1f40: 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ABLE X]...<li><p
1f50: 3e 0a 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d  >.Change the nam
1f60: 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20  e of new_X to X 
1f70: 75 73 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42  using: ALTER TAB
1f80: 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20  LE new_X RENAME 
1f90: 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55  TO X...<li><p>.U
1fa0: 73 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  se [CREATE INDEX
1fb0: 5d 20 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52  ] and [CREATE TR
1fc0: 49 47 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73  IGGER] to recons
1fd0: 74 72 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e  truct indexes an
1fe0: 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
1ff0: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
2000: 20 58 2e 20 20 50 65 72 68 61 70 73 20 75 73 65   X.  Perhaps use
2010: 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20   the old format 
2020: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 73 20  of the triggers 
2030: 61 6e 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65  and.indexes save
2040: 64 20 66 72 6f 6d 20 73 74 65 70 20 31 20 61 62  d from step 1 ab
2050: 6f 76 65 20 61 73 20 61 20 67 75 69 64 65 2c 20  ove as a guide, 
2060: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61  making changes a
2070: 73 20 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f  s appropriate.fo
2080: 72 20 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e  r the alteration
2090: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
20a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
20b0: 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69  aints were origi
20c0: 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 20 28 70  nally enabled (p
20d0: 72 69 6f 72 20 74 6f 0a 73 74 65 70 20 34 29 20  rior to.step 4) 
20e0: 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41  then run [PRAGMA
20f0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2100: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2110: 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68  at the schema.ch
2120: 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65  ange did not bre
2130: 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b  ak any foreign k
2140: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
2150: 61 6e 64 20 72 75 6e 0a 5b 50 52 41 47 4d 41 20  and run.[PRAGMA 
2160: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
2170: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2180: 79 73 3d 4f 4e 5d 20 74 6f 20 72 65 2d 65 6e 61  ys=ON] to re-ena
2190: 62 6c 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  ble foreign key.
21a0: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 3c 6c  constraints...<l
21b0: 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77  i><p>If any view
21c0: 73 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65  s refer to table
21d0: 20 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74   X in a way that
21e0: 20 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20   is affected by 
21f0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2200: 65 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f  e, then drop tho
2210: 73 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b  se views using [
2220: 44 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72  DROP VIEW] and r
2230: 65 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74  ecreate them.wit
2240: 68 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67  h whatever chang
2250: 65 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79  es are necessary
2260: 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20   to accommodate 
2270: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
2280: 65 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20  e.using [CREATE 
2290: 56 49 45 57 5d 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c  VIEW]...</ol>..<
22a0: 70 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20  p>The procedure 
22b0: 61 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74  above is complet
22c0: 65 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20  ely general and 
22d0: 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69  will work even i
22e0: 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61  f the.schema cha
22f0: 6e 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69  nge causes the i
2300: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65  nformation store
2310: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  d in the table t
2320: 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65  o change..So the
2330: 20 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20   full procedure 
2340: 61 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72  above is appropr
2350: 69 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e  iate for droppin
2360: 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e  g a column,.chan
2370: 67 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f  ging the order o
2380: 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e  f columns, addin
2390: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20  g or removing a 
23a0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
23b0: 74 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59  t.or PRIMARY KEY
23c0: 2c 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f  , adding CHECK o
23d0: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
23e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
23f0: 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69  aints,.or changi
2400: 6e 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ng the datatype 
2410: 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f  for a column, fo
2420: 72 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  r example.  Howe
2430: 76 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61  ver, a simpler.a
2440: 6e 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64  nd faster proced
2450: 75 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ure can optional
2460: 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73  ly be used for.s
2470: 6f 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ome changes that
2480: 20 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68   do no affect th
2490: 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e  e on-disk conten
24a0: 74 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68  t in any way..Th
24b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70  e following simp
24c0: 6c 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73  ler procedure is
24d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
24e0: 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20   removing.CHECK 
24f0: 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f  or FOREIGN KEY o
2500: 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  r NOT NULL const
2510: 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67  raints,.renaming
2520: 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64   columns, or add
2530: 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20  ing or removing 
2540: 6f 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61  or changing defa
2550: 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20  ult values on.a 
2560: 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c  column...<ol>.<l
2570: 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d  i><p> Run [PRAGM
2580: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2590: 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  ] to determine t
25a0: 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d  he current schem
25b0: 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a.version number
25c0: 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20 77  .  This number w
25d0: 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66 6f  ill be needed fo
25e0: 72 20 73 74 65 70 20 35 20 62 65 6c 6f 77 2e 0a  r step 5 below..
25f0: 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61 74  .<li><p> Activat
2600: 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67  e schema editing
2610: 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20   using .[PRAGMA 
2620: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20  writable_schema 
2630: 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c  | PRAGMA writabl
2640: 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c  e_schema=ON]...<
2650: 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55  li><p> Run an [U
2660: 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
2670: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 64   to change the d
2680: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62  efinition of tab
2690: 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c  le X.in the [sql
26a0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
26b0: 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69 74  ]: .UPDATE sqlit
26c0: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
26d0: 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65 3d  =... WHERE type=
26e0: 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65  'table' AND name
26f0: 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75  ='X';.<p><em>Cau
2700: 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69  tion:</em>  Maki
2710: 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20 74  ng a change to t
2720: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2730: 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73   table like this
2740: 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65   will.render the
2750: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
2760: 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65  t and unreadable
2770: 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   if the change c
2780: 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61 78  ontains.a syntax
2790: 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20 73   error.  It is s
27a0: 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63 61  uggested that ca
27b0: 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f 66  reful testing of
27c0: 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61 74   the UPDATE.stat
27d0: 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e  ement be done on
27e0: 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61 6e   a separate blan
27f0: 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f 72  k database prior
2800: 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a   to using it on.
2810: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  a database conta
2820: 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20  ining important 
2830: 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49  data...<li><p> I
2840: 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f 20  f the change to 
2850: 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66 66  table X also aff
2860: 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c 65  ects other table
2870: 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72 0a  s or indexes or.
2880: 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69 65  triggers are vie
2890: 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d 61  ws within schema
28a0: 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44 41  , then run [UPDA
28b0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74  TE] statements t
28c0: 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f  o modify.those o
28d0: 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64 65  ther tables inde
28e0: 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74 6f  xes and views to
28f0: 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  o.  For example,
2900: 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a   if the name of.
2910: 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73  a column changes
2920: 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45  , all FOREIGN KE
2930: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  Y constraints, t
2940: 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65 73  riggers, indexes
2950: 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74  , and.views that
2960: 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20 63   refer to that c
2970: 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f  olumn must be mo
2980: 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43  dified..<p><em>C
2990: 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e  aution:</em>  On
29a0: 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67  ce again, making
29b0: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
29c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 74  sqlite_master .t
29d0: 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77  able like this w
29e0: 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20 64  ill render the d
29f0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20  atabase corrupt 
2a00: 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69  and unreadable i
2a10: 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63 6f  f the .change co
2a20: 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e  ntains an error.
2a30: 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73 74    Carefully test
2a40: 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65 20   of this entire 
2a50: 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20 73  procedure.on a s
2a60: 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61 74  eparate test dat
2a70: 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75  abase prior to u
2a80: 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74  sing it on.a dat
2a90: 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67  abase containing
2aa0: 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 20   important data 
2ab0: 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b  and/or make back
2ac0: 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70  up copies of.imp
2ad0: 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65 73  ortant databases
2ae0: 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
2af0: 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  g this procedure
2b00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65  ...<li><p> Incre
2b10: 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61 20  ment the schema 
2b20: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75  version number u
2b30: 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63 68  sing.[PRAGMA sch
2b40: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52  ema_version | PR
2b50: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2b60: 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20 69  ion=X] where X i
2b70: 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  s one.more than 
2b80: 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20 76  the old schema v
2b90: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
2ba0: 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61 62  und in step 2 ab
2bb0: 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69  ove...<li><p> Di
2bc0: 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64 69  sable schema edi
2bd0: 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41  ting using .[PRA
2be0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2bf0: 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69  ema | PRAGMA wri
2c00: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
2c10: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74  ]...<li><p> (Opt
2c20: 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41 47  ional) Run [PRAG
2c30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c40: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2c50: 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  at the.schema ch
2c60: 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64 61  anges did not da
2c70: 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73  mage the databas
2c80: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 74 20  e..</ol>..<p>It 
2c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61  is important tha
2ca0: 74 20 62 6f 74 68 20 6f 66 20 74 68 65 20 61 62  t both of the ab
2cb0: 6f 76 65 20 70 72 6f 63 65 64 75 72 65 73 20 62  ove procedures b
2cc0: 65 20 72 75 6e 20 66 72 6f 6d 20 77 69 74 68 69  e run from withi
2cd0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
2ce0: 74 6f 20 70 72 65 76 65 6e 74 20 6f 74 68 65 72  to prevent other
2cf0: 20 70 72 6f 63 65 73 73 65 73 20 66 72 6f 6d 20   processes from 
2d00: 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 64 61  accessing the da
2d10: 74 61 62 61 73 65 20 66 69 6c 65 0a 77 68 69 6c  tabase file.whil
2d20: 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  e the schema cha
2d30: 6e 67 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 74  nge is only part
2d40: 69 61 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 2e 20  ially complete. 
2d50: 20 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75   ..<p>If some fu
2d60: 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  ture version of 
2d70: 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2d80: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70 61  ALTER TABLE capa
2d90: 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73 65  bilities, .those
2da0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77 69   capabilities wi
2db0: 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 75  ll very likely u
2dc0: 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  se one of the tw
2dd0: 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75 74  o procedures.out
2de0: 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74  lined above...<t
2df0: 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68  cl>.#  One of th
2e00: 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23  e reasons that.#
2e10: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2e20: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2e30: 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41  rt more ALTER TA
2e40: 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73  BLE capabilities
2e50: 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20 70   is that.# the p
2e60: 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61  rocedure shown a
2e70: 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75 6c  bove is difficul
2e80: 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f  t to automate fo
2e90: 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  r an arbitrary s
2ea0: 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75  chema..# Particu
2eb0: 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d  larly troublesom
2ec0: 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65 6e  e areas are iden
2ed0: 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77  tifying all view
2ee0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2ef0: 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73  h.# table X in s
2f00: 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74 69  tep 1 and creati
2f10: 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64  ng new views and
2f20: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 61   triggers that a
2f30: 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20  re compatible.# 
2f40: 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65 64  with the altered
2f50: 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c   schema for tabl
2f60: 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20  e X in step 6.  
2f70: 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20 62  It is a tricky b
2f80: 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72  ut solvable.# pr
2f90: 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20  oblem to create 
2fa0: 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70  code that will p
2fb0: 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73  erform the steps
2fc0: 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72   above .# for "r
2fd0: 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d  easonable" schem
2fe0: 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e  as commonly foun
2ff0: 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
3000: 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78 69  .# But there exi
3010: 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63  st malevolent sc
3020: 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a  hemas for which.
3030: 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61 72  # these steps ar
3040: 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69  e maddeningly di
3050: 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f  fficult to do co
3060: 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72  rrectly.  Rather
3070: 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41   than create.# A
3080: 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74 75  LTER TABLE featu
3090: 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f  res that work co
30a0: 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66  rrectly 99.9% of
30b0: 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f   the time but po
30c0: 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74  ssibly.# corrupt
30d0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74   the schema on t
30e0: 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74  he other 0.1%, t
30f0: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
3100: 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64 65  pers have decide
3110: 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65 20  d.# to push the 
3120: 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65  problem into the
3130: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
3140: 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73  ain, where it is
3150: 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20 74   much easier.# t
3160: 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a  o solve..</tcl>.
3170: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
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: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
31d0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
31e0: 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73   ANALYZE..Recurs
31f0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
3200: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f   analyze-stmt.</
3210: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
3220: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
3230: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
3240: 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  s about tables a
3250: 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73  nd.indices and s
3260: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  tores the collec
3270: 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ted information.
3280: 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  in [internal tab
3290: 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  les] of the data
32a0: 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71  base where the q
32b0: 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
32c0: 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e  an.access the in
32d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73  formation and us
32e0: 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b  e it to help mak
32f0: 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  e better query p
3300: 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e  lanning choices.
3310: 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  .^If no argument
3320: 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c  s are given, all
3330: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
3340: 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64  ses are.analyzed
3350: 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  .  ^If a databas
3360: 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  e name is given 
3370: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3380: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3390: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
33a0: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
33b0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
33c0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
33d0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
33e0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
33f0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3400: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3410: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3420: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3430: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3440: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3450: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3460: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3470: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3480: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3490: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
34a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
34b0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
34c0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
34d0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
34e0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
34f0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3500: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
3510: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
3520: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
3540: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
3550: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
3560: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
3570: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
3580: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
3590: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
35a0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
35b0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
35c0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
35d0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
35e0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
35f0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
3600: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
3620: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
3630: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
3640: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
3650: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
3660: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
3670: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
3680: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
3690: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
36a0: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
36b0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
36c0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
36d0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
36e0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
36f0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
3700: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
3710: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
3720: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
3730: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
3740: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
3750: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
3760: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
3770: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
3780: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
3790: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
37a0: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
37b0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
37c0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
37d0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
37e0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
37f0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
3800: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
3810: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
3820: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
3830: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
3840: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
3870: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
3880: 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42  .^The [ALTER TAB
3890: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
38a0: 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61   not work on sta
38b0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a  tistics tables..
38c0: 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65  Appropriate care
38d0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
38e0: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
38f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3900: 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c   statistics.tabl
3910: 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f  es as invalid co
3920: 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20  ntent can cause 
3930: 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74  SQLite to select
3940: 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65   inefficient.que
3950: 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72  ry plans.  Gener
3960: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f  ally speaking, o
3970: 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f  ne should not mo
3980: 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74  dify the content
3990: 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69   of.the statisti
39a0: 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79  cs tables by any
39b0: 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72   mechanism other
39c0: 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74   than invoking t
39d0: 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he.ANALYZE comma
39e0: 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75  nd.  .See "[Manu
39f0: 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75  al Control Of Qu
3a00: 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20  ery Plans Using 
3a10: 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c  SQLITE_STAT Tabl
3a20: 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72  es]" for.further
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
3a40: 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69  >..<p> ^Statisti
3a50: 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41  cs gathered by A
3a60: 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61  NALYZE are not a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
3a80: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
3a90: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
3aa0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
3ab0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
3ac0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
3ad0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
3ae0: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
3af0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3b00: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
3b10: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
3b20: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
3b30: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
3b40: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
3b50: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
3b60: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75  </p>..<p> The qu
3b70: 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64  ery planner load
3b80: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
3b90: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3ba0: 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f  tables.into memo
3bb0: 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  ry when the sche
3bc0: 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65  ma is read.  ^He
3bd0: 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70  nce, when an app
3be0: 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73  lication.changes
3bf0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3c00: 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c  tables directly,
3c10: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74   SQLite will not
3c20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74   immediately.not
3c30: 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e  ice the changes.
3c40: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3c50: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
3c60: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
3c70: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
3c80: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
3c90: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
3ca0: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
3cb0: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20  </b>. </p>..<p> 
3cc0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
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 23 23  ################
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d10: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
3d20: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
3d30: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
3d40: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
3d50: 44 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73  Diagram attach-s
3d60: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
3d70: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
3d80: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
3d90: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
3da0: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
3db0: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
3dc0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
3dd0: 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20   .^The filename 
3de0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
3df0: 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64 20   to be attached 
3e00: 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a  is the value of.
3e10: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
3e20: 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f 72  hat occurs befor
3e30: 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  e the AS keyword
3e40: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
3e50: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
3e60: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65  follows the same
3e70: 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74 68   semantics as th
3e80: 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d  e.filename argum
3e90: 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  ent to [sqlite3_
3ea0: 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c  open()] and [sql
3eb0: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b  ite3_open_v2()];
3ec0: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
3ed0: 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72  e "[:memory:]" r
3ee0: 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69 6e  esults in an [in
3ef0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
3f00: 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20 73  ] and an.empty s
3f10: 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69 6e  tring results in
3f20: 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79   a new temporary
3f30: 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65 20   database..^The 
3f40: 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e  filename argumen
3f50: 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20  t can be a [URI 
3f60: 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49  filename] if URI
3f70: 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65 73   filename proces
3f80: 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20 6f  sing.is enable o
3f90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
3fa0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
3fb0: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
3fc0: 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c 65   is for.URI file
3fd0: 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73 61  names to be disa
3fe0: 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74 68  bled, however th
3ff0: 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  at might change 
4000: 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
4010: 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20 73  ase.of SQLite, s
4020: 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  o application de
4030: 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 76  velopers are adv
4040: 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63 63  ised to plan acc
4050: 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68  ordingly...<p>Th
4060: 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75  e name that occu
4070: 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53 20  rs after the AS 
4080: 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e  keyword is the n
4090: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
40a0: 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61  ase.used interna
40b0: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e  lly by SQLite..^
40c0: 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d  The database-nam
40d0: 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27  es 'main' and .'
40e0: 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74  temp' refer to t
40f0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4100: 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73   and the databas
4110: 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70  e used for .temp
4120: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e  orary tables.  ^
4130: 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  The main and tem
4140: 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e  p databases cann
4150: 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20 6f  ot be attached o
4160: 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  r.detached.</p>.
4170: 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e  .<p> ^(Tables in
4180: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
4190: 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66  abase can be ref
41a0: 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74  erred to using t
41b0: 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61  he syntax .<i>da
41c0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c  tabase-name.tabl
41d0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41e0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
41f0: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4200: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4210: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4220: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4230: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4240: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61  , then the.<i>da
4250: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
4260: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65  prefix is not re
4270: 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f  quired.  ^If two
4280: 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
4290: 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74  in.different dat
42a0: 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65 20  abases have the 
42b0: 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68  same name and th
42c0: 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  e .<i>database-n
42d0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
42e0: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
42f0: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
4300: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
4310: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
4320: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
4330: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
4340: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
4350: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
4360: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
4370: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
4380: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4390: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
43a0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
43b0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
43c0: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
43d0: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
43e0: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
43f0: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
4400: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
4410: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
4420: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
4430: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
4440: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
4450: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
4460: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
4470: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
4480: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
4490: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
44a0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
44b0: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
44c0: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
44d0: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
44e0: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
44f0: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
4500: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
4510: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
4520: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
4530: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
4540: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
4550: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
4560: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
4570: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
4580: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
4590: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
45a0: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
45b0: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
45c0: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
45d0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
45e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
45f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4650: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
4660: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
4670: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
4680: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65  IT ROLLBACK}..Re
4690: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
46a0: 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a  gram begin-stmt.
46b0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
46c0: 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74  iagram commit-st
46d0: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
46e0: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
46f0: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
4700: 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20  <p>.^No changes 
4710: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
4720: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
4730: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
4740: 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f  saction..^Any co
4750: 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67  mmand that chang
4760: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
4770: 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20  (basically, any 
4780: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65  SQL command.othe
4790: 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29  r than [SELECT])
47a0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
47b0: 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e  lly start a tran
47c0: 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69  saction if.one i
47d0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
47e0: 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d   effect.  ^Autom
47f0: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
4800: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
4810: 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e  e committed when
4820: 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20   the last query 
4830: 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a  finishes..</p>..
4840: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
4850: 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  s can be started
4860: 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20   manually using 
4870: 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e  the BEGIN.comman
4880: 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73  d.  ^(Such trans
4890: 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20  actions usually 
48a0: 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68  persist until th
48b0: 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72  e next.COMMIT or
48c0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
48d0: 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61  d.  But a transa
48e0: 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20  ction will also 
48f0: 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65  .ROLLBACK if the
4900: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
4910: 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72  sed or if an err
4920: 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68  or occurs.and th
4930: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c  e ROLLBACK confl
4940: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
4950: 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
4960: 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65  ified.)^.See the
4970: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
4980: 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49  n the [ON CONFLI
4990: 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61  CT].clause for a
49a0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
49b0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
49c0: 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63  ROLLBACK.conflic
49d0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
49e0: 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  orithm..</p>..<p
49f0: 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49  >.^END TRANSACTI
4a00: 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  ON is an alias f
4a10: 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a  or COMMIT..</p>.
4a20: 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69  .<p> ^(Transacti
4a30: 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ons created usin
4a40: 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54  g BEGIN...COMMIT
4a50: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a   do not nest.)^.
4a60: 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e  ^For nested tran
4a70: 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68  sactions, use th
4a80: 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e  e [SAVEPOINT] an
4a90: 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d  d [RELEASE] comm
4aa0: 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41  ands..The "TO SA
4ab0: 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c  VEPOINT <i>name<
4ac0: 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74  /i>" clause of t
4ad0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
4ae0: 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65  and shown.in the
4af0: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
4b00: 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70  above is only ap
4b10: 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56  plicable to [SAV
4b20: 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74  EPOINT].transact
4b30: 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d  ions.  ^An attem
4b40: 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65  pt to invoke the
4b50: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77   BEGIN command w
4b60: 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74  ithin.a transact
4b70: 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ion will fail wi
4b80: 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67  th an error, reg
4b90: 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
4ba0: 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  er.the transacti
4bb0: 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62  on was started b
4bc0: 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72  y [SAVEPOINT] or
4bd0: 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a   a prior BEGIN..
4be0: 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  ^The COMMIT comm
4bf0: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
4c00: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
4c10: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
4c20: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
4c30: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
4c40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
4c50: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
4c60: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
4c70: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
4c80: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4c90: 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47  t immediate {BEG
4ca0: 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42  IN IMMEDIATE} {B
4cb0: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c  EGIN EXCLUSIVE}<
4cc0: 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73  /tcl>.<p>.^Trans
4cd0: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64  actions can be d
4ce0: 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61  eferred, immedia
4cf0: 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65  te, or exclusive
4d00: 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  .  .^The default
4d10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68   transaction beh
4d20: 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65  avior is deferre
4d30: 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61  d..^Deferred mea
4d40: 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73  ns that no locks
4d50: 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e   are acquired.on
4d60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
4d70: 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65  til the database
4d80: 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73   is first access
4d90: 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20  ed.  ^Thus with 
4da0: 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73  a.deferred trans
4db0: 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49  action, the BEGI
4dc0: 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65  N statement itse
4dd0: 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20  lf does nothing 
4de0: 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65  to the.filesyste
4df0: 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e  m.  ^Locks.are n
4e00: 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69  ot acquired unti
4e10: 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64  l the first read
4e20: 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74   or write operat
4e30: 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ion.  ^The first
4e40: 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20   read.operation 
4e50: 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61  against a databa
4e60: 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48  se creates a [SH
4e70: 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74  ARED] lock and t
4e80: 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f  he first.write o
4e90: 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73  peration creates
4ea0: 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f   a [RESERVED] lo
4eb0: 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74  ck.   ^Because t
4ec0: 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f  he acquisition o
4ed0: 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72  f.locks is defer
4ee0: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61  red until they a
4ef0: 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73  re needed, it is
4f00: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
4f10: 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72  nother.thread or
4f20: 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63   process could c
4f30: 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65  reate a separate
4f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4f50: 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61   write to.the da
4f60: 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65  tabase after the
4f70: 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75   BEGIN on the cu
4f80: 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73  rrent thread has
4f90: 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74   executed..^If t
4fa0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
4fb0: 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65  s immediate, the
4fc0: 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  n [RESERVED] loc
4fd0: 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20  ks.are acquired 
4fe0: 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  on all databases
4ff0: 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
5000: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73  BEGIN command is
5010: 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f  .executed, witho
5020: 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74  ut waiting for t
5030: 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62  he.database to b
5040: 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20  e used.  ^After 
5050: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
5060: 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61  E, .no other [da
5070: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5080: 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  n] will be able 
5090: 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  to write to the 
50a0: 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61  database or.do a
50b0: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
50c0: 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53   or BEGIN EXCLUS
50d0: 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f  IVE.  ^Other pro
50e0: 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69  cesses can conti
50f0: 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d  nue.to read from
5100: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68   the database, h
5110: 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63  owever.  ^An exc
5120: 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69  lusive transacti
5130: 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55  on causes.[EXCLU
5140: 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62  SIVE] locks to b
5150: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
5160: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41  l databases.  ^A
5170: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
5180: 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72  LUSIVE, no other
5190: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
51a0: 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f  ction] except fo
51b0: 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74  r [read_uncommit
51c0: 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73  ted].connections
51d0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
51e0: 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
51f0: 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20  se and no other 
5200: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f  connection witho
5210: 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  ut.exception wil
5220: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
5230: 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  te the database 
5240: 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61  until the transa
5250: 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74  ction is.complet
5260: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41  e..</p>..<p>.^(A
5270: 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73  n implicit trans
5280: 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61  action (a transa
5290: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74  ction that is st
52a0: 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  arted automatica
52b0: 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73  lly,.not a trans
52c0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62  action started b
52d0: 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d  y BEGIN) is comm
52e0: 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  itted automatica
52f0: 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73  lly when.the las
5300: 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  t active stateme
5310: 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20  nt finishes.  A 
5320: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
5330: 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70  es when its.prep
5340: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
5350: 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  s [sqlite3_reset
5360: 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b  () | reset] or.[
5370: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5380: 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e  () | finalized].
5390: 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74    An open [sqlit
53a0: 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f  e3_blob] used fo
53b0: 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  r.incremental BL
53c0: 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73  OB I/O counts as
53d0: 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73   an unfinished s
53e0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b  tatement.  The [
53f0: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69  sqlite3_blob].fi
5400: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69  nishes when it i
5410: 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  s [sqlite3_blob_
5420: 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64  close() | closed
5430: 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ].)^.</p>..<p>.^
5440: 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d  The explicit COM
5450: 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  MIT command runs
5460: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76   immediately, ev
5470: 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
5480: 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d  pending [SELECT]
5490: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48   statements.  ^H
54a0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
54b0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
54c0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
54d0: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
54e0: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
54f0: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
5500: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f  SQLITE_BUSY]..</
5510: 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65  p>..<p>.^An atte
5520: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
5530: 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f  OMMIT might also
5540: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53   result in an [S
5550: 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75  QLITE_BUSY] retu
5560: 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e  rn code.if an an
5570: 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20  other thread or 
5580: 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73  process has a [s
5590: 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74  hared lock] on t
55a0: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
55b0: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
55c0: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
55d0: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68  ng updated.  ^Wh
55e0: 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20  en COMMIT fails 
55f0: 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65  in this.way, the
5600: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d   transaction rem
5610: 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20  ains active and 
5620: 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62  the COMMIT can b
5630: 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a  e retried later.
5640: 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72  after the reader
5650: 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63   has had a chanc
5660: 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e  e to clear..</p>
5670: 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c  ..<p>.In very ol
5680: 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  d versions of SQ
5690: 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65 72  Lite (before ver
56a0: 73 69 6f 6e 20 33 2e 37 2e 31 31 20 63 69 72 63  sion 3.7.11 circ
56b0: 61 20 32 30 31 32 2d 30 33 2d 32 30 29 0a 74 68  a 2012-03-20).th
56c0: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
56d0: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
56e0: 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45  or code .[SQLITE
56f0: 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20  _BUSY] if there 
5700: 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20  are any pending 
5710: 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f  queries.  ^In mo
5720: 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f  re recent.versio
5730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68  ns of SQLite, th
5740: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
5750: 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64  proceed and pend
5760: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77  ing statements.w
5770: 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f  ill often be abo
5780: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
5790: 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  em to return an 
57a0: 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f  [SQLITE_ABORT] o
57b0: 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  r.[SQLITE_ABORT_
57c0: 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e  ROLLBACK] error.
57d0: 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73  .^In SQLite vers
57e0: 69 6f 6e 20 33 2e 38 2e 38 20 61 6e 64 20 6c 61  ion 3.8.8 and la
57f0: 74 65 72 2c 20 61 20 70 65 6e 64 69 6e 67 20 72  ter, a pending r
5800: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
5810: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
5820: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
5830: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
5840: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
5850: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
5860: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
5870: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
5880: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
5890: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
58a0: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
58b0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
58c0: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
58d0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
58e0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
58f0: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
5900: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
5910: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
5920: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
5930: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
5940: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
5950: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
5960: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
5970: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
5980: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
5990: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
59a0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
59b0: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
59c0: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
59d0: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
59e0: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
59f0: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
5a00: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
5a10: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
5a20: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
5a30: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
5a40: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
5a50: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
5a60: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
5a70: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
5a80: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
5a90: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
5aa0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e 54  <li> [SQLITE_INT
5ab0: 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73 73  ERRUPT]: process
5ac0: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 74  ing [sqlite3_int
5ad0: 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70 74  errupt|interrupt
5ae0: 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70 6c  ed].     by appl
5af0: 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 0a  ication request.
5b00: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
5b10: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
5b20: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
5b30: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
5b40: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
5b50: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
5b60: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
5b70: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
5b80: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
5b90: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
5ba0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
5bb0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
5bc0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
5bd0: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
5be0: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
5bf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
5c00: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
5c10: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
5c20: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
5c30: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
5c40: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
5c50: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
5c60: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
5c70: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
5c80: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
5c90: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
5ca0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
5cb0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
5cc0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
5cd0: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
5ce0: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
5cf0: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
5d00: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
5d10: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5d20: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
5d30: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
5d40: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
5d50: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
5d60: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
5d70: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
5d80: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
5d90: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
5da0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
5db0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
5dc0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5dd0: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
5de0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
5df0: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
5e00: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
5e10: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
5e20: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
5e30: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
5e40: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
5e50: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
5e60: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
5e70: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
5e80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
5e90: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
5ea0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
5eb0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
5ec0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5ed0: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
5ee0: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
5ef0: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
5f00: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
5f10: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5f20: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
5f30: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
5f40: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
5f50: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
5f60: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
5f70: 3e 0a 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 23 23 23 23 23  ################
5fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fc0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
5fd0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
5fe0: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
5ff0: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
6010: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
6020: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
6030: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
6040: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
6050: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
6060: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
6070: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
6080: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
6090: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
60a0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
60b0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
60c0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
60d0: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
60e0: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
60f0: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
6100: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
6110: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
6120: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
6130: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
6140: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
6150: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
6160: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
6170: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
6180: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
6190: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
61a0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
61b0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
61c0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
61d0: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
61e0: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
61f0: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
6200: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
6210: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
6220: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
6230: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
6240: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
6250: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
6260: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
6270: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
6280: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
6290: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
62a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
62b0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
62c0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
62d0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
62e0: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
62f0: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
6300: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
6310: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
6320: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
6330: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
6340: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
6350: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
6360: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
6370: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
6380: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
6390: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
63a0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
63b0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
63c0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
63d0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
63e0: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
63f0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
6400: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
6410: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6420: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
6430: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
6440: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
6450: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
6460: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
6470: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
6480: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
6490: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
64a0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
64b0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
64c0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
64d0: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
64e0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
64f0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
6500: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6510: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
6520: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
6530: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
6540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6550: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
6560: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
6570: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
6580: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
6590: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
65a0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
65b0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
65c0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
65d0: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
65e0: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
65f0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
6600: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
6610: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6620: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
6630: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
6640: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
6650: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
6660: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6670: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
6680: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
6690: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
66a0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
66b0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
66c0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
66d0: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
66e0: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
66f0: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
6700: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
6710: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
6720: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
6730: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
6740: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
6750: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
6760: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
6770: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
6780: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
6790: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
67a0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
67b0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
67c0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
67d0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
67e0: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
67f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
6800: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
6810: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
6820: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
6830: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6840: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
6850: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
6860: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
6870: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
6880: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
6890: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
68a0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
68b0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
68c0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
68d0: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
68e0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
68f0: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
6900: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6910: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
6920: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6930: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
6940: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
6950: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
6960: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
6970: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
6980: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
6990: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
69a0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
69b0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
69c0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
69d0: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
69e0: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
69f0: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
6a00: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
6a10: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
6a20: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
6a30: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
6a40: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
6a50: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
6a60: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
6a70: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
6a80: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
6a90: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
6aa0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
6ab0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
6ac0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
6ad0: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
6ae0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
6af0: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
6b00: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
6b10: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6b20: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
6b30: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
6b40: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
6b50: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
6b60: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
6b70: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
6b80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
6b90: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
6ba0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
6bb0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
6bc0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
6bd0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
6be0: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
6bf0: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
6c00: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
6c10: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
6c20: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
6c30: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
6c40: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
6c50: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6c60: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
6c70: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
6c80: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
6c90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6ca0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
6cb0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
6cc0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
6cd0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
6ce0: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
6cf0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
6d00: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
6d10: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
6d20: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
6d30: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
6d40: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6d50: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
6d60: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
6d70: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
6d80: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
6d90: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
6da0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
6db0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
6dc0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
6dd0: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
6de0: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
6df0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
6e00: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
6e10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
6e20: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
6e30: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
6e40: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
6e50: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
6e60: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
6e70: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
6e80: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
6e90: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
6ea0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
6eb0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
6ec0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
6ed0: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
6ee0: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
6ef0: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
6f00: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
6f10: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
6f20: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
6f30: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
6f40: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
6f50: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
6f60: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
6f70: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
6f80: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6f90: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
6fa0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
6fb0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
6fc0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6fd0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
6fe0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
6ff0: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
7000: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
7010: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
7020: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
7030: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
7040: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
7050: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
7060: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
7070: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
7080: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
7090: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
70a0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
70b0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
70c0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
70d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
70e0: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
70f0: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
7100: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
7110: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
7120: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
7130: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
7140: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7150: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7160: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
7170: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
7180: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
7190: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
71a0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
71b0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
71c0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
71d0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
71e0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
71f0: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
7200: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
7210: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
7220: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
7230: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
7240: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
7250: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
7260: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
7270: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
7280: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
7290: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
72a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
72b0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
72c0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
72d0: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
72e0: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
72f0: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
7300: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
7310: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7320: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
7330: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
7340: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
7350: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
7360: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
7370: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
7380: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
7390: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
73a0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
73b0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
73c0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
73d0: 0a 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 23 23 23 23 23 23  ################
7410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7420: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
7430: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
7440: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
7450: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7460: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
7470: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
7480: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
7490: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
74a0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
74b0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
74c0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
74d0: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
74e0: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
74f0: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
7500: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
7510: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
7520: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
7530: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
7540: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
7550: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
7560: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
7570: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
7580: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
7590: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
75a0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
75b0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
75c0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
75d0: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
75e0: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
75f0: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
7600: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
7610: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
7620: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
7630: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
7640: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
7650: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
7660: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
7670: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
7680: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
7690: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
76a0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
76b0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
76c0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
76d0: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
76e0: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
76f0: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
7700: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
7710: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
7720: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7730: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
7740: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
7750: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
7760: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
7770: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
7780: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
7790: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
77a0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
77b0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
77c0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
77d0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7820: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7830: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
7840: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
7850: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
7860: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7870: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
7880: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
7890: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
78a0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
78b0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
78c0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
78d0: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
78e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
78f0: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
7900: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
7910: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
7920: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
7930: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
7940: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
7950: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
7960: 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a  ist of names of.
7970: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
7980: 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73  able that are us
7990: 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78  ed for the index
79a0: 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74   key..If the opt
79b0: 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75  ional WHERE clau
79c0: 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20  se is included, 
79d0: 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69  then the index i
79e0: 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e  s a "[partial in
79f0: 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  dex]"..</p>..<tc
7a00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64  l>hd_fragment {d
7a10: 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64  escidx} {descend
7a20: 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65  ing indices} {de
7a30: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20  scending index} 
7a40: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
7a50: 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  xes}</tcl>.<p>^E
7a60: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
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 20 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 0a 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 20 20  te sort order.  
7ac0: 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20  ^The sort order 
7ad0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ae0: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
7af0: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
7b00: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c  ase file format,
7b10: 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c   and in particul
7b20: 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66  ar the [schema f
7b30: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e  ormat number]..^
7b40: 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68  The "legacy" sch
7b50: 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69  ema format (1) i
7b60: 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72  gnores index.sor
7b70: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64  t order.  ^The d
7b80: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20  escending index 
7b90: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34  schema format (4
7ba0: 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f  ) takes index so
7bb0: 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63  rt order.into ac
7bc0: 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72  count.  Only ver
7bd0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
7be0: 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20  3.3.0 and later 
7bf0: 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65  are able to unde
7c00: 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65  rstand.the desce
7c10: 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d  nding index form
7c20: 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62  at. For compatib
7c30: 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f  ility, version o
7c40: 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e  f SQLite between
7c50: 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39   3.3.0.and 3.7.9
7c60: 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   use the legacy 
7c70: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79  schema format by
7c80: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e   default.  The n
7c90: 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  ewer schema form
7ca0: 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65  at is.used by de
7cb0: 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e  fault in version
7cc0: 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65   3.7.10 and late
7cd0: 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  r..^The [legacy_
7ce0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
7cf0: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
7d00: 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68  to change set th
7d10: 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76  e specific.behav
7d20: 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73  ior for any vers
7d30: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ion of SQLite.</
7d40: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  p>..<p>^The COLL
7d50: 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f  ATE clause optio
7d60: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  nally following 
7d70: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  each column name
7d80: 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61   defines a.colla
7d90: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73  ting sequence us
7da0: 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72  ed for text entr
7db0: 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75  ies in that colu
7dc0: 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  mn..^The default
7dd0: 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65   collating.seque
7de0: 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61  nce is the colla
7df0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65  ting sequence de
7e00: 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63  fined for that c
7e10: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52  olumn in the.[CR
7e20: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
7e30: 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e  ement.  ^Or if n
7e40: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
7e50: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
7e60: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
7e70: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
7e80: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7e90: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
7ea0: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
7eb0: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
7ec0: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
7ed0: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
7ee0: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
7ef0: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
7f00: 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  .  ^(The number 
7f10: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e  of columns in an
7f20: 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74   index is .limit
7f30: 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  ed to the value 
7f40: 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f  set by.[sqlite3_
7f50: 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c  limit]([SQLITE_L
7f60: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e  IMIT_COLUMN],...
7f70: 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ).)^</p>..<tcl>h
7f80: 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75  d_fragment uniqu
7f90: 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64  eidx {unique ind
7fa0: 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66  ex}</tcl>.<p>^If
7fb0: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
7fc0: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
7fd0: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
7fe0: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
7ff0: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
8000: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
8010: 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74  d.  ^Any attempt
8020: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
8030: 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c  licate entry.wil
8040: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65  l result in an e
8050: 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20  rror.  ^For the 
8060: 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71  purposes of uniq
8070: 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20  ue indices, all 
8080: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20  NULL values.are 
8090: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69  considered to di
80a0: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
80b0: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
80c0: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
80d0: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
80e0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
80f0: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
8100: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
8110: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
8120: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
8130: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
8140: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
8150: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
8160: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
8170: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
8180: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
8190: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
81a0: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
81b0: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
81c0: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
81d0: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
81e0: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
81f0: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
8200: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
8210: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
8220: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
8230: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
8240: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
8250: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
8260: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
8270: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
8280: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
8290: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
82a0: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
82b0: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
82c0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
82d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8310: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
8320: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
8330: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
8340: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
8350: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
8360: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
8370: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
8380: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
8390: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
83a0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
83b0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
83c0: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
83d0: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
83e0: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
83f0: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
8400: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
8410: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
8420: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
8430: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
8440: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8450: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
8460: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
8470: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8480: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
8490: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
84a0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
84b0: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
84c0: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
84d0: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
84e0: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
84f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
8500: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
8510: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
8520: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
8530: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
8540: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
8550: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
8560: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
8570: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
8580: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
8590: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
85a0: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
85b0: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
85c0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
85d0: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
85e0: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
85f0: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
8600: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
8610: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
8620: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
8630: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
8640: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
8650: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
8660: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
8670: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
8680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
8690: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
86a0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
86b0: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
86c0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
86d0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
86e0: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
86f0: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
8700: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
8710: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
8720: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
8730: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
8740: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
8750: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
8760: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
8770: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
8780: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
8790: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
87a0: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
87b0: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
87c0: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
87d0: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
87e0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
87f0: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
8800: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
8810: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c  )^..<p> ^If a &l
8820: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
8830: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
8840: 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74  , it must be eit
8850: 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22  her "main", .  "
8860: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
8870: 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48  me of an [ATTACH
8880: 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68   DATABASE|attach
8890: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49  ed database]. ^I
88a0: 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68  n this case.  th
88b0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
88c0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61  reated in the na
88d0: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
88e0: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
88f0: 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65  "TEMPORARY".  ke
8900: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74  yword occurs bet
8910: 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45  ween the "CREATE
8920: 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68  " and "TABLE" th
8930: 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  en the new table
8940: 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e   is.  created in
8950: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
8960: 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72  se. ^It is an er
8970: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
8980: 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74  oth a .  &lt;dat
8990: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61  abase-name&gt; a
89a0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
89b0: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
89c0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26  , unless the.  &
89d0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
89e0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
89f0: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
8a00: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
8a10: 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50  d and the.  TEMP
8a20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
8a30: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
8a40: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8a50: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20  d in the main.  
8a60: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20  database...<p>. 
8a70: 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20   ^It is usually 
8a80: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
8a90: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
8aa0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
8ab0: 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61  atabase that.  a
8ac0: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
8ad0: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
8ae0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
8af0: 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65  me name. ^Howeve
8b00: 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20  r, if the.  "IF 
8b10: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
8b20: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
8b30: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
8b40: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
8b50: 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61  ement and.  a ta
8b60: 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74  ble or view of t
8b70: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
8b80: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
8b90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
8ba0: 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68  mmand.  simply h
8bb0: 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e  as no effect (an
8bc0: 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  d no error messa
8bd0: 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e  ge is returned).
8be0: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74   ^An error is st
8bf0: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69  ill.  returned i
8c00: 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e  f the table cann
8c10: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65  ot be created be
8c20: 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73  cause of an exis
8c30: 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e  ting index, even
8c40: 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e   .  if the "IF N
8c50: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
8c60: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
8c70: 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61  .<p>^It is not a
8c80: 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74  n error to creat
8c90: 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  e a table that h
8ca0: 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
8cb0: 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69   as an .  existi
8cc0: 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  ng [CREATE TRIGG
8cd0: 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70  ER|trigger]...<p
8ce0: 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d  >^Tables are rem
8cf0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
8d00: 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74  DROP TABLE] stat
8d10: 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68  ement.  </p>..<h
8d20: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
8d30: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
8d40: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
8d50: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
8d60: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
8d70: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
8d80: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
8d90: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
8da0: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
8db0: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
8dc0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
8dd0: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
8de0: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
8df0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
8e00: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
8e10: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
8e20: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
8e30: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
8e40: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
8e50: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8e60: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
8e70: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
8e80: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
8e90: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
8ea0: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
8eb0: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
8ec0: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
8ed0: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
8ee0: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
8ef0: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
8f00: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
8f10: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
8f20: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
8f30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
8f40: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
8f50: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
8f60: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
8f70: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
8f80: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
8f90: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
8fa0: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
8fd0: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
8fe0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
8ff0: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
9000: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
9010: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
9020: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9040: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
9050: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
9060: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
9070: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
9080: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
9090: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
90a0: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
90b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
90c0: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
90d0: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
90e0: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
90f0: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
9100: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
9110: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
9120: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
9130: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
9140: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
9150: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
9160: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
9170: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
9180: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
9190: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
91a0: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
91b0: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
91c0: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
91d0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
91e0: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
91f0: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
9200: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
9210: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
9220: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
9230: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
9240: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
9250: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
9260: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
9270: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
9280: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
9290: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
92a0: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
92b0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
92c0: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
92d0: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
92e0: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
92f0: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
9300: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
9310: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
9320: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
9330: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
9340: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
9350: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
9360: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
9370: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
9380: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
9390: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
93a0: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
93b0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
93c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
93d0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
93e0: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
93f0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
9400: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9410: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
9420: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
9430: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
9440: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
9450: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
9460: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
9470: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
9480: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
9490: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
94a0: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
94b0: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
94c0: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
94d0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
94e0: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
94f0: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
9500: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
9510: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
9520: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
9530: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
9540: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
9550: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
9560: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
9570: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
9580: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
9590: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
95a0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
95b0: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
95c0: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
95d0: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
95e0: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
95f0: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
9600: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
9610: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
9620: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
9630: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
9640: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
9650: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
9660: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
9670: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
9680: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
9690: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
96a0: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
96b0: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
96c0: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
96d0: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
96e0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
96f0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
9700: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
9710: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
9720: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
9730: 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  ..<p>The DEFAULT
9740: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
9750: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
9760: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
9770: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
9780: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
9790: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
97a0: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
97b0: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
97c0: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
97d0: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
97e0: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
97f0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
9800: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
9810: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
9820: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9830: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
9840: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
9850: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
9860: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
9870: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
9880: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
9890: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
98a0: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
98b0: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
98c0: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
98d0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
98e0: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
98f0: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
9900: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
9910: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
9920: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
9930: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
9940: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
9950: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9960: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
9970: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
9980: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
9990: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
99a0: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
99b0: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
99c0: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
99d0: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
99e0: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
99f0: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
9a00: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
9a10: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
9a20: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
9a30: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
9a40: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
9a50: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
9a60: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
9a70: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
9a80: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
9a90: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
9aa0: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
9ab0: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
9ac0: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
9ad0: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
9ae0: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
9af0: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
9b00: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
9b10: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
9b20: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
9b30: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9b40: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9b50: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
9b60: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
9b70: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
9b80: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
9b90: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
9ba0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
9bb0: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
9bc0: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
9bd0: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
9be0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
9bf0: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
9c00: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
9c10: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
9c20: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
9c30: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
9c40: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
9c50: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
9c60: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
9c70: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9c80: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9c90: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9ca0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
9cb0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
9cc0: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
9cd0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9ce0: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
9cf0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
9d00: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
9d10: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
9d20: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
9d30: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
9d40: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
9d50: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
9d60: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
9d70: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
9d80: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
9d90: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
9da0: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
9db0: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
9dc0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
9dd0: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
9de0: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
9df0: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
9e00: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
9e10: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
9e20: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9e30: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
9e40: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
9e50: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
9e60: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
9e70: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
9e80: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
9e90: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
9ea0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
9eb0: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
9ec0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
9ed0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
9ee0: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
9ef0: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
9f00: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
9f10: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
9f20: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
9f30: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
9f40: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
9f50: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
9f60: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
9f70: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
9f80: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
9f90: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
9fa0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
9fb0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
9fc0: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
9fd0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
9fe0: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
9ff0: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
a000: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
a010: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
a020: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
a030: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
a040: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
a050: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
a060: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
a070: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
a080: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
a090: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
a0a0: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
a0b0: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
a0c0: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
a0d0: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
a0e0: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a0f0: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a100: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
a110: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
a120: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
a130: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
a140: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a150: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
a160: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
a170: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
a180: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a190: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a1a0: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
a1b0: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
a1c0: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a1d0: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a1e0: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a1f0: 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72    ^An error is r
a200: 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68  aised if more th
a210: 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b  an one PRIMARY K
a220: 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72  EY clause appear
a230: 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20  s in a.  CREATE 
a240: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
a250: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
a260: 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66  EY is optional f
a270: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
a280: 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75  es.  but is requ
a290: 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55  ired for [WITHOU
a2a0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
a2b0: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
a2c0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
a2d0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20  umn primary key 
a2e0: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
a2f0: 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20   type of that.  
a300: 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47  column is "INTEG
a310: 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ER" and the tabl
a320: 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48  e is not a [WITH
a330: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
a340: 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ,.  then the col
a350: 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20  umn is known as 
a360: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
a370: 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20  ARY KEY]..  See 
a380: 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63  below for a desc
a390: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ription of the s
a3a0: 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65  pecial propertie
a3b0: 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a  s and behaviors.
a3c0: 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74    associated wit
a3d0: 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  h an [INTEGER PR
a3e0: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e  IMARY KEY]...<p>
a3f0: 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74  ^Each row in a t
a400: 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d  able with a prim
a410: 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76  ary key must hav
a420: 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  e a unique combi
a430: 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75  nation.  of valu
a440: 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72  es in its primar
a450: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e  y key columns. ^
a460: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
a470: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a   of determining.
a480: 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73    the uniqueness
a490: 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20   of primary key 
a4a0: 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c  values, NULL val
a4b0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
a4c0: 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ed distinct from
a4d0: 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  .  all other val
a4e0: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
a4f0: 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20  ther NULLs. ^If 
a500: 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b  an [INSERT] or [
a510: 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d  UPDATE].  statem
a520: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a530: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
a540: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
a550: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
a560: 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69 63  s.  have identic
a570: 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76  al primary key v
a580: 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20 61  alues, that is a
a590: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
a5a0: 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f  ation...<p> Acco
a5b0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c  rding to the SQL
a5c0: 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41   standard, PRIMA
a5d0: 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c  RY KEY should al
a5e0: 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e  ways imply NOT N
a5f0: 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61  ULL..  Unfortuna
a600: 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 62  tely, due to a b
a610: 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79  ug in some early
a620: 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73 20   versions, this 
a630: 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61 73  is not the.  cas
a640: 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e  e in SQLite. ^Un
a650: 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  less the column 
a660: 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  is an [INTEGER P
a670: 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20  RIMARY KEY] or. 
a680: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61 20   the table is a 
a690: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
a6a0: 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c  table or the col
a6b0: 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20  umn is declared 
a6c0: 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69  NOT NULL,.  SQLi
a6d0: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
a6e0: 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41  alues in a PRIMA
a6f0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20  RY KEY column.  
a700: 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65 20  SQLite could be 
a710: 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f  fixed to.  confo
a720: 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61  rm to the standa
a730: 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73 6f  rd, but doing so
a740: 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65 67   might break leg
a750: 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  acy applications
a760: 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68 61  ..  Hence, it ha
a770: 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20 74  s been decided t
a780: 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e  o merely documen
a790: 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  t the fact that 
a7a0: 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e  SQLite.  allowin
a7b0: 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20  g NULLs in most 
a7c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
a7d0: 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  mns...<tcl>hd_fr
a7e0: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
a7f0: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
a800: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  que constraint} 
a810: 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69  {UNIQUE constrai
a820: 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20  nt}</tcl>.<p>^A 
a830: 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f  <b>UNIQUE</b> co
a840: 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69  nstraint is simi
a850: 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59  lar to a PRIMARY
a860: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c   KEY constraint,
a870: 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20 61   except.  that a
a880: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61   single table ma
a890: 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65  y have any numbe
a8a0: 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  r of UNIQUE cons
a8b0: 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61  traints. ^For ea
a8c0: 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73  ch.  UNIQUE cons
a8d0: 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61  traint on the ta
a8e0: 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75  ble, each row mu
a8f0: 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69  st contain a uni
a900: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  que combination.
a910: 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74    of values in t
a920: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  he columns ident
a930: 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49  ified by the UNI
a940: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  QUE constraint. 
a950: 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  .  ^For the purp
a960: 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63  oses of UNIQUE c
a970: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c  onstraints, NULL
a980: 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f   values.  are co
a990: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
a9a0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
a9b0: 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69   values, includi
a9c0: 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a  ng other NULLs..
a9d0: 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73  .<p>^In most cas
a9e0: 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 50  es, UNIQUE and P
a9f0: 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e  RIMARY KEY.  con
aa00: 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d 70  straints are imp
aa10: 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65 61  lemented by crea
aa20: 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69 6e  ting a unique in
aa30: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
aa40: 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63 65  ase..  (The exce
aa50: 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45  ptions are [INTE
aa60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
aa70: 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
aa80: 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54  s on .  [WITHOUT
aa90: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 29   ROWID] tables.)
aaa0: 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66 6f  .  Hence, the fo
aab0: 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73 20  llowing schemas 
aac0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71  are logically eq
aad0: 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c  uivalent:..  <ol
aae0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  >.  <li><p>CREAT
aaf0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
ab00: 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c  UNIQUE);.  <li><
ab10: 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  p>CREATE TABLE t
ab20: 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20 4b  1(a, b PRIMARY K
ab30: 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52  EY);.  <li><p>CR
ab40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
ab50: 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20   b);<br>.       
ab60: 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20    CREATE UNIQUE 
ab70: 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28  INDEX t1b ON t1(
ab80: 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63  b);.  </ol>..<tc
ab90: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63  l>hd_fragment {c
aba0: 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20  kconst} {CHECK} 
abb0: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
abc0: 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72  t} {CHECK constr
abd0: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  aints}</tcl>.<p>
abe0: 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e  ^(A <b>CHECK</b>
abf0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ac00: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
ac10: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
ac20: 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69 65  on or.  specifie
ac30: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
ac40: 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63  straint. In prac
ac50: 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f  tice it makes no
ac60: 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e   difference.)^ ^
ac70: 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20 6e  (Each.  time a n
ac80: 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
ac90: 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
aca0: 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67  e or an existing
acb0: 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c   row is updated,
acc0: 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
acd0: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
ace0: 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e  h each CHECK con
acf0: 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75  straint is evalu
ad00: 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74 20  ated and.  cast 
ad10: 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
ad20: 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
ad30: 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65 78  ay as a [CAST ex
ad40: 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
ad50: 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20 7a  e .  result is z
ad60: 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
ad70: 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c  ue 0 or real val
ad80: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
ad90: 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69 6f  constraint.  vio
ada0: 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72  lation has occur
adb0: 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 43  red.)^ ^If the C
adc0: 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e 20  HECK expression 
add0: 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
ade0: 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65  L, or.  any othe
adf0: 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65  r non-zero value
ae00: 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63 6f  , it is not a co
ae10: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
ae20: 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72 65  on..  ^The expre
ae30: 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b  ssion of a CHECK
ae40: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ae50: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 75  not contain a su
ae60: 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64  bquery...<tcl>hd
ae70: 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75  _fragment {notnu
ae80: 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55  llconst} {NOT NU
ae90: 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f  LL} {NOT NULL co
aea0: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
aeb0: 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c  <p>^A <b>NOT NUL
aec0: 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  L</b> constraint
aed0: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74   may only be att
aee0: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
aef0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20  n definition,.  
af00: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73  not specified as
af10: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
af20: 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69  int.  Not surpri
af30: 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20  singly, ^(a NOT 
af40: 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e  NULL.  constrain
af50: 74 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20  t dictates that 
af60: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63  the associated c
af70: 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f  olumn may not co
af80: 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c  ntain a NULL val
af90: 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67  ue..  Attempting
afa0: 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75   to set the colu
afb0: 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  mn value to NULL
afc0: 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20   when inserting 
afd0: 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75  a new row or.  u
afe0: 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74  pdating an exist
aff0: 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61  ing one causes a
b000: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
b010: 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61  ation.)^..<p>Exa
b020: 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74  ctly how a const
b030: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
b040: 69 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73  is dealt with is
b050: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
b060: 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63  he.  [conflict c
b070: 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74  lause|constraint
b080: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
b090: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e  tion algorithm].
b0a0: 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59   Each .  PRIMARY
b0b0: 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f   KEY, UNIQUE, NO
b0c0: 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b  T NULL and CHECK
b0d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20   constraint has 
b0e0: 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  a default confli
b0f0: 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20  ct.  resolution 
b100: 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d  algorithm. ^PRIM
b110: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20  ARY KEY, UNIQUE 
b120: 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  and NOT NULL con
b130: 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a  straints may be.
b140: 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73    explicitly ass
b150: 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20  igned a default 
b160: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
b170: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79  ion algorithm by
b180: 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b   including.  a [
b190: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
b1a0: 20 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69   in their defini
b1b0: 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61  tions. ^Or, if a
b1c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69   constraint defi
b1d0: 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f  nition.  does no
b1e0: 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e  t include a [con
b1f0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72  flict-clause] or
b200: 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63   it is a CHECK c
b210: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64  onstraint, the d
b220: 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63  efault.  conflic
b230: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
b240: 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
b250: 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73   ^Different cons
b260: 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74  traints within t
b270: 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20  he.  same table 
b280: 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65  may have differe
b290: 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  nt default confl
b2a0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
b2b0: 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20  lgorithms. See. 
b2c0: 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
b2d0: 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led [ON CONFLICT
b2e0: 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
b2f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c   information...<
b300: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
b310: 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50  rowid {INTEGER P
b320: 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49  RIMARY KEY} ROWI
b330: 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68  D rowid</tcl>.<h
b340: 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65  3>ROWIDs and the
b350: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
b360: 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45   KEY</h3>..<p>^E
b370: 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48 4f  xcept for [WITHO
b380: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
b390: 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68 69  , all rows withi
b3a0: 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 0a  n SQLite tables.
b3b0: 68 61 76 65 20 61 20 36 34 2d 62 69 74 20 73 69  have a 64-bit si
b3c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79  gned integer key
b3d0: 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69   that uniquely i
b3e0: 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f  dentifies the ro
b3f0: 77 20 77 69 74 68 69 6e 20 69 74 73 20 74 61 62  w within its tab
b400: 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72  le..This integer
b410: 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c   is usually.call
b420: 65 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20  ed the "rowid". 
b430: 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65  ^The rowid value
b440: 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
b450: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
b460: 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69  e special.case-i
b470: 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73  ndependent names
b480: 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c   "rowid", "oid",
b490: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e   or "_rowid_" in
b4a0: 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75   place of a colu
b4b0: 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74  mn name..^If a t
b4c0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  able contains a 
b4d0: 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c  user defined col
b4e0: 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64  umn named "rowid
b4f0: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
b500: 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74  wid_",.then that
b510: 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66   name always ref
b520: 65 72 73 20 74 68 65 20 65 78 70 6c 69 63 69 74  ers the explicit
b530: 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75  ly declared colu
b540: 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  mn and cannot be
b550: 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76   used.to retriev
b560: 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f  e the integer ro
b570: 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54  wid value...<p>T
b580: 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22 6f  he rowid (and "o
b590: 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f  id" and "_rowid_
b5a0: 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69 6e  ") is omitted in
b5b0: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
b5c0: 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54   tables..WITHOUT
b5d0: 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61 72   ROWID tables ar
b5e0: 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  e only available
b5f0: 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   in SQLite [vers
b600: 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c  ion 3.8.2] and l
b610: 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68  ater..A table th
b620: 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54  at lacks the WIT
b630: 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73  HOUT ROWID claus
b640: 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72  e is called a "r
b650: 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70  owid table"...<p
b660: 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f  >The data for ro
b670: 77 69 64 20 74 61 62 6c 65 73 20 69 73 20 73 74  wid tables is st
b680: 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65  ored as a B-Tree
b690: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
b6a0: 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20  ining.one entry 
b6b0: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72  for each table r
b6c0: 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f  ow, using the ro
b6d0: 77 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65  wid value as the
b6e0: 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73   key. This means
b6f0: 20 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67   that.retrieving
b700: 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f   or sorting reco
b710: 72 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20  rds by rowid is 
b720: 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20  fast. Searching 
b730: 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74  for a record wit
b740: 68 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77  h a.specific row
b750: 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72  id, or for all r
b760: 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69  ecords with rowi
b770: 64 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63  ds within a spec
b780: 69 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61  ified range is.a
b790: 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66  round twice as f
b7a0: 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72  ast as a similar
b7b0: 20 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20   search made by 
b7c0: 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f  specifying any o
b7d0: 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59  ther PRIMARY.KEY
b7e0: 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75   or indexed valu
b7f0: 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e  e...<p> ^With on
b800: 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65  e exception note
b810: 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f  d below, if a ro
b820: 77 69 64 20 74 61 62 6c 65 20 68 61 73 20 61 20  wid table has a 
b830: 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74  primary key that
b840: 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73   consists.of a s
b850: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64  ingle column and
b860: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
b870: 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d  pe of that colum
b880: 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69  n is "INTEGER" i
b890: 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66  n any mixture of
b8a0: 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72  .upper and lower
b8b0: 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20   case, then the 
b8c0: 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61  column becomes a
b8d0: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
b8e0: 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f  rowid. Such a.co
b8f0: 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20  lumn is usually 
b900: 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 61  referred to as a
b910: 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61  n "integer prima
b920: 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41  ry key". A PRIMA
b930: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e  RY KEY column.on
b940: 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e  ly becomes an in
b950: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
b960: 79 20 69 66 20 74 68 65 20 64 65 63 6c 61 72 65  y if the declare
b970: 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65  d type name is e
b980: 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22  xactly."INTEGER"
b990: 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65  .  ^Other intege
b9a0: 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b  r type names lik
b9b0: 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49  e "INT" or "BIGI
b9c0: 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e  NT" or "SHORT IN
b9d0: 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47  TEGER".or "UNSIG
b9e0: 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63 61 75  NED INTEGER" cau
b9f0: 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79 20  ses the primary 
ba00: 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  key column to be
ba10: 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e  have as an ordin
ba20: 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  ary.table column
ba30: 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61   with integer [a
ba40: 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75  ffinity] and a u
ba50: 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74  nique index, not
ba60: 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
ba70: 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e  .the rowid...<p>
ba80: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d   The exception m
ba90: 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69  entioned above i
baa0: 73 20 74 68 61 74 20 5e 69 66 20 74 68 65 20 64  s that ^if the d
bab0: 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20  eclaration of a 
bac0: 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c  column with.decl
bad0: 61 72 65 64 20 74 79 70 65 20 22 49 4e 54 45 47  ared type "INTEG
bae0: 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20  ER" includes an 
baf0: 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53  "PRIMARY KEY DES
bb00: 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f  C" clause, it do
bb10: 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e  es not.become an
bb20: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
bb30: 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20  owid and is not 
bb40: 63 6c 61 73 73 69 66 69 65 64 20 61 73 20 61 6e  classified as an
bb50: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
bb60: 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b   key..This quirk
bb70: 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67   is not by desig
bb80: 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f 20  n. It is due to 
bb90: 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76  a bug in early v
bba0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
bbb0: 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68  e..But fixing th
bbc0: 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75  e bug could resu
bbd0: 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20  lt in backwards 
bbe0: 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65  incompatibilitie
bbf0: 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72  s..Hence, the or
bc00: 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20  iginal behavior 
bc10: 68 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65  has been retaine
bc20: 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65  d (and documente
bc30: 64 29 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62  d) because odd.b
bc40: 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72  ehavior in a cor
bc50: 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20  ner case is far 
bc60: 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f  better than a co
bc70: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
bc80: 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74  k.  This means.t
bc90: 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  hat ^(the follow
bca0: 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20  ing three table 
bcb0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c  declarations all
bcc0: 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d   cause the colum
bcd0: 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61  n "x" to be an.a
bce0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bcf0: 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70  id (an integer p
bd00: 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75  rimary key):..<u
bd10: 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  l>.<li><tt>CREAT
bd20: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bd30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
bd40: 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ASC, y, z);</tt>
bd50: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
bd60: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
bd70: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
bd80: 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74   KEY(x ASC));</t
bd90: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
bda0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bdb0: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
bdc0: 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b  RY KEY(x DESC));
bdd0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
bde0: 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c  p>But ^(the foll
bdf0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
be00: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
be10: 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61  t in "x" being a
be20: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
be30: 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rowid:.<ul>.<li>
be40: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
be50: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
be60: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
be70: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
be80: 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61  )^..<p>^Rowid va
be90: 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
bea0: 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50  fied using an UP
beb0: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
bec0: 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61  n the same.way a
bed0: 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
bee0: 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
bef0: 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ther using one o
bf00: 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
bf10: 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c  liases.("rowid",
bf20: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
bf30: 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67  d_") or by using
bf40: 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65   an alias create
bf50: 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a  d by an integer.
bf60: 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69  primary key. ^Si
bf70: 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45  milarly, an INSE
bf80: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  RT statement may
bf90: 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65   provide a value
bfa0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
bfb0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
bfc0: 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e  w inserted. ^(Un
bfd0: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
bfe0: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69  te columns, an i
bff0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
c000: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
c010: 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  mn must contain 
c020: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20  integer values. 
c030: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
c040: 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c  key or rowid.col
c050: 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c  umns are not abl
c060: 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69  e to hold floati
c070: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
c080: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
c090: 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70   or NULLs.)^..<p
c0a0: 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
c0b0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c0c0: 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65  s to set an inte
c0d0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
c0e0: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a  or rowid column.
c0f0: 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f  to a NULL or blo
c100: 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61  b value, or to a
c110: 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20   string or real 
c120: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
c130: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
c140: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
c150: 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61  integer, a "data
c160: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
c170: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
c180: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  the statement.is
c190: 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e   aborted. ^If an
c1a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
c1b0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
c1c0: 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75  sert a blob valu
c1d0: 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f  e, or a string.o
c1e0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61  r real value tha
c1f0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  t cannot be loss
c200: 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
c210: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
c220: 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70  nto an.integer p
c230: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
c240: 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64  wid column, a "d
c250: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
c260: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
c270: 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74  nd the.statement
c280: 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70   is aborted...<p
c290: 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73  >^If an INSERT s
c2a0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c2b0: 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  s to insert a NU
c2c0: 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
c2d0: 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72  rowid or.integer
c2e0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
c2f0: 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20  umn, the system 
c300: 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67  chooses an integ
c310: 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  er value to use 
c320: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74  as the.rowid aut
c330: 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65  omatically. A de
c340: 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
c350: 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69  on of how this i
c360: 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64  s done is provid
c370: 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  ed.<a href="auto
c380: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
c390: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
c3a0: 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20  p>^(The [parent 
c3b0: 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69  key] of a [forei
c3c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
c3d0: 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  t] is not allowe
c3e0: 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77  d to.use the row
c3f0: 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20  id.  The parent 
c400: 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61  key must used na
c410: 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79  med columns only
c420: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  .)^</p>..<tcl>.#
c430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
c480: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
c490: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
c4a0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
c4b0: 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
c4c0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
c4d0: 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73  create-trigger-s
c4e0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
c4f0: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
c500: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
c510: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
c520: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
c530: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54  abase schema. ^T
c540: 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61  riggers are data
c550: 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  base operations 
c560: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
c570: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
c580: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
c590: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
c5a0: 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a  t.occurs.  </p>.
c5b0: 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d  .<p>^A trigger m
c5c0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
c5d0: 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72  to fire whenever
c5e0: 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e   a [DELETE], [IN
c5f0: 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54  SERT],.or [UPDAT
c600: 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c  E] of a.particul
c610: 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ar database tabl
c620: 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65  e occurs, or whe
c630: 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45  never an [UPDATE
c640: 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f  ] occurs on.on o
c650: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  ne or more speci
c660: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  fied columns of 
c670: 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  a table.</p>..<p
c680: 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  >^At this time S
c690: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
c6a0: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
c6b0: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
c6c0: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
c6d0: 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e  T triggers. ^Hen
c6e0: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
c6f0: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
c700: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
c710: 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57  l..^FOR EACH ROW
c720: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
c730: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
c740: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
c750: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
c760: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
c770: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
c780: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
c790: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
c7a0: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
c7b0: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
c7c0: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
c7d0: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
c7e0: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
c7f0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74  /p>..<p>^(Both t
c800: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
c810: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
c820: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
c830: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
c840: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
c850: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
c860: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
c870: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
c880: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
c890: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
c8a0: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
c8b0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
c8c0: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
c8d0: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
c8e0: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
c8f0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
c900: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
c910: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
c920: 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20  th.)^ ^(OLD and 
c930: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d  NEW references m
c940: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
c950: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65  in triggers on.e
c960: 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20  vents for which 
c970: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
c980: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
c990: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
c9a0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
c9b0: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
c9c0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
c9d0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
c9e0: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
c9f0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
ca00: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
ca10: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ca20: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
ca30: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
ca40: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
ca50: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
ca60: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
ca70: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
ca80: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
ca90: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
caa0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
cab0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
cac0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
cad0: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
cae0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
caf0: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
cb00: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
cb10: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
cb20: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c  table>.</p>)^..<
cb30: 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61  p>^If a WHEN cla
cb40: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
cb50: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
cb60: 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72  nts specified.ar
cb70: 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20  e only executed 
cb80: 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  for rows for whi
cb90: 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75  ch the WHEN.clau
cba0: 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20  se is true. ^If 
cbb0: 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  no WHEN clause i
cbc0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
cbd0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  SQL statements.a
cbe0: 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  re executed for 
cbf0: 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c  all rows.</p>..<
cc00: 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72  p>^The BEFORE or
cc10: 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64   AFTER keyword d
cc20: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
cc30: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
cc40: 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75  ns.will be execu
cc50: 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ted relative to 
cc60: 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d  the insertion, m
cc70: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72  odification or r
cc80: 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73  emoval of the.as
cc90: 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70  sociated row.</p
cca0: 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f  >..<p>^An [ON CO
ccb0: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d  NFLICT] clause m
ccc0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
ccd0: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55  as part of an [U
cce0: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
ccf0: 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  T].action within
cd00: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65   the body of the
cd10: 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76   trigger..^Howev
cd20: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
cd30: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
cd40: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
cd50: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
cd60: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
cd70: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
cd80: 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20  , then conflict 
cd90: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
cda0: 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61  of the outer sta
cdb0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69  tement is used i
cdc0: 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nstead.</p>..<p>
cdd0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75  ^Triggers are au
cde0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f  tomatically [DRO
cdf0: 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70  P TRIGGER | drop
ce00: 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61  ped].when the ta
ce10: 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72  ble that they ar
ce20: 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  e .associated wi
ce30: 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65  th (the <i>table
ce40: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29  -name</i> table)
ce50: 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45   is .[DROP TABLE
ce60: 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48   | dropped].  ^H
ce70: 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72  owever if the tr
ce80: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
ce90: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
cea0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
ceb0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
cec0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
ced0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
cee0: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
cef0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
cf00: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
cf10: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
cf20: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
cf30: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
cf40: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
cf50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
cf60: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
cf70: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
cf80: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
cf90: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
cfa0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
cfb0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
cfc0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
cfd0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
cfe0: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
cff0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d000: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
d010: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
d020: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
d030: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
d040: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
d050: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
d060: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
d070: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
d080: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
d090: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
d0a0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
d0b0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
d0c0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
d0d0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
d0e0: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
d0f0: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
d100: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
d110: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
d120: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
d130: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
d140: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
d150: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
d160: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
d170: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
d180: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
d190: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
d1a0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
d1b0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
d1c0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
d1d0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
d1e0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
d1f0: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
d200: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
d210: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
d220: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
d230: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
d240: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
d250: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
d260: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
d270: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
d280: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
d290: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
d2a0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
d2b0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
d2c0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
d2d0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
d2e0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
d2f0: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d300: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
d310: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
d320: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
d330: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
d340: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
d350: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
d360: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
d370: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
d380: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
d390: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
d3a0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
d3b0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
d3c0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
d3d0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
d3e0: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
d3f0: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
d400: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
d410: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
d420: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
d430: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
d440: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
d450: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
d460: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
d470: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
d480: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
d490: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
d4a0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
d4b0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
d4c0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
d4d0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f  ..<li><p>.  ^[co
d4e0: 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65  mmon-table-expre
d4f0: 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62  ssion|Common tab
d500: 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61  le expression] a
d510: 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
d520: 20 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74   for.  statement
d530: 73 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67  s inside of trig
d540: 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  gers..  </p></li
d550: 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  >.</ul>..<tcl>hd
d560: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61  _fragment instea
d570: 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e  d_of_trigger {IN
d580: 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45  STEAD OF} {INSTE
d590: 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f  AD OF trigger}</
d5a0: 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44  tcl>.<h3>INSTEAD
d5b0: 20 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33   OF triggers</h3
d5c0: 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20  >..<p>^Triggers 
d5d0: 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f  may be created o
d5e0: 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65  n [views], as we
d5f0: 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74  ll as ordinary t
d600: 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66  ables, by.specif
d610: 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20  ying INSTEAD OF 
d620: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52  in the CREATE TR
d630: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e  IGGER statement.
d640: 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72   .^If one or mor
d650: 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20  e ON INSERT, ON 
d660: 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44  DELETE.or ON UPD
d670: 41 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65  ATE triggers are
d680: 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69   defined on a vi
d690: 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e  ew, then it is n
d6a0: 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65  ot an.error to e
d6b0: 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54  xecute an INSERT
d6c0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
d6d0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20  TE statement on 
d6e0: 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65  the view, .respe
d6f0: 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65  ctively.  ^Inste
d700: 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e  ad,.executing an
d710: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
d720: 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65  or UPDATE on the
d730: 20 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65   view causes the
d740: 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67   associated.trig
d750: 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54  gers to fire. ^T
d760: 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75  he real tables u
d770: 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69  nderlying the vi
d780: 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66  ew are not modif
d790: 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73  ied.(except poss
d7a0: 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c  ibly explicitly,
d7b0: 20 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72   by a trigger pr
d7c0: 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ogram).</p>..<p>
d7d0: 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b  ^Note that the [
d7e0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
d7f0: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  )] and [sqlite3_
d800: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
d810: 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e   interfaces.do n
d820: 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  ot count INSTEAD
d830: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
d840: 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f  ngs, but the.[co
d850: 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67  unt_changes prag
d860: 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49  ma] does count I
d870: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
d880: 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c  r firing.</p>..<
d890: 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20  h3>Some Example 
d8a0: 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  Triggers</h3>..<
d8b0: 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61  p>^(Assuming tha
d8c0: 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72  t customer recor
d8d0: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
d8e0: 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22   the "customers"
d8f0: 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74   table, and.that
d900: 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61   order records a
d910: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
d920: 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c   "orders" table,
d930: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55   the following.U
d940: 50 44 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e  PDATE trigger.en
d950: 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61  sures that all a
d960: 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73  ssociated orders
d970: 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20   are redirected 
d980: 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20  when a customer 
d990: 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68  changes.his or h
d9a0: 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a  er address:</p>.
d9b0: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
d9c0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75  CREATE TRIGGER u
d9d0: 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61  pdate_customer_a
d9e0: 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46  ddress UPDATE OF
d9f0: 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74   address ON cust
da00: 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20  omers .  BEGIN. 
da10: 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73     UPDATE orders
da20: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e   SET address = n
da30: 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45  ew.address WHERE
da40: 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d   customer_name =
da50: 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44   old.name;.  END
da60: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69  ;.}</tcl>..<p>Wi
da70: 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20  th this trigger 
da80: 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75  installed, execu
da90: 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65  ting the stateme
daa0: 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  nt:</p>..<tcl>Ex
dab0: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63  ample {.UPDATE c
dac0: 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64  ustomers SET add
dad0: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
dae0: 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d  t.' WHERE name =
daf0: 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d   'Jack Jones';.}
db00: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65  </tcl>..<p>cause
db10: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
db20: 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61  to be automatica
db30: 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70  lly executed:</p
db40: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
db50: 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20  {.UPDATE orders 
db60: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31  SET address = '1
db70: 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45   Main St.' WHERE
db80: 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d   customer_name =
db90: 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d   'Jack Jones';.}
dba0: 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72  </tcl>)^..<p>For
dbb0: 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61   an example of a
dbc0: 6e 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  n INSTEAD OF tri
dbd0: 67 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74  gger, consider t
dbe0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68  he following sch
dbf0: 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  ema:..<tcl>Examp
dc00: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c  le {.CREATE TABL
dc10: 45 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75  E customer(.  cu
dc20: 73 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52  st_id INTEGER PR
dc30: 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73  IMARY KEY,.  cus
dc40: 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63  t_name TEXT,.  c
dc50: 75 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b  ust_addr TEXT.);
dc60: 0a 43 52 45 41 54 45 20 56 49 45 57 20 63 75 73  .CREATE VIEW cus
dc70: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53  tomer_address AS
dc80: 0a 20 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f  .   SELECT cust_
dc90: 69 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52  id, cust_addr FR
dca0: 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45  OM customer;.CRE
dcb0: 41 54 45 20 54 52 49 47 47 45 52 20 63 75 73 74  ATE TRIGGER cust
dcc0: 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45  _addr_chng.INSTE
dcd0: 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20  AD OF UPDATE OF 
dce0: 63 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73  cust_addr ON cus
dcf0: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45  tomer_address.BE
dd00: 47 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73  GIN.  UPDATE cus
dd10: 74 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61  tomer SET cust_a
dd20: 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64  ddr=NEW.cust_add
dd30: 72 0a 20 20 20 57 48 45 52 45 20 63 75 73 74 5f  r.   WHERE cust_
dd40: 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a  id=NEW.cust_id;.
dd50: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
dd60: 3e 57 69 74 68 20 74 68 65 20 73 63 68 65 6d 61  >With the schema
dd70: 20 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d   above, a statem
dd80: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a  ent of the form:
dd90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
dda0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74  le {.UPDATE cust
ddb0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45 54  omer_address SET
ddc0: 20 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f   cust_addr=$new_
ddd0: 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75  address WHERE cu
dde0: 73 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a  st_id=$cust_id;.
ddf0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73  }</tcl>..<p>Caus
de00: 65 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e  es the customer.
de10: 63 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20  cust_addr field 
de20: 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 66 6f  to be updated fo
de30: 72 20 61 20 73 70 65 63 69 66 69 63 0a 63 75 73  r a specific.cus
de40: 74 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74  tomer entry that
de50: 20 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75   has customer.cu
de60: 73 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74  st_id equal to t
de70: 68 65 20 24 63 75 73 74 5f 69 64 20 70 61 72 61  he $cust_id para
de80: 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20  meter..Note how 
de90: 74 68 65 20 76 61 6c 75 65 73 20 61 73 73 69 67  the values assig
dea0: 6e 65 64 20 74 6f 20 74 68 65 20 76 69 65 77 20  ned to the view 
deb0: 61 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62  are made availab
dec0: 6c 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74  le as field.in t
ded0: 68 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22  he special "NEW"
dee0: 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68   table within th
def0: 65 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c  e trigger body.<
df00: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
df10: 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f  gment undef_befo
df20: 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45  re {undefined BE
df30: 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68  FORE trigger beh
df40: 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  avior}</tcl>.<h3
df50: 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65  >Cautions On The
df60: 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74   Use Of BEFORE t
df70: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
df80: 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44  >If a BEFORE UPD
df90: 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45  ATE or BEFORE DE
dfa0: 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64  LETE trigger mod
dfb0: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
dfc0: 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20   a row.that was 
dfd0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64  to have been upd
dfe0: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c  ated or deleted,
dff0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e000: 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65   of the subseque
e010: 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c  nt.update or del
e020: 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  ete operation is
e030: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72   undefined.  Fur
e040: 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42  thermore, if a B
e050: 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f  EFORE trigger.mo
e060: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
e070: 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74  s a row, then it
e080: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68   is undefined wh
e090: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54  ether or not AFT
e0a0: 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74  ER triggers.that
e0b0: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65   would have othe
e0c0: 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f  rwise run on tho
e0d0: 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20  se rows will in 
e0e0: 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a  fact run..</p>..
e0f0: 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  <p>The value of 
e100: 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64  NEW.rowid is und
e110: 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f  efined in a BEFO
e120: 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65  RE INSERT trigge
e130: 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72  r in which.the r
e140: 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c  owid is not expl
e150: 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e  icitly set to an
e160: 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c   integer.</p>..<
e170: 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65  p>Because of the
e180: 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72   behaviors descr
e190: 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67  ibed above, prog
e1a0: 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
e1b0: 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72  uraged to.prefer
e1c0: 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20   AFTER triggers 
e1d0: 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67  over BEFORE trig
e1e0: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gers.</p>..<tcl>
e1f0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73  hd_fragment rais
e200: 65 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f  e {RAISE functio
e210: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  n}</tcl>.<h3>The
e220: 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
e230: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73  n</h3>..<p>^(A s
e240: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
e250: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
e260: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
e270: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
e280: 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  ,)^.with the fol
e290: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
e2a0: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
e2b0: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
e2c0: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
e2d0: 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41  ^(When one of RA
e2e0: 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e  ISE(ROLLBACK,...
e2f0: 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e  ), RAISE(ABORT,.
e300: 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49  ..) or RAISE(FAI
e310: 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64  L,...).is called
e320: 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d   during trigger-
e330: 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f  program.executio
e340: 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64  n, the specified
e350: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70   [ON CONFLICT] p
e360: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72  rocessing is per
e370: 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65  formed.the curre
e380: 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61  nt query termina
e390: 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20  tes.)^.An error 
e3a0: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
e3b0: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
e3c0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
e3d0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
e3e0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
e3f0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
e400: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
e410: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
e420: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
e430: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
e440: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
e450: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
e460: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
e470: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
e480: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
e490: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
e4a0: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
e4b0: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
e4c0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
e4d0: 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65  ted are abandone
e4e0: 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a  d. ^No database.
e4f0: 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c  changes are roll
e500: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
e510: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
e520: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
e530: 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65  ger program.to e
e540: 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66  xecute is itself
e550: 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
e560: 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e  er program, then
e570: 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72   that trigger pr
e580: 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78  ogram.resumes ex
e590: 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62  ecution at the b
e5a0: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
e5b0: 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a  next step..</p>.
e5c0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e5d0: 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50  t temptrig {TEMP
e5e0: 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e   triggers on non
e5f0: 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74  -TEMP tables}</t
e600: 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69  cl>.<h3>TEMP Tri
e610: 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d  ggers on Non-TEM
e620: 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  P Tables</h3>..<
e630: 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f  p>^(A trigger no
e640: 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e  rmally exists in
e650: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
e660: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
e670: 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20  named.after the 
e680: 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20  "ON" keyword in 
e690: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
e6a0: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45  ER statement.  E
e6b0: 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73  xcept, it is.pos
e6c0: 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20  sible to create 
e6d0: 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f  a TEMP TRIGGER o
e6e0: 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f  n a table in ano
e6f0: 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e  ther database.)^
e700: 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65    .Such a trigge
e710: 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65  r will only fire
e720: 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72   when changes.ar
e730: 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61  e made to the ta
e740: 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68  rget table by th
e750: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68  e application th
e760: 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74  at defined the t
e770: 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70  rigger..Other ap
e780: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
e790: 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
e7a0: 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ase will not be 
e7b0: 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a  able to see the.
e7c0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64  TEMP trigger and
e7d0: 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75   hence cannot ru
e7e0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f  n the trigger.</
e7f0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69  p>..<p>When defi
e800: 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67  ning a TEMP trig
e810: 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d  ger on a non-TEM
e820: 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69  P table, it is i
e830: 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63  mportant to.spec
e840: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
e850: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e   holding the non
e860: 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f  -TEMP table.  Fo
e870: 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68  r example,.in th
e880: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
e890: 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70  ement, it is imp
e8a0: 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d  ortant to say "m
e8b0: 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61  ain.tab1" instea
e8c0: 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22  d.of just "tab1"
e8d0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
e8e0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
e8f0: 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31  TEMP TRIGGER ex1
e900: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
e910: 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62   <b>main.</b>tab
e920: 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72  1 BEGIN ....</pr
e930: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
e940: 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73  .<p>Failure to s
e950: 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
e960: 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20  ase name on the 
e970: 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75  target table cou
e980: 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65  ld result.in the
e990: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65   TEMP trigger be
e9a0: 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74  ing reattached t
e9b0: 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  o a table with t
e9c0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a  he same name in.
e9d0: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
e9e0: 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63   whenever any sc
e9f0: 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75  hema change occu
ea00: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs.</p>..<tcl>.#
ea10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
ea60: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
ea70: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
ea80: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
ea90: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 52   view *views}..R
eaa0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
eab0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65  agram create-vie
eac0: 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
ead0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
eae0: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
eaf0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
eb00: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
eb10: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
eb20: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
eb30: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
eb40: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
eb50: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
eb60: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
eb70: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
eb80: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
eb90: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
eba0: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
ebb0: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
ebc0: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
ebd0: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
ebe0: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
ebf0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
ec00: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
ec10: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
ec20: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
ec30: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
ec40: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
ec50: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
ec60: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
ec70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
ec80: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
ec90: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
eca0: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
ecb0: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
ecc0: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
ecd0: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
ece0: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
ecf0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
ed00: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
ed10: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
ed20: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
ed30: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
ed40: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
ed50: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
ed60: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
ed70: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
ed80: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
ed90: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
eda0: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
edb0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
edc0: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
edd0: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
ede0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
edf0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
ee00: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
ee10: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
ee20: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
ee30: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
ee40: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
ee50: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
ee60: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
ee70: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
ee80: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
ee90: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
eea0: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
eeb0: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
eec0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
eed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
ef20: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
ef30: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
ef40: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
ef50: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
ef60: 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
ef70: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
ef80: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
ef90: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
efa0: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
efb0: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
efc0: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
efd0: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
efe0: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
eff0: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
f000: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
f010: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
f020: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
f030: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
f040: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
f050: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
f060: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
f070: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
f080: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
f090: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
f0a0: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
f0b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
f0c0: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
f0d0: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
f0e0: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
f0f0: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
f100: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
f110: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
f120: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
f130: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
f140: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
f150: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
f160: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
f170: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
f180: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
f190: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
f1a0: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
f1b0: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
f1c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
f1d0: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
f1e0: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
f1f0: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
f200: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
f210: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f220: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
f230: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
f240: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
f250: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
f260: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
f270: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
f280: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f290: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
f2a0: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
f2b0: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
f2c0: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
f2d0: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
f2e0: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
f2f0: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
f300: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
f310: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
f320: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
f330: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
f340: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
f350: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
f360: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
f370: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
f380: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
f390: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
f3a0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
f3b0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
f3c0: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
f3d0: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
f3e0: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
f3f0: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
f400: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
f410: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
f420: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
f430: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
f440: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
f450: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
f460: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
f470: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f480: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
f490: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
f4a0: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
f4b0: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
f4c0: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
f4d0: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
f4e0: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
f4f0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
f500: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
f510: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
f520: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
f530: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f580: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
f590: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
f5a0: 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72  *DELETEs}..Recur
f5b0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
f5c0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f  m delete-stmt.</
f5d0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c  tcl>..<p>The DEL
f5e0: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f  ETE command remo
f5f0: 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ves records from
f600: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
f610: 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20  ified by the.   
f620: 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62  <i>qualified-tab
f630: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c  le-name</i>. ..<
f640: 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20  p>^If the WHERE 
f650: 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72  clause is not pr
f660: 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72  esent, all recor
f670: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
f680: 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
f690: 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  ^If a WHERE clau
f6a0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
f6b0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
f6c0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
f6d0: 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66 20  he.   result of 
f6e0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57  evaluating the W
f6f0: 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20 61  HERE clause as a
f700: 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
f710: 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e  sion|.   boolean
f720: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
f730: 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65 64  rue] are deleted
f740: 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
f750: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74  ons on DELETE St
f760: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
f770: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
f780: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
f790: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
f7a0: 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45  ns apply to DELE
f7b0: 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
f7c0: 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
f7d0: 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61  the.   body of a
f7e0: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
f7f0: 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75  ] statement:..<u
f800: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
f810: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
f820: 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
f830: 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54 45  part of a DELETE
f840: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
f850: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
f860: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
f870: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
f880: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
f890: 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65  .    <i>database
f8a0: 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
f8b0: 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
f8c0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f  table name is no
f8d0: 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77  t allowed .    w
f8e0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
f8f0: 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20  ^ ^If the table 
f900: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
f910: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
f920: 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74   is.    not in t
f930: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
f940: 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74  , then DELETE st
f950: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
f960: 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
f970: 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74  body must operat
f980: 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68  e on tables with
f990: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
f9a0: 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
f9b0: 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f  the table.    to
f9c0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
f9d0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
f9e0: 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
f9f0: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
fa00: 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64  .    unqualified
fa10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
fa20: 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  le being deleted
fa30: 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
fa40: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a  the same way as.
fa50: 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61 20      it is for a 
fa60: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
fa70: 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e  ent (by searchin
fa80: 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50  g first the TEMP
fa90: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a   database, then.
faa0: 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74      the main dat
fab0: 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
fac0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
fad0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
fae0: 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61 63  y were.    attac
faf0: 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69  hed)..    .  <li
fb00: 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  ><p>^The INDEXED
fb10: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
fb20: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
fb30: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44  not allowed on D
fb40: 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d  ELETE.    statem
fb50: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
fb60: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
fb70: 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
fb80: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
fb90: 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20 62  ses (described b
fba0: 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70  elow) are unsupp
fbb0: 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45  orted for.    DE
fbc0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
fbd0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
fbe0: 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  </p>.</ul>..<h3>
fbf0: 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
fc00: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
fc10: 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
fc20: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
fc30: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53  iled with the [S
fc40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
fc50: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
fc60: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
fc70: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ption, then the 
fc80: 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45  syntax of the DE
fc90: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
fca0: 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68  s.extended by th
fcb0: 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70  e addition of op
fcc0: 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
fcd0: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
fce0: 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  s:)^</p>..<tcl>B
fcf0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
fd00: 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ete-stmt-limited
fd10: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
fd20: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
fd30: 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c  t has a LIMIT cl
fd40: 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75  ause, the maximu
fd50: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
fd60: 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65   that.will be de
fd70: 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62  leted is found b
fd80: 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
fd90: 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78   accompanying ex
fda0: 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73  pression and cas
fdb0: 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e  ting.it to an in
fdc0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66  teger value. ^If
fdd0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
fde0: 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  he evaluating th
fdf0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63  e LIMIT clause.c
fe00: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
fe10: 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
fe20: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
fe30: 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  e, it is an erro
fe40: 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20  r. ^A .negative 
fe50: 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69  LIMIT value is i
fe60: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
fe70: 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74  o limit". ^(If t
fe80: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
fe90: 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e  ent .also has an
fea0: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
feb0: 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
fec0: 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
fed0: 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e  nd cast to an.in
fee0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61  teger value. Aga
fef0: 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  in, it is an err
ff00: 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  or if the value 
ff10: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
ff20: 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74  ssly.converted t
ff30: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20  o an integer.)^ 
ff40: 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
ff50: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f  OFFSET clause, o
ff60: 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64  r the calculated
ff70: 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69  .integer value i
ff80: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20  s negative, the 
ff90: 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45 54  effective OFFSET
ffa0: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a   value is zero..
ffb0: 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c  .<p>^(If the DEL
ffc0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
ffd0: 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  s an ORDER BY cl
ffe0: 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
fff0: 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a  ows that would .
10000 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
10010 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
10020 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
10030 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
10040 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52  ng to the .ORDER
10050 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c   BY. The first <
10060 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68  i>M</i> rows, wh
10070 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20  ere <i>M</i> is 
10080 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  the value found 
10090 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
100a0 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
100b0 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
100c0 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65  skipped, and the
100d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e   following .<i>N
100e0 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e  </i>, where <i>N
100f0 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
10100 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65  e of the LIMIT e
10110 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64  xpression, are d
10120 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68  eleted.)^.^If th
10130 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
10140 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  n <i>N</i> rows 
10150 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20  remaining after 
10160 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45  taking the OFFSE
10170 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63  T clause.into ac
10180 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65  count, or if the
10190 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76   LIMIT clause ev
101a0 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67  aluated to a neg
101b0 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65  ative value, the
101c0 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20  n all.remaining 
101d0 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
101e0 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45  ...<p>^If the DE
101f0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
10200 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
10210 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
10220 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
10230 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
10240 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
10250 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
10260 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
10270 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
10280 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
10290 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
102a0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
102b0 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65  o determine .the
102c0 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72 65   subset that are
102d0 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65   actually delete
102e0 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44  d...<p>^(The ORD
102f0 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
10300 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
10310 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
10320 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
10330 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
10340 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
10350 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
10360 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  h rows are delet
10370 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
10380 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
10390 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
103a0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
103b0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
103c0 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74  t truncateopt {t
103d0 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
103e0 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
103f0 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74  The Truncate Opt
10400 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  imization</h3>..
10410 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45  <p>^When the WHE
10420 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  RE is omitted fr
10430 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  om a DELETE stat
10440 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61  ement and the ta
10450 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65  ble.being delete
10460 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72  d has no trigger
10470 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61  s,.SQLite uses a
10480 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74  n optimization t
10490 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69  o erase the enti
104a0 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  re table content
104b0 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20  .without having 
104c0 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f  to visit each ro
104d0 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  w of the table i
104e0 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69  ndividually..Thi
104f0 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74  s "truncate" opt
10500 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20  imization makes 
10510 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d  the delete run m
10520 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f  uch faster..Prio
10530 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72  r to SQLite [ver
10540 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65  sion 3.6.5], the
10550 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
10560 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e  zation.also mean
10570 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  t that the [sqli
10580 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
10590 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd.[sqlite3_tota
105a0 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
105b0 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20  erfaces.and the 
105c0 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
105d0 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20  ragma].will not 
105e0 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
105f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
10600 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68  leted rows.  .Th
10610 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
10620 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20  een fixed as of 
10630 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e  [version 3.6.5].
10640 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
10650 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
10660 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
10670 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
10680 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
10690 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
106a0 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
106b0 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
106c0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
106d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
106e0 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
106f0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10700 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
10710 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
10720 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
10730 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
10740 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
10750 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
10760 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
10770 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
10780 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
10790 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
107a0 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
107b0 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
107c0 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
107d0 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
107e0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
107f0 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
10800 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
10810 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
10820 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
10830 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
10840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
10890 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
108a0 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
108b0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
108c0 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
108d0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
108e0 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
108f0 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
10900 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
10910 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
10920 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
10930 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
10940 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
10950 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
10960 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
10970 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
10980 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
10990 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
109a0 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
109b0 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
109c0 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
109d0 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
109e0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
109f0 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
10a00 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
10a10 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
10a20 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
10a30 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
10a40 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
10a50 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
10a60 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
10a70 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
10a80 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
10a90 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
10aa0 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
10ab0 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
10ac0 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
10ad0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
10ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b20 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
10b30 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
10b40 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
10b50 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
10b60 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
10b70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
10b80 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
10b90 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
10ba0 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
10bb0 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
10bc0 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
10bd0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
10be0 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
10bf0 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
10c00 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
10c10 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
10c20 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
10c30 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
10c40 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
10c50 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
10c60 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
10c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
10cc0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
10cd0 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
10ce0 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
10cf0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
10d00 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
10d10 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
10d20 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
10d30 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
10d40 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
10d50 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
10d60 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
10d70 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
10d80 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
10d90 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
10da0 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
10db0 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
10dc0 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
10dd0 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
10de0 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
10df0 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
10e00 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
10e10 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
10e20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
10e30 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
10e40 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
10e50 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
10e60 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
10e70 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
10e80 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
10e90 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
10ea0 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
10eb0 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
10ec0 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
10ed0 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
10ee0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
10ef0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
10f00 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
10f10 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
10f20 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
10f30 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  E | DELETE FROM 
10f40 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f 6d  &lt;tbl&gt;] com
10f50 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f  mand before remo
10f60 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66  ving the.table f
10f70 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
10f80 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72   schema. ^Any tr
10f90 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20  iggers attached 
10fa0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  to the table are
10fb0 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  .dropped from th
10fc0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
10fd0 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70  a before the imp
10fe0 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
10ff0 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a 69  M &lt;tbl&gt; .i
11000 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  s executed, so t
11010 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65  his cannot cause
11020 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f   any triggers to
11030 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61   fire. By contra
11040 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74  st, ^an.implicit
11050 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
11060 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63 61  ;tbl&gt; does ca
11070 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72  use any configur
11080 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  ed.[foreign key 
11090 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65  actions] to take
110a0 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65   place. .^If the
110b0 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
110c0 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
110d0 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61  ; executed.as pa
110e0 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42  rt of a DROP TAB
110f0 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61  LE command viola
11100 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74  tes any immediat
11110 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
11120 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72  nstraints,.an er
11130 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
11140 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
11150 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49   not dropped. ^I
11160 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20  f .the implicit 
11170 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
11180 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20 61  tbl&gt; causes a
11190 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72  ny .deferred for
111a0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
111b0 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61  ints to be viola
111c0 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f  ted, and the vio
111d0 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78  lations still.ex
111e0 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61  ist when the tra
111f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d  nsaction is comm
11200 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20  itted, an error 
11210 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74  is returned at t
11220 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69  he time.of commi
11230 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  t...<tcl>.######
11240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
11290 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
112a0 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
112b0 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65  OP TRIGGER}}..Re
112c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
112d0 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65  gram drop-trigge
112e0 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  r-stmt.</tcl>..<
112f0 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47  p>^The DROP TRIG
11300 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
11310 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
11320 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
11330 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
11340 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63   statement. ^Onc
11350 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74  e removed, the t
11360 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f  rigger definitio
11370 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70  n is no.longer p
11380 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71  resent in the sq
11390 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20  lite_master (or 
113a0 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
113b0 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73  er) table and is
113c0 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e  .not fired by an
113d0 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53  y subsequent INS
113e0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
113f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
11400 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ...<p>^Note that
11410 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
11420 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70  tomatically drop
11430 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
11440 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
11450 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e  .dropped...<tcl>
11460 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
11470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
114a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
114b0 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
114c0 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
114d0 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75  ROP VIEW}}..Recu
114e0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
114f0 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d  am drop-view-stm
11500 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11510 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
11520 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
11530 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
11540 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57  the [CREATE VIEW
11550 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20  ] .  statement. 
11560 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69  ^The view defini
11570 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20  tion is removed 
11580 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
11590 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20  e schema, but . 
115a0 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
115b0 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
115c0 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
115d0 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e   modified...<p>^
115e0 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f  (The view to dro
115f0 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  p is identified 
11600 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65  by the view-name
11610 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20   and optional . 
11620 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73   database-name s
11630 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
11640 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45   of the DROP VIE
11650 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  W statement. Thi
11660 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69  s .  reference i
11670 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67  s resolved using
11680 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72   the standard pr
11690 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a  ocedure for [obj
116a0 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e  ect resolution].
116b0 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68  )^..<p>.  ^If th
116c0 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77  e specified view
116d0 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
116e0 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53   and the IF EXIS
116f0 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  TS clause is not
11700 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20   .  present, it 
11710 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66  is an error. ^If
11720 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
11730 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
11740 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20  und and an IF.  
11750 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
11760 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
11770 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
11780 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74  ent, then the st
11790 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e  atement.  is a n
117a0 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  o-op....<tcl>.##
117b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117f0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
11800 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f  tion {Database O
11810 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c  bject Name Resol
11820 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20  ution} {naming} 
11830 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74  {{object resolut
11840 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ion}}.</tcl>..<p
11850 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61  >.  In SQLite, a
11860 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
11870 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78   (a table, index
11880 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65  , trigger or vie
11890 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  w) is identified
118a0 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  .  by the name o
118b0 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64  f the object and
118c0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
118d0 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69   database that i
118e0 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20  t resides in. . 
118f0 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   Database object
11900 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20  s may reside in 
11910 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11920 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  e, the temp data
11930 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e  base, or in.  an
11940 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65   [ATTACH|attache
11950 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70  d database]...<p
11960 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f  >.  The syntax o
11970 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c  f the [DROP TABL
11980 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  E], [DROP INDEX]
11990 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b  , [DROP VIEW], [
119a0 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20  DROP TRIGGER],. 
119b0 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54   [REINDEX], [ALT
119c0 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61  ER TABLE] and ma
119d0 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  ny other command
119e0 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65  s all permit the
119f0 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69   user to.  speci
11a00 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62  fy a database ob
11a10 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69  ject either by i
11a20 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f  ts name alone, o
11a30 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69  r by a combinati
11a40 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65  on of.  its name
11a50 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
11a60 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e   its database. ^
11a70 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  (If no database 
11a80 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
11a90 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62  part.  of the ob
11aa0 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
11ab0 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72  then SQLite sear
11ac0 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74  ches the main, t
11ad0 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61  emp and all atta
11ae0 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73  ched.  databases
11af0 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77   for an object w
11b00 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
11b10 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61  ame. The temp da
11b20 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
11b30 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c  ed.  first, foll
11b40 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e  owed by the main
11b50 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f   database, follo
11b60 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  wed all attached
11b70 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
11b80 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74  e.  order that t
11b90 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65  hey were attache
11ba0 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65  d. The reference
11bb0 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65   resolves to the
11bc0 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66   first match.  f
11bd0 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d  ound.)^ For exam
11be0 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20  ple:..<pre>^(.  
11bf0 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62      /* Add a tab
11c00 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f  le named 't1' to
11c10 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20   the temp, main 
11c20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20  and an attached 
11c30 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
11c40 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64    ATTACH 'file.d
11c50 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
11c60 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
11c70 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
11c80 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
11c90 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20  t1(x, y);.      
11ca0 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
11cb0 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20  .t1(x, y);..    
11cc0 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
11cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
11ce0 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64   table in temp d
11cf0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
11d00 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
11d10 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
11d20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61  table in main da
11d30 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
11d40 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
11d50 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
11d60 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61  able in aux data
11d70 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e  base */.)^</pre>
11d80 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61  ..<p>.  ^If a da
11d90 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73  tabase name is s
11da0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
11db0 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65   of an object re
11dc0 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74  ference, it must
11dd0 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61   be.  either "ma
11de0 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f  in", or "temp" o
11df0 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
11e00 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
11e10 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a  se. ^Like other.
11e20 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72    SQL identifier
11e30 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  s, database name
11e40 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e  s are case-insen
11e50 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61  sitive. ^If a da
11e60 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73  tabase name.  is
11e70 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
11e80 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20   only the named 
11e90 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72  database is sear
11ea0 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d  ched for the nam
11eb0 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a  ed object...<p>.
11ec0 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65    Most object re
11ed0 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
11ee0 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73  y resolve to a s
11ef0 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20  pecific type of 
11f00 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78  object (for.  ex
11f10 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63  ample a referenc
11f20 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
11f30 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73  f a DROP TABLE s
11f40 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c  tatement may onl
11f50 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61  y resolve.  to a
11f60 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e   table object, n
11f70 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69  ot an index, tri
11f80 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48  gger or view). H
11f90 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63  owever in some c
11fa0 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e  ontexts .  (e.g.
11fb0 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f   [REINDEX]) an o
11fc0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20  bject reference 
11fd0 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74  may be resolve t
11fe0 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  o more than one 
11ff0 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74  type.  of object
12000 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e  . ^When searchin
12010 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
12020 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f  as for a named o
12030 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f  bject, objects o
12040 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63  f.  types that c
12050 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e  annot be used in
12060 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
12070 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72  the reference ar
12080 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f  e always .  igno
12090 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  red...<tcl>.####
120a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120e0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
120f0 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
12100 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
12110 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
12120 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
12130 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
12140 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
12150 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
12160 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
12170 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
12180 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
12190 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
121a0 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
121b0 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
121c0 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
121d0 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
121e0 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
121f0 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
12200 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
12210 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
12220 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
12230 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
12240 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
12250 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  </p>..<p>The out
12260 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e  put from EXPLAIN
12270 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45   and EXPLAIN QUE
12280 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e  RY PLAN is inten
12290 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74  ded for.interact
122a0 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64  ive analysis and
122b0 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67   troubleshooting
122c0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61   only.  The deta
122d0 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70  ils of the .outp
122e0 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75  ut format are su
122f0 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
12300 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65  from one release
12310 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68   of SQLite to th
12320 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74  e next..Applicat
12330 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20  ions should not 
12340 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45  use EXPLAIN or E
12350 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
12360 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78  N since.their ex
12370 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  act behavior is 
12380 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c  variable and onl
12390 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75  y partially docu
123a0 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mented.</p>..<p>
123b0 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  ^When the EXPLAI
123c0 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  N keyword appear
123d0 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63  s by itself it c
123e0 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d  auses the statem
123f0 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73  ent.to behave as
12400 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65   a query that re
12410 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e  turns the sequen
12420 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20  ce of .[virtual 
12430 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74  machine instruct
12440 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68  ions] it would h
12450 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63  ave used to exec
12460 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  ute the command 
12470 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20  had.the EXPLAIN 
12480 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e  keyword not been
12490 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20   present. ^When 
124a0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
124b0 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70  Y PLAN phrase.ap
124c0 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65  pears, the state
124d0 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67  ment returns hig
124e0 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74  h-level informat
124f0 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68  ion regarding th
12500 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61  e query.plan tha
12510 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
12520 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50  n used...The EXP
12530 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
12540 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72  command is descr
12550 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69  ibed in .[explai
12560 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72  n query plan|mor
12570 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a  e detail here]..
12580 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
12590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78  #####.Section ex
125e0 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a  pression expr {*
125f0 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72  expression {expr
12600 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a  ession syntax}}.
12610 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
12620 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74  Diagram expr.</t
12630 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
12640 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
12650 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
12660 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
12670 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
12680 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
12690 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
126a0 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
126b0 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
126c0 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
126d0 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
126e0 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
126f0 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
12700 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
12710 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
12720 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
12730 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
12740 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
12750 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
12760 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
12770 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
12780 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
12790 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
127a0 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
127b0 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
127c0 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
127d0 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
127e0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
127f0 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
12800 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
12810 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
12820 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
12830 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
12840 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
12850 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
12860 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
12870 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
12880 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
12890 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
128a0 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
128b0 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
128c0 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
128d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
128e0 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
128f0 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
12900 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
12910 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
12920 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
12930 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
12940 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
12950 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
12960 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
12970 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
12980 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
12990 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
129a0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
129b0 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
129c0 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
129d0 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
129e0 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
129f0 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
12a00 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
12a10 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
12a20 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
12a30 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
12a40 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
12a50 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
12a60 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny.binary operat
12a70 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79  or and any unary
12a80 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72   prefix operator
12a90 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f   except "~"..(CO
12aa0 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72  LLATE and "~" ar
12ab0 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f  e associative so
12ac0 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f   their binding o
12ad0 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  rder does not ma
12ae0 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c  tter.).^The coll
12af0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73  ating sequence s
12b00 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  et by the COLLAT
12b10 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72  E operator overr
12b20 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69  ides the.collati
12b30 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65  ng sequence dete
12b40 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f  rmined by the CO
12b50 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
12b60 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20  a table.[column 
12b70 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65  definition]..See
12b80 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20   the [collating 
12b90 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c  sequence| detail
12ba0 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e  ed discussion on
12bb0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12bc0 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61  nces].in the [da
12bd0 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70  tatype | Datatyp
12be0 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f  e In SQLite3] do
12bf0 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
12c00 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
12c10 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  n..</p>..<tcl>hd
12c20 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20  _puts ".<p>^The 
12c30 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b  unary operator [
12c40 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61  Operator +] is a
12c50 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e   no-op.  ^It can
12c60 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73   be applied.to s
12c70 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c  trings, numbers,
12c80 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61   blobs or NULL a
12c90 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74  nd it always ret
12ca0 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69  urns a result.wi
12cb0 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  th the same valu
12cc0 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  e as the operand
12cd0 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .</p>"</tcl>..<p
12ce0 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65  >Note that there
12cf0 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69   are two variati
12d00 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  ons of the equal
12d10 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73  s and not equals
12d20 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71  .operators.  ^Eq
12d30 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68  uals can be eith
12d40 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74  er..<tcl>.hd_put
12d50 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
12d60 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
12d70 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c  ..^The non-equal
12d80 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  s operator can b
12d90 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74  e either.[Operat
12da0 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61  or !=] or [Opera
12db0 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e  tor {&lt;&gt;}].
12dc0 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  .^The [Operator 
12dd0 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ||] operator is 
12de0 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20  \"concatenate\" 
12df0 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74  - it joins toget
12e00 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69  her.the two stri
12e10 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61  ngs of its opera
12e20 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74  nds..^The operat
12e30 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
12e40 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75  outputs the valu
12e50 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  e of its left .o
12e60 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
12e70 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
12e80 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
12e90 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
12ea0 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65  ry operator is e
12eb0 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20  ither a numeric 
12ec0 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20  value or .NULL, 
12ed0 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b  except for the [
12ee0 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
12ef0 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
12f00 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73  tor which always
12f10 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65   .evaluates to e
12f20 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
12f30 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22  text value.</p>"
12f40 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69  ..hd_fragment {i
12f50 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72  sisnot} {IS oper
12f60 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70  ator} {IS NOT op
12f70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73  erator}..hd_puts
12f80 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61   "<p>^The [Opera
12f90 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
12fa0 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
12fb0 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c  operators work.l
12fc0 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ike [Operator =]
12fd0 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21   and [Operator !
12fe0 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f  =] except when o
12ff0 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68  ne or both of th
13000 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  e.operands are N
13010 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ULL. ^In this ca
13020 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72  se, if both oper
13030 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  ands are NULL, t
13040 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
13050 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
13060 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68   1 (true) and th
13070 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
13080 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30  r evaluates.to 0
13090 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e   (false). ^If on
130a0 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
130b0 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  L and the other 
130c0 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65  is not, then the
130d0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
130e0 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c  luates to 0 (fal
130f0 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  se) and the IS N
13100 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31  OT operator is 1
13110 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20   (true)..^It is 
13120 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
13130 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54   an IS or IS NOT
13140 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
13150 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  valuate to NULL.
13160 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65  .^Operators [Ope
13170 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
13180 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
13190 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ] have the same 
131a0 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b  .precedence as [
131b0 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c  Operator =]."..<
131c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
131d0 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61  litvalue {litera
131e0 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  l value}</tcl>.<
131f0 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65  h3>Literal Value
13200 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68  s (Constants)</h
13210 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c  3>.<p>.A literal
13220 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
13230 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c  s a constant..^L
13240 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
13250 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
13260 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
13270 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
13280 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
13290 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20  .<p>.The syntax 
132a0 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20  for integer and 
132b0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
132c0 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74  iterals (collect
132d0 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c  ively."numeric l
132e0 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f  iterals") is sho
132f0 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77  wn by the follow
13300 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e  ing diagram:</p>
13310 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
13320 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74  gram numeric-lit
13330 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  eral</tcl>..<p>.
13340 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c  ^(If a numeric l
13350 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63  iteral has a dec
13360 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e  imal point or an
13370 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
13380 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74 73  clause or if its
13390 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65   magnitude is le
133a0 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32  ss than -9223372
133b0 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a  036854775808 or.
133c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32 32  greater than 922
133d0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
133e0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66  , then it is a f
133f0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13400 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65  teral..Otherwise
13410 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e   is it is an  in
13420 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e  teger literal.)^
13430 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61 63  .^The "E" charac
13440 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73 20  ter that begins 
13450 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69  the exponentiati
13460 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66  on.clause of a f
13470 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13480 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74  teral can be eit
13490 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77  her upper or low
134a0 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22  er case..^(The "
134b0 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20  ." character is 
134c0 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20  always used .as 
134d0 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
134e0 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f  t even if the lo
134f0 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65  cale setting spe
13500 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74  cifies "," for.t
13510 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75  his role - the u
13520 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68  se of "," for th
13530 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
13540 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a  would result in.
13550 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75  syntactic ambigu
13560 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ity.)^..<tcl>hd_
13570 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20  fragment hexint 
13580 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
13590 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b  eger literals} {
135a0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
135b0 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  gers}</tcl>.<p>^
135c0 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  Hexadecimal inte
135d0 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c  ger literals fol
135e0 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61  low the C-langua
135f0 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22  ge notation of."
13600 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c  0x" or "0X" foll
13610 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63 69  owed by hexadeci
13620 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72  mal digits..^For
13630 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34   example, 0x1234
13640 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20   means the same 
13650 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30  as 4660.and 0x80
13660 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20 6d  00000000000000 m
13670 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
13680 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
13690 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65  75808.. ^(Hexade
136a0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
136b0 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72  terals are inter
136c0 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69 74  preted as 64-bit
136d0 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e  .two's-complemen
136e0 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61  t integers and a
136f0 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a  re thus limited.
13700 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69  to sixteen signi
13710 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66  ficant digits of
13720 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75   precision.)^.Su
13730 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65  pport for hexade
13740 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
13750 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69  as added to SQLi
13760 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36  te version 3.8.6
13770 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73  ..^For backwards
13780 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20   compatibility, 
13790 74 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63  the "0x" hexadec
137a0 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74  imal integer.not
137b0 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e  ation is only un
137c0 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20  derstood by the 
137d0 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72  SQL language par
137e0 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a  ser, not by the.
137f0 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  type conversions
13800 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72   routines..^(Str
13810 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68  ing variables th
13820 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20  at.contain text 
13830 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68  formatted like h
13840 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13850 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65  ers are not.inte
13860 72 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64  rpreted as hexad
13870 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
13880 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68  when coercing th
13890 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69  e string value.i
138a0 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64  nto an integer d
138b0 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78  ue to a [CAST ex
138c0 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72  pression] or for
138d0 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e   a [column affin
138e0 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74  ity].transformat
138f0 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20  ion or prior to 
13900 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d  performing a num
13910 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f  eric operation o
13920 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20  r for.any other 
13930 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73  run-time convers
13940 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20  ions.)^  ^(When 
13950 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e  coercing a.strin
13960 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66  g value in the f
13970 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64  ormat of a hexad
13980 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69  ecimal integer i
13990 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76  nto an integer.v
139a0 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72  alue, the conver
139b0 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f  sion process sto
139c0 70 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20  ps when the 'x' 
139d0 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65  character is see
139e0 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69  n.so the resulti
139f0 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ng integer value
13a00 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e   is always zero.
13a10 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79  )^.^(SQLite only
13a20 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
13a30 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
13a40 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68  eger notation wh
13a50 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e  en it.appears in
13a60 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
13a70 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65  nt text, not whe
13a80 6e 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a  n it appears as.
13a90 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74  part of the cont
13aa0 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
13ab0 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73  ase.)^..<p> ^A s
13ac0 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
13ad0 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
13ae0 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
13af0 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
13b00 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
13b10 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
13b20 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
13b30 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
13b40 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
13b50 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
13b60 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
13b70 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
13b80 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
13b90 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
13ba0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
13bb0 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
13bc0 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
13bd0 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74  ...<p> ^BLOB lit
13be0 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67  erals are string
13bf0 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69   literals contai
13c00 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c  ning hexadecimal
13c10 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64   data and.preced
13c20 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22  ed by a single "
13c30 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63  x" or "X" charac
13c40 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a  ter.  ^(Example:
13c50 20 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27   X'53514C697465'
13c60 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72  )^..<p>.^A liter
13c70 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73  al value can als
13c80 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22  o be the token "
13c90 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  NULL"..</p>..<tc
13ca0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
13cb0 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72  rparam parameter
13cc0 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75   parameters {bou
13cd0 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62  nd parameter} {b
13ce0 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d  ound parameters}
13cf0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d  </tcl>.<h3>Param
13d00 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41  eters</h3>.<p>.A
13d10 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22   "variable" or "
13d20 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e  parameter" token
13d30 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61  .specifies a pla
13d40 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20  ceholder in the 
13d50 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61  expression for a
13d60 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20   .value that is 
13d70 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e  filled in at run
13d80 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
13d90 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
13da0 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
13db0 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20  nd()] family of 
13dc0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73  C/C++ interfaces
13dd0 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e  ..Parameters can
13de0 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f   take several fo
13df0 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  rms:.</p>..<bloc
13e00 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
13e10 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
13e20 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
13e30 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e  op"><b>?</b><i>N
13e40 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  NN</i></td><td w
13e50 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
13e60 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e  <td>^(A question
13e70 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62   mark followed b
13e80 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e  y a number <i>NN
13e90 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70  N</i> holds a sp
13ea0 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74  ot for the.NNN-t
13eb0 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e  h parameter.  NN
13ec0 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65  N must be betwee
13ed0 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  n 1 and [SQLITE_
13ee0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13ef0 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f  BER].)^.</td>.</
13f00 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
13f10 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
13f20 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
13f30 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
13f40 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
13f50 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74   question mark t
13f60 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f  hat is not follo
13f70 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
13f80 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65  creates a parame
13f90 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65  ter.with a numbe
13fa0 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  r one greater th
13fb0 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  an the largest p
13fc0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
13fd0 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
13fe0 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73  ..^If this means
13ff0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e   the parameter n
14000 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72  umber is greater
14010 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41   than.[SQLITE_MA
14020 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14030 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  R], it is an err
14040 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74  or..This paramet
14050 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f  er format is pro
14060 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
14070 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68  ibility with oth
14080 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69  er database.engi
14090 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73  nes.  But becaus
140a0 65 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20  e it is easy to 
140b0 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65  miscount the que
140c0 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65  stion marks, the
140d0 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72  .use of this par
140e0 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73  ameter format is
140f0 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50   discouraged.  P
14100 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
14110 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65  ncouraged.to use
14120 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62   one of the symb
14130 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c  olic formats bel
14140 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66  ow or the ?NNN f
14150 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74  ormat above inst
14160 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ead..</td>.</tr>
14170 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14180 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14190 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e  top"><b>:</b><i>
141a0 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
141b0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
141c0 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66  >.<td>^A colon f
141d0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
141e0 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f  entifier name ho
141f0 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
14200 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   .[sqlite3_bind_
14210 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e  parameter_name|n
14220 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20  amed parameter] 
14230 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41  with the name :A
14240 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70  AAA.  .^(Named p
14250 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
14260 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65  so numbered. The
14270 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
14280 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20   is one greater 
14290 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74  than.the largest
142a0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
142b0 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
142c0 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d  ed.)^ ^If this m
142d0 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
142e0 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69  er.would be assi
142f0 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72  gned a number gr
14300 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49  eater than [SQLI
14310 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
14320 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61  NUMBER], it is.a
14330 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69  n error. To avoi
14340 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20  d confusion, it 
14350 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64  is best to avoid
14360 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e   mixing named an
14370 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d  d numbered.param
14380 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  eters.</td>.</tr
14390 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
143a0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
143b0 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69  "top"><b>@</b><i
143c0 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
143d0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
143e0 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20  d>.<td>^An "at" 
143f0 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74  sign works exact
14400 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c  ly like a colon,
14410 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
14420 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72   name of.the par
14430 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69  ameter created i
14440 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f  s @AAAA.</td>.</
14450 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
14460 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
14470 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
14480 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
14490 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
144a0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c  /td>.<td>^A doll
144b0 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64  ar-sign followed
144c0 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
144d0 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64  r name also hold
144e0 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e  s a spot for a n
144f0 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77  amed.parameter w
14500 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41  ith the name $AA
14510 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74  AA.  ^(The ident
14520 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68  ifier name in th
14530 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c  is case can incl
14540 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ude.one or more 
14550 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22  occurrences of "
14560 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78  ::" and a suffix
14570 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e   enclosed in "(.
14580 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ..)" containing.
14590 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e  any text at all.
145a0 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20  )^  This syntax 
145b0 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61  is the form of a
145c0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69   variable name i
145d0 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77  n the.[http://ww
145e0 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20  w.tcl.tk/ | Tcl 
145f0 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
14600 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73  uage].  The pres
14610 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e  ence.of this syn
14620 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  tax results from
14630 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53   the fact that S
14640 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20  QLite is really 
14650 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f  a .[Tcl extensio
14660 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61  n] that has esca
14670 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c  ped into the wil
14680 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  d.</td>.</tr>.</
14690 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
146a0 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65  ote>..<p>^Parame
146b0 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
146c0 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
146d0 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  s using.[sqlite3
146e0 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
146f0 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61  qlite3_bind()] a
14700 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
14710 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  LL.  The [sqlite
14720 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
14730 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72 66  _index()] interf
14740 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 0a  ace can be used.
14750 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20 73  to translate a s
14760 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74 65  ymbolic paramete
14770 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73 20  r name into its 
14780 65 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65 72  equivalent numer
14790 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c  ic index.</p>..<
147a0 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  p>^The maximum p
147b0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
147c0 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c  is set at compil
147d0 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53  e-time by.the [S
147e0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
147f0 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f  LE_NUMBER] macro
14800 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75  .  ^(An individu
14810 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  al [database con
14820 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20 72  nection].D can r
14830 65 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75  educe its maximu
14840 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
14850 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d  er below the com
14860 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75  pile-time maximu
14870 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  m.using the [sql
14880 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b  ite3_limit](D, [
14890 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52  SQLITE_LIMIT_VAR
148a0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e  IABLE_NUMBER],..
148b0 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a  .) interface.)^.
148c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
148d0 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45  agment like LIKE
148e0 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68   ESCAPE</tcl>.<h
148f0 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  3>The LIKE and G
14900 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68  LOB operators</h
14910 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20  3>.<p>^The LIKE 
14920 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20  operator does a 
14930 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67  pattern matching
14940 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68   comparison. ^Th
14950 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65  e operand.to the
14960 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49   right of the LI
14970 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74  KE operator cont
14980 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e  ains the pattern
14990 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61   and the left ha
149a0 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61  nd.operand conta
149b0 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74  ins the string t
149c0 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20  o match against 
149d0 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74  the pattern...<t
149e0 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70  cl>hd_puts "^A p
149f0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c  ercent symbol (\
14a00 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "%\") in the LIK
14a10 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
14a20 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f  s any.sequence o
14a30 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63  f zero or more c
14a40 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
14a50 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e   string.  ^An un
14a60 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29  derscore.(\"_\")
14a70 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
14a80 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79  tern matches any
14a90 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
14aa0 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e  r in the.string.
14ab0 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68    ^(Any other ch
14ac0 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20  aracter matches 
14ad0 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f  itself or its lo
14ae0 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65  wer/upper case.e
14af0 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20  quivalent (i.e. 
14b00 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
14b10 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28   matching).)^  (
14b20 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f  A bug: ^SQLite o
14b30 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20  nly.understands 
14b40 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65  upper/lower case
14b50 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
14b60 63 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74  cters by default
14b70 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65  .  ^The.LIKE ope
14b80 72 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65  rator is case se
14b90 6e 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75  nsitive by defau
14ba0 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63  lt for unicode c
14bb0 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
14bc0 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53  re.beyond the AS
14bd0 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20  CII range.  For 
14be0 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78  example,.^the ex
14bf0 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26  pression <b>'a'&
14c00 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
14c10 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62  A'</b>.is TRUE b
14c20 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26  ut <b>'&aelig;'&
14c30 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
14c40 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20  &AElig;'</b> is 
14c50 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c  FALSE.)<p>"</tcl
14c60 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
14c70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c  tional ESCAPE cl
14c80 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
14c90 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
14ca0 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74  sion.following t
14cb0 68 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72  he ESCAPE keywor
14cc0 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20  d must evaluate 
14cd0 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  to a string cons
14ce0 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67  isting of.a sing
14cf0 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54  le character. ^T
14d00 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61  his character ma
14d10 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  y be used in the
14d20 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f   LIKE pattern.to
14d30 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c   include literal
14d40 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65   percent or unde
14d50 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72  rscore character
14d60 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63  s. ^The escape.c
14d70 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65  haracter followe
14d80 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73  d by a percent s
14d90 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72  ymbol (%), under
14da0 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20  score (_), or a 
14db0 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20  second.instance 
14dc0 6f 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68  of the escape ch
14dd0 61 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d  aracter itself m
14de0 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c  atches a.literal
14df0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c   percent symbol,
14e00 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20   underscore, or 
14e10 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20  a single escape 
14e20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65  character,.respe
14e30 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68  ctively...<p>^Th
14e40 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65  e infix LIKE ope
14e50 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65  rator is impleme
14e60 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
14e70 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d  the.application-
14e80 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63  defined SQL func
14e90 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59  tions [like(<i>Y
14ea0 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20  </i>,<i>X</i>)] 
14eb0 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69  or.[like(<i>Y</i
14ec0 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c  >,<i>X</i>,<i>Z<
14ed0 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  /i>)]</a>.</p>..
14ee0 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65  <p>^The LIKE ope
14ef0 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64  rator can be mad
14f00 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
14f10 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65   using the.[case
14f20 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20  _sensitive_like 
14f30 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74  pragma].</p>..<t
14f40 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67  cl>hd_fragment g
14f50 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c  lob GLOB</tcl>.<
14f60 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72  p>^The GLOB oper
14f70 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20  ator is similar 
14f80 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73  to LIKE but uses
14f90 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67   the Unix.file g
14fa0 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66  lobbing syntax f
14fb0 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73  or its wildcards
14fc0 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69  .  ^Also, GLOB i
14fd0 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65  s case.sensitive
14fe0 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20  , unlike LIKE.  
14ff0 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c  ^Both GLOB and L
15000 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65  IKE may be prece
15010 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b  ded by.the NOT k
15020 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74  eyword to invert
15030 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68   the sense of th
15040 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e  e test.  ^The in
15050 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74  fix GLOB .operat
15060 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  or is implemente
15070 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
15080 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28   function.[glob(
15090 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
150a0 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d  >)] and can be m
150b0 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72  odified by overr
150c0 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74  iding.that funct
150d0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ion.</p>..<tcl>h
150e0 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78  d_fragment regex
150f0 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c  p REGEXP</tcl>.<
15100 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70  p>^The REGEXP op
15110 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63  erator is a spec
15120 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74  ial syntax for t
15130 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72  he regexp().user
15140 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20   function.  ^No 
15150 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75  regexp() user fu
15160 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
15170 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64  d by default.and
15180 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52   so use of the R
15190 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77  EGEXP operator w
151a0 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73  ill normally res
151b0 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20  ult in an.error 
151c0 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e  message.  ^If an
151d0 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   [application-de
151e0 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
151f0 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78  on] named "regex
15200 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72  p".is added at r
15210 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  un-time, then th
15220 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45  e "<i>X</i> REGE
15230 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65  XP <i>Y</i>" ope
15240 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d  rator will.be im
15250 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
15260 61 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c  all to "regexp(<
15270 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15280 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )".</p>..<tcl>hd
15290 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
152a0 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
152b0 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
152c0 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
152d0 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
152e0 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
152f0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
15300 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
15310 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
15320 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
15330 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
15340 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
15350 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
15360 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
15370 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
15380 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
15390 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
153a0 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
153b0 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
153c0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
153d0 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
153e0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
153f0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
15400 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
15410 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
15420 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
15430 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
15440 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
15450 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
15460 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
15470 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
15480 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
15490 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
154a0 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
154b0 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
154c0 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
154d0 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
154e0 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
154f0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
15500 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
15510 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
15520 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
15530 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
15540 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
15550 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
15560 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
15570 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
15580 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
15590 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
155a0 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
155b0 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
155c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
155d0 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
155e0 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
155f0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
15600 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
15610 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
15620 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
15630 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
15640 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
15650 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
15660 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
15670 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
15680 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
15690 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
156a0 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
156b0 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
156c0 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
156d0 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
156e0 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
156f0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
15700 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
15710 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
15720 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
15730 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
15740 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
15750 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
15760 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
15770 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
15780 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
15790 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
157a0 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
157b0 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
157c0 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
157d0 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
157e0 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
157f0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
15800 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
15810 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
15820 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
15830 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
15840 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
15850 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
15860 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
15870 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
15880 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
15890 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
158a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
158b0 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
158c0 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
158d0 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
158e0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
158f0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
15900 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
15910 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
15920 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
15930 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
15940 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
15950 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
15960 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
15970 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
15980 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
15990 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
159a0 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
159b0 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
159c0 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
159d0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
159e0 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
159f0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
15a00 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
15a10 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
15a20 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
15a30 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
15a40 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
15a50 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
15a60 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
15a70 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
15a80 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
15a90 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
15aa0 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
15ab0 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
15ac0 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
15ad0 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
15ae0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
15af0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
15b00 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
15b10 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
15b20 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
15b30 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
15b40 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
15b50 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
15b60 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
15b70 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
15b80 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
15b90 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15ba0 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
15bb0 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
15bc0 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
15bd0 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
15be0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
15bf0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
15c00 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
15c10 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
15c20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
15c30 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
15c40 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
15c50 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
15c60 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
15c70 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
15c80 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
15c90 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
15ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
15cb0 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
15cc0 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
15cd0 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
15ce0 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
15cf0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
15d00 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
15d10 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
15d20 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
15d30 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
15d40 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
15d50 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
15d60 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
15d70 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
15d80 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15d90 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
15da0 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
15db0 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
15dc0 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
15dd0 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
15de0 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
15df0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
15e00 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
15e10 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
15e20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
15e30 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
15e40 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
15e50 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
15e60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
15e70 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
15e80 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
15e90 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
15ea0 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
15eb0 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
15ec0 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
15ed0 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
15ee0 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
15ef0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
15f00 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
15f10 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
15f20 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
15f30 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
15f40 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
15f50 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
15f60 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
15f70 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
15f80 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
15f90 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
15fa0 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
15fb0 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
15fc0 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
15fd0 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
15fe0 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
15ff0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
16000 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
16010 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
16020 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
16030 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
16040 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
16050 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
16060 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
16070 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
16080 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
16090 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
160a0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
160b0 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
160c0 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
160d0 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
160e0 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
160f0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
16100 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
16110 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
16120 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
16130 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
16140 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
16150 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
16160 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
16170 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
16180 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
16190 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
161a0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
161b0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
161c0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
161d0 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
161e0 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
161f0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
16200 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
16210 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
16220 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
16230 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
16240 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
16250 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
16260 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
16270 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
16280 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
16290 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
162a0 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
162b0 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
162c0 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
162d0 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
162e0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
162f0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16300 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16310 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16320 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16330 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16340 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
16350 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16360 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
16370 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
16380 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
16390 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
163a0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
163b0 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
163c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
163d0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
163e0 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
163f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
16400 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
16410 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16420 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16430 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
16440 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16450 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16460 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
16470 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16480 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
16490 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
164a0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
164b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
164c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
164d0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
164e0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
164f0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16500 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16510 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
16520 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
16530 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
16540 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
16550 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
16560 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
16570 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
16580 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
16590 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
165a0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
165b0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
165c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
165d0 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
165e0 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
165f0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
16600 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
16610 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
16620 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
16630 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
16640 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
16650 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
16660 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
16670 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
16680 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
16690 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
166a0 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
166b0 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
166c0 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
166d0 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
166e0 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
166f0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
16700 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
16710 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
16720 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
16730 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
16740 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
16750 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
16760 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
16770 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
16780 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
16790 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
167a0 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
167b0 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
167c0 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
167d0 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
167e0 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
167f0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
16800 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
16810 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
16820 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
16830 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
16840 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
16850 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
16860 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
16870 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
16880 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
16890 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
168a0 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
168b0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
168c0 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
168d0 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
168e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
168f0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
16900 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
16910 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
16920 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
16930 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
16940 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16950 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
16960 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
16970 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
16980 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
16990 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
169a0 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
169b0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
169c0 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
169d0 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
169e0 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
169f0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
16a00 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
16a10 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
16a20 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
16a30 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
16a40 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
16a50 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
16a60 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
16a70 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
16a80 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
16a90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16aa0 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
16ab0 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
16ac0 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
16ad0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
16ae0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
16af0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
16b00 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
16b10 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
16b20 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
16b30 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
16b40 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
16b50 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
16b60 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
16b70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
16b80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
16b90 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
16ba0 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
16bb0 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
16bc0 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
16bd0 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
16be0 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
16bf0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
16c00 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
16c10 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
16c20 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
16c30 67 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75  gate and [compou
16c40 6e 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69  nd SELECT].queri
16c50 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68  es (queries with
16c60 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55   keywords like U
16c70 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20  NION or EXCEPT) 
16c80 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73  are allowed as s
16c90 63 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73  calar.subqueries
16ca0 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c  ...<h3>Table Col
16cb0 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a  umn Names</h3>..
16cc0 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  <p>^A column nam
16cd0 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
16ce0 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
16cf0 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
16d00 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
16d10 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
16d20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
16d30 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
16d40 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
16d50 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
16d60 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
16d70 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70 65  ..^The three spe
16d80 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
16d90 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e   describe the.un
16da0 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79  ique integer key
16db0 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61   (the [rowid]) a
16dc0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
16dd0 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65  very .row of eve
16de0 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20  ry table and so 
16df0 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
16e00 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f  e on [WITHOUT RO
16e10 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68  WID] tables..^Th
16e20 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
16e30 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
16e40 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
16e50 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
16e60 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
16e70 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
16e80 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
16e90 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
16ea0 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
16eb0 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
16ec0 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
16ed0 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
16ee0 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  /p>..<p>^A [SELE
16ef0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73  CT] statement us
16f00 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73  ed as either a s
16f10 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f  calar subquery o
16f20 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d  r as the .right-
16f30 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20  hand operand of 
16f40 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72  an IN, NOT IN or
16f50 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69   EXISTS expressi
16f60 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a  on may contain .
16f70 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f  references to co
16f80 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74  lumns in the out
16f90 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61  er query. Such a
16fa0 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f   subquery is kno
16fb0 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74  wn as.a correlat
16fc0 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20  ed subquery. ^A 
16fd0 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
16fe0 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74  ery is reevaluat
16ff0 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73  ed each time.its
17000 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69   result is requi
17010 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65  red. ^An uncorre
17020 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
17030 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79  s evaluated only
17040 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65   once.and the re
17050 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e  sult reused as n
17060 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e  ecessary...<tcl>
17070 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
17080 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
17090 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63  ssion} {CAST} {c
170a0 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61  ast} {CAST opera
170b0 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  tor}</tcl>.<h3>C
170c0 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c  AST expressions<
170d0 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20  /h3>..<p>A CAST 
170e0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
170f0 65 20 66 6f 72 6d 20 22 43 41 53 54 28 26 6c 74  e form "CAST(&lt
17100 3b 65 78 70 72 26 67 74 3b 20 41 53 20 26 6c 74  ;expr&gt; AS &lt
17110 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 29 22  ;type-name&gt;)"
17120 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76  .is used to conv
17130 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ert the value of
17140 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 74 6f   &lt;expr&gt; to
17150 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73   .a different [s
17160 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70  torage class] sp
17170 65 63 69 66 69 65 64 20 62 79 20 26 6c 74 3b 74  ecified by &lt;t
17180 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41  ype-name&gt;..^A
17190 20 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e   CAST conversion
171a0 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
171b0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68  he conversion th
171c0 61 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77  at takes.place w
171d0 68 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66  hen a [column af
171e0 66 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69  finity] is appli
171f0 65 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65 78  ed to a value ex
17200 63 65 70 74 20 74 68 61 74 20 77 69 74 68 0a 74  cept that with.t
17210 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72  he CAST operator
17220 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
17230 61 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c 61  always takes pla
17240 63 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 63  ce even if the c
17250 6f 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20  onversion.lossy 
17260 61 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65  and irreversible
17270 2c 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e  , whereas column
17280 20 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63   affinity only c
17290 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 20  hanges the data 
172a0 74 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65 20  type.of a value 
172b0 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 69 73  if the change is
172c0 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65   lossless and re
172d0 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49  versible...<p>^I
172e0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26  f the value of &
172f0 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20 4e  lt;expr&gt; is N
17300 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ULL, then the re
17310 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54  sult of the CAST
17320 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61  .expression is a
17330 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72  lso NULL. ^Other
17340 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61 67  wise, the storag
17350 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72  e class of the r
17360 65 73 75 6c 74 0a 69 73 20 64 65 74 65 72 6d 69  esult.is determi
17370 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20  ned by applying 
17380 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64  the [rules for d
17390 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d  etermining colum
173a0 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74  n affinity] to.t
173b0 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65  he &lt;type-name
173c0 26 67 74 3b 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f  &gt;...<table bo
173d0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c  rder=1>.<tr>.  <
173e0 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20  th> Affinity of 
173f0 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
17400 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  ;.  <th> Convers
17410 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
17420 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
17430 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
17440 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26 6c   a value to a &l
17450 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20  t;type-name&gt; 
17460 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
17470 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c 75   causes the valu
17480 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72  e to.  be conver
17490 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e  ted into a BLOB.
174a0 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20    ^Casting to a 
174b0 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66  BLOB consists of
174c0 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20   first casting. 
174d0 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45   the value to TE
174e0 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64  XT in the [encod
174f0 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ing] of the data
17500 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  base connection,
17510 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65   then.  interpre
17520 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69  ting the resulti
17530 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63 65  ng byte sequence
17540 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
17550 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a  ad of as TEXT...
17560 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54  <tr>.  <td> TEXT
17570 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74  .  <td> ^To cast
17580 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
17590 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75 65   TEXT, the seque
175a0 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68 61  nce of bytes tha
175b0 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20 20  t make up the.  
175c0 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72 65  BLOB is interpre
175d0 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63 6f  ted as text enco
175e0 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64 61  ded using the da
175f0 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e  tabase encoding.
17600 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69  .  <p>.   ^Casti
17610 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f 72  ng an INTEGER or
17620 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
17630 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74 68   TEXT renders th
17640 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76 69  e value as if vi
17650 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33 5f  a .    [sqlite3_
17660 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63 65  snprintf()] exce
17670 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73 75  pt that the resu
17680 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73 20  lting TEXT uses 
17690 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
176a0 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62 61  f.    the databa
176b0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a  se connection...
176c0 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c  <tr>.  <td> REAL
176d0 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61  .  <td> ^When ca
176e0 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c  sting a BLOB val
176f0 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74 68  ue to a REAL, th
17700 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74  e value is first
17710 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20   converted to.  
17720 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20        TEXT..    
17730 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
17740 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65  ing a TEXT value
17750 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f   to REAL, the lo
17760 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
17770 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
17780 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
17790 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
177a0 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
177b0 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
177c0 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
177d0 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
177e0 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
177f0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
17800 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
17810 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
17820 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72 65  value are ignore
17830 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e  d when convergin
17840 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 52  g from TEXT to R
17850 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65 20  EAL. ^(If there 
17860 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 72  is.        no pr
17870 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
17880 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
17890 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74  a real number, t
178a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
178b0 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 73  .        convers
178c0 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c  ion is 0.0.)^..<
178d0 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47  tr>.  <td> INTEG
178e0 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20  ER.  <td> ^When 
178f0 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76  casting a BLOB v
17900 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
17910 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
17920 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
17930 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
17940 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
17950 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
17960 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  lue to INTEGER, 
17970 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
17980 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
17990 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
179a0 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
179b0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
179c0 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69 73  nteger number is
179d0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
179e0 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
179f0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
17a00 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
17a10 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
17a20 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
17a30 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
17a40 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20  when converting 
17a50 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e 54  from TEXT to INT
17a60 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65 64  EGER are ignored
17a70 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20 20  . ^If there.    
17a80 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69 78      is no prefix
17a90 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
17aa0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
17ab0 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20 74  nteger number, t
17ac0 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20  he result.      
17ad0 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73    of the convers
17ae0 69 6f 6e 20 69 73 20 30 2e 20 20 5e 28 54 68 65  ion is 0.  ^(The
17af0 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 75   CAST operator u
17b00 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69 6d  nderstands decim
17b10 61 6c 20 69 6e 74 65 67 65 72 73 0a 20 20 20 20  al integers.    
17b20 20 20 20 20 6f 6e 6c 79 20 26 6d 64 61 73 68 3b      only &mdash;
17b30 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 5b   conversion of [
17b40 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
17b50 67 65 72 73 5d 20 73 74 6f 70 73 20 61 74 20 74  gers] stops at t
17b60 68 65 20 22 78 22 20 69 6e 20 74 68 65 0a 20 20  he "x" in the.  
17b70 20 20 20 20 20 20 22 30 78 22 20 70 72 65 66 69        "0x" prefi
17b80 78 20 6f 66 20 74 68 65 20 68 65 78 61 64 65 63  x of the hexadec
17b90 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74 72  imal integer str
17ba0 69 6e 67 20 61 6e 64 20 74 68 75 73 20 72 65 73  ing and thus res
17bb0 75 6c 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ult of the .    
17bc0 20 20 20 20 43 41 53 54 20 69 73 20 61 6c 77 61      CAST is alwa
17bd0 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20 20  ys zero.)^..    
17be0 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20    <p>^A cast of 
17bf0 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74  a REAL value int
17c00 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65 73  o an INTEGER res
17c10 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74 65  ults in the inte
17c20 67 65 72 0a 20 20 20 20 20 20 62 65 74 77 65 65  ger.      betwee
17c30 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65  n the REAL value
17c40 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20 69   and zero that i
17c50 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68 65  s closest to the
17c60 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20 20   REAL value..   
17c70 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69 73     ^If a REAL is
17c80 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
17c90 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69  e greatest possi
17ca0 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20  ble signed.     
17cb0 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33 33   integer (+92233
17cc0 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
17cd0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17ce0 69 73 20 74 68 65 20 67 72 65 61 74 65 73 74 20  is the greatest 
17cf0 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73  possible.      s
17d00 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e  igned integer an
17d10 64 20 69 66 20 74 68 65 20 52 45 41 4c 20 69 73  d if the REAL is
17d20 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6c   less than the l
17d30 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  east possible si
17d40 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
17d50 65 72 20 28 2d 39 32 32 33 33 37 32 30 33 36 38  er (-92233720368
17d60 35 34 37 37 35 38 30 38 29 20 74 68 65 6e 20 74  54775808) then t
17d70 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
17d80 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 0a   least possible.
17d90 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74        signed int
17da0 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70 3e  eger...      <p>
17db0 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
17dc0 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 2c 20 63  version 3.8.2, c
17dd0 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76 61  asting a REAL va
17de0 6c 75 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  lue greater than
17df0 0a 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30  .      +92233720
17e00 33 36 38 35 34 37 37 35 38 30 37 2e 30 20 69 6e  36854775807.0 in
17e10 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
17e20 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d 6f  sulted in the mo
17e30 73 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  st negative.    
17e40 20 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32 33    integer, -9223
17e50 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e  372036854775808.
17e60 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20    This behavior 
17e70 77 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75  was meant to emu
17e80 6c 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 62  late the.      b
17e90 65 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f 78  ehavior of x86/x
17ea0 36 34 20 68 61 72 64 77 61 72 65 20 77 68 65 6e  64 hardware when
17eb0 20 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69 76   doing the equiv
17ec0 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72  alent cast...<tr
17ed0 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43  >.  <td> NUMERIC
17ee0 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
17ef0 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20   a TEXT or BLOB 
17f00 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52  value into NUMER
17f10 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20  IC first does a 
17f20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72  forced.   conver
17f30 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62  sion into REAL b
17f40 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20  ut then further 
17f50 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73  converts the res
17f60 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52  ult into INTEGER
17f70 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20   if.   and only 
17f80 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  if the conversio
17f90 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49  n from REAL to I
17fa0 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65  NTEGER is lossle
17fb0 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
17fc0 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68  e..   This is th
17fd0 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69  e only context i
17fe0 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74  n SQLite where t
17ff0 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49  he NUMERIC and I
18000 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69  NTEGER [affiniti
18010 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69  es].   behave di
18020 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70  fferently..   <p
18030 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41  > ^Casting a REA
18040 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c  L or INTEGER val
18050 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73  ue to NUMERIC is
18060 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69   a no-op, even i
18070 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75  f a real.   valu
18080 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c  e could be lossl
18090 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
180a0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a  to an integer...
180b0 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a  </tr>..</table>.
180c0 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
180d0 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63  he result from c
180e0 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42  asting any non-B
180f0 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
18100 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72   .BLOB and the r
18110 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
18120 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75  ng any BLOB valu
18130 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f  e into a non-BLO
18140 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64  B value.may be d
18150 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69  ifferent dependi
18160 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ng on whether th
18170 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f  e database [enco
18180 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a  ding] is UTF-8,.
18190 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46  UTF-16be, or UTF
181a0 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64  -16le....<tcl>hd
181b0 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61  _fragment boolea
181c0 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65  nexpr {boolean e
181d0 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
181e0 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70  .<h3>Boolean Exp
181f0 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
18200 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  p>The SQL langua
18210 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65  ge features seve
18220 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65  ral contexts whe
18230 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  re an expression
18240 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61   is .evaluated a
18250 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  nd the result co
18260 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f  nverted to a boo
18270 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61  lean (true or fa
18280 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73  lse) value. Thes
18290 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a  e.contexts are:.
182a0 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e  .  <ul>.    <li>
182b0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
182c0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55  e of a SELECT, U
182d0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20  PDATE or DELETE 
182e0 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
182f0 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53  li> the ON or US
18300 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
18310 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54  join in a SELECT
18320 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
18330 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20  <li> the HAVING 
18340 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
18350 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20  CT statement,.  
18360 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20    <li> the WHEN 
18370 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c  clause of an SQL
18380 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20   trigger, and.  
18390 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20    <li> the WHEN 
183a0 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65  clause or clause
183b0 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65  s of some CASE e
183c0 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f  xpressions..  </
183d0 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e  ul>..<p>^(To con
183e0 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73  vert the results
183f0 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65   of an SQL expre
18400 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65  ssion to a boole
18410 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65  an value, SQLite
18420 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65  .first casts the
18430 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d   result to a NUM
18440 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68  ERIC value in th
18450 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20  e same way as a 
18460 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  .[CAST expressio
18470 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a 65  n]. A numeric ze
18480 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65  ro value (intege
18490 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61  r value 0 or rea
184a0 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69 73  l .value 0.0) is
184b0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
184c0 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c  e false.  A NULL
184d0 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c 20   value is still 
184e0 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20  NULL..All other 
184f0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
18500 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c  dered true.)^..<
18510 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c  p>^(For example,
18520 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c   the values NULL
18530 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69  , 0.0, 0, 'engli
18540 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65 20  sh' and '0' are 
18550 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74  all considered.t
18560 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28  o be false.)^ ^(
18570 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30  Values 1, 1.0, 0
18580 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65  .1, -0.1 and '1e
18590 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73  nglish' are cons
185a0 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72  idered to .be tr
185b0 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74  ue.)^..<h3>Funct
185c0 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c  ions</h3>.<p>SQL
185d0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
185e0 79 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70  y [corefunc|simp
185f0 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63  le] and [aggfunc
18600 7c 61 67 67 72 65 67 61 74 65 5d 0a 53 51 4c 20  |aggregate].SQL 
18610 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20  functions.  For 
18620 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72  presentation pur
18630 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75  poses, simple fu
18640 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74  nctions are furt
18650 68 65 72 0a 73 75 62 64 69 76 69 64 65 64 20 69  her.subdivided i
18660 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c 20  nto [corefunc | 
18670 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  core functions] 
18680 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 7c 64 61  and [datefunc|da
18690 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te-time function
186a0 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  s]..Applications
186b0 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e   can add new fun
186c0 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e 20  ctions, written 
186d0 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67 20  in C/C++, using 
186e0 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  the.[sqlite3_cre
186f0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
18700 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a  interface..</p>.
18710 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73 69  .<p>^It is possi
18720 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20 61  ble to have an a
18730 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18740 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
18750 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c 65  name as a.simple
18760 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c 6f   function, as lo
18770 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  ng as the number
18780 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 6f   of arguments fo
18790 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73 20  r the two forms 
187a0 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e 20  of the.function 
187b0 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20 20  are different.  
187c0 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68  ^For example, th
187d0 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28 29  e [agg_max|max()
187e0 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ] function with 
187f0 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a.single argumen
18800 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  t is an aggregat
18810 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28 29  e and the [max()
18820 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ] function with 
18830 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67 75  two or more.argu
18840 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70 6c  ments is a simpl
18850 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63  e function...<tc
18860 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
18870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188b0 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20  #.Section {Core 
188c0 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66  Functions} coref
188d0 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a  unc {*corefunc}.
188e0 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79  proc funcdef {sy
188f0 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65  ntax keywords de
18900 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20  sc} {.  hd_puts 
18910 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20  {<tr>}.  regsub 
18920 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
18930 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
18940 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78   {<br />} syntax
18950 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
18960 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
18970 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
18980 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
18990 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
189a0 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
189b0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
189c0 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
189d0 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
189e0 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f 70  .} syntax.  hd_p
189f0 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d  uts "<td valign=
18a00 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22  \"top\" align=\"
18a10 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c 22  right\" width=\"
18a20 31 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c  120\">".  if {[l
18a30 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 73  length $keywords
18a40 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67 65  ]==0} {.    rege
18a50 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79  xp {[a-z_]+} $sy
18a60 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68 64  ntax name.    hd
18a70 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20  _fragment $name 
18a80 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28  *$name "${name}(
18a90 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a  ) SQL function".
18aa0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
18ab0 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e  et fragname [lin
18ac0 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30 5d  dex $keywords 0]
18ad0 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
18ae0 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e   {[^a-z]} $fragn
18af0 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a  ame {} fragname.
18b00 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
18b10 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65 76  $fragname.    ev
18b20 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b  al hd_keywords [
18b30 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b  string map {\n {
18b40 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20   }} $keywords]. 
18b50 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 73   }.  hd_puts "$s
18b60 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64  yntax</td>".  hd
18b70 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69 67  _puts {<td valig
18b80 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72  n="top">}.  hd_r
18b90 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68  esolve $desc.  h
18ba0 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74  d_puts {</td></t
18bb0 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  r>}.}.</tcl>..<p
18bc0 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69  >The core functi
18bd0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
18be0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
18bf0 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65   default. .[date
18c00 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70  func | Date &amp
18c10 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  ; Time functions
18c20 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c  ] and.[aggfunc |
18c30 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18c40 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65  ions] are docume
18c50 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e  nted separately.
18c60 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e    An.application
18c70 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69   may define addi
18c80 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73  tional.functions
18c90 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e   written in C an
18ca0 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  d added to the d
18cb0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75  atabase engine u
18cc0 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65  sing.the [sqlite
18cd0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
18ce0 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  n()] API.</p>..<
18cf0 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
18d00 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
18d10 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62  tcl>.funcdef {ab
18d20 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  s(X)} {} {.  ^Th
18d30 65 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f  e abs(X) functio
18d40 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62  n returns the ab
18d50 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
18d60 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72  the numeric.  ar
18d70 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28  gument X.  ^Abs(
18d80 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  X) returns NULL 
18d90 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  if X is NULL. . 
18da0 20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e   ^(Abs(X) return
18db0 73 20 30 2e 30 20 69 66 20 58 20 69 73 20 61 20  s 0.0 if X is a 
18dc0 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20  string or blob. 
18dd0 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
18de0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e  converted to a n
18df0 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20  umeric value.)^ 
18e00 20 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a 20   ^If X is the . 
18e10 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37   integer -922337
18e20 32 30 33 36 38 35 34 37 37 35 38 30 38 20 74 68  2036854775808 th
18e30 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77 73  en abs(X) throws
18e40 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
18e50 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e  flow.  error sin
18e60 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65  ce there is no e
18e70 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69  quivalent positi
18e80 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f  ve 64-bit two co
18e90 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a  mplement value..
18ea0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e  }..funcdef {chan
18eb0 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ges()} {} {.  ^T
18ec0 68 65 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e  he changes() fun
18ed0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
18ee0 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61  e number of data
18ef0 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 77  base rows that w
18f00 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72  ere changed.  or
18f10 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c   inserted or del
18f20 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  eted by the most
18f30 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65   recently comple
18f40 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45  ted INSERT, DELE
18f50 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20  TE,.  or UPDATE 
18f60 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75  statement, exclu
18f70 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e  sive of statemen
18f80 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65  ts in lower-leve
18f90 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54  l triggers..  ^T
18fa0 68 65 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c  he changes() SQL
18fb0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
18fc0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
18fd0 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
18fe0 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75  es()].  C/C++ fu
18ff0 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65  nction and hence
19000 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
19010 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e  e rules for coun
19020 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a  ting changes..}.
19030 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58  .funcdef {char(X
19040 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d  1,X2,...,XN)} {}
19050 20 7b 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28   {.  ^(The char(
19060 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75  X1,X2,...,XN) fu
19070 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
19080 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64   string composed
19090 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 68   of characters h
190a0 61 76 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69  aving the.   uni
190b0 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20  code code point 
190c0 76 61 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65  values of intege
190d0 72 73 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e  rs X1 through XN
190e0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29  , respectively.)
190f0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f  ^.}..funcdef {co
19100 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d  alesce(X,Y,...)}
19110 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61   {} {.  ^The coa
19120 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e  lesce() function
19130 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
19140 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e  of its first non
19150 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20  -NULL argument, 
19160 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c  or.  NULL if all
19170 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
19180 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28  ULL.  ^Coalesce(
19190 29 20 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c  ) must have at l
191a0 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65  east .  2 argume
191b0 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  nts..}..funcdef 
191c0 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b  {glob(X,Y)} {} {
191d0 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59  .  ^The glob(X,Y
191e0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
191f0 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a  uivalent to the.
19200 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62    expression "<b
19210 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a  >Y GLOB X</b>"..
19220 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
19230 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74  X and Y argument
19240 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20 69  s are reversed i
19250 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e  n the glob() fun
19260 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65  ction.  relative
19270 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47   to the infix [G
19280 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  LOB] operator.. 
19290 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65   ^If the [sqlite
192a0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
192b0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69  n()] interface i
192c0 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72  s used to.  over
192d0 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c  ride the glob(X,
192e0 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  Y) function with
192f0 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
19300 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
19310 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d  hen.  the [GLOB]
19320 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69   operator will i
19330 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e  nvoke the altern
19340 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
19350 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
19360 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b   {ifnull(X,Y)} {
19370 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c  } {.  ^The ifnul
19380 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  l() function ret
19390 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
193a0 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
193b0 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
193c0 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72   NULL if both ar
193d0 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
193e0 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73  .  ^Ifnull() mus
193f0 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20 32  t have exactly 2
19400 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54   arguments..  ^T
19410 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  he ifnull() func
19420 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
19430 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28  nt to [coalesce(
19440 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67 75  )] with two argu
19450 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ments..}..funcde
19460 66 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20 7b  f {instr(X,Y)} {
19470 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74 72  } {.  ^The instr
19480 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 66  (X,Y) function f
19490 69 6e 64 73 20 74 68 65 20 66 69 72 73 74 20 6f  inds the first o
194a0 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72  ccurrence of str
194b0 69 6e 67 20 59 20 77 69 74 68 69 6e 20 0a 20 20  ing Y within .  
194c0 73 74 72 69 6e 67 20 58 20 61 6e 64 20 72 65 74  string X and ret
194d0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
194e0 6f 66 20 70 72 69 6f 72 20 63 68 61 72 61 63 74  of prior charact
194f0 65 72 73 20 70 6c 75 73 20 31 2c 20 6f 72 20 30  ers plus 1, or 0
19500 20 69 66 0a 20 20 59 20 69 73 20 6e 6f 77 68 65   if.  Y is nowhe
19510 72 65 20 66 6f 75 6e 64 20 77 69 74 68 69 6e 20  re found within 
19520 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20 61  X..  ^Or, if X a
19530 6e 64 20 59 20 61 72 65 20 62 6f 74 68 20 42 4c  nd Y are both BL
19540 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73 74 72 28  OBs, then instr(
19550 58 2c 59 29 20 72 65 74 75 72 6e 73 20 6f 6e 65  X,Y) returns one
19560 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65  .  more than the
19570 20 6e 75 6d 62 65 72 20 62 79 74 65 73 20 70 72   number bytes pr
19580 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ior to the first
19590 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 59   occurrence of Y
195a0 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 64 6f  , or 0 if.  Y do
195b0 65 73 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e 79  es not occur any
195c0 77 68 65 72 65 20 77 69 74 68 69 6e 20 58 2e 0a  where within X..
195d0 20 20 5e 49 66 20 62 6f 74 68 20 61 72 67 75 6d    ^If both argum
195e0 65 6e 74 73 20 58 20 61 6e 64 20 59 20 74 6f 20  ents X and Y to 
195f0 69 6e 73 74 72 28 58 2c 59 29 20 61 72 65 20 6e  instr(X,Y) are n
19600 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65 20  on-NULL and are 
19610 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68 65 6e  not BLOBs.  then
19620 20 62 6f 74 68 20 61 72 65 20 69 6e 74 65 72 70   both are interp
19630 72 65 74 65 64 20 61 73 20 73 74 72 69 6e 67 73  reted as strings
19640 2e 0a 20 20 5e 49 66 20 65 69 74 68 65 72 20 58  ..  ^If either X
19650 20 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c 20 69   or Y are NULL i
19660 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 74 68 65  n instr(X,Y) the
19670 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
19680 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  NULL..}..funcdef
19690 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20   {hex(X)} {} {. 
196a0 20 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e 63   ^The hex() func
196b0 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20  tion interprets 
196c0 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20  its argument as 
196d0 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72  a BLOB and retur
196e0 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68  ns.  a string wh
196f0 69 63 68 20 69 73 20 74 68 65 20 75 70 70 65 72  ich is the upper
19700 2d 63 61 73 65 20 68 65 78 61 64 65 63 69 6d 61  -case hexadecima
19710 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74  l rendering of t
19720 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20  he content of.  
19730 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75  that blob..}..fu
19740 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65  ncdef {last_inse
19750 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b  rt_rowid()} {} {
19760 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73  .  ^The last_ins
19770 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
19780 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
19790 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68   [ROWID].  of th
197a0 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72  e last row inser
197b0 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  t from the datab
197c0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  ase connection w
197d0 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65  hich invoked the
197e0 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  .  function..  ^
197f0 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
19800 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63  rowid() SQL func
19810 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
19820 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b  r around the.  [
19830 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
19840 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43  ert_rowid()] C/C
19850 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e  ++ interface fun
19860 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ction..}..funcde
19870 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d  f {length(X)} {}
19880 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74 72 69   {.  ^For a stri
19890 6e 67 20 76 61 6c 75 65 20 58 2c 20 74 68 65 20  ng value X, the 
198a0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
198b0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
198c0 75 6d 62 65 72 20 6f 66 20 0a 20 20 63 68 61 72  umber of .  char
198d0 61 63 74 65 72 73 20 28 6e 6f 74 20 62 79 74 65  acters (not byte
198e0 73 29 20 69 6e 20 58 20 70 72 69 6f 72 20 74 6f  s) in X prior to
198f0 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 20 63   the first NUL c
19900 68 61 72 61 63 74 65 72 2e 0a 20 20 53 69 6e 63  haracter..  Sinc
19910 65 20 53 51 4c 69 74 65 20 73 74 72 69 6e 67 73  e SQLite strings
19920 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79   do not normally
19930 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68 61   contain NUL cha
19940 72 61 63 74 65 72 73 2c 20 74 68 65 20 6c 65 6e  racters, the len
19950 67 74 68 28 58 29 0a 20 20 66 75 6e 63 74 69 6f  gth(X).  functio
19960 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72  n will usually r
19970 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20  eturn the total 
19980 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
19990 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69  ters in the stri
199a0 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20 62  ng X..  ^For a b
199b0 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c 65 6e  lob value X, len
199c0 67 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74  gth(X) returns t
199d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
199e0 65 73 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e 0a  es in the blob..
199f0 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20    ^If X is NULL 
19a00 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69  then length(X) i
19a10 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20  s NULL..  ^If X 
19a20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20  is numeric then 
19a30 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e  length(X) return
19a40 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  s the length of 
19a50 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65  a string.  repre
19a60 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a  sentation of X..
19a70 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65  }..funcdef {like
19a80 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a  (X,Y) like(X,Y,Z
19a90 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
19aa0 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ike() function i
19ab0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
19ac0 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20  ent the.  "<b>Y 
19ad0 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41  LIKE X &#91;ESCA
19ae0 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65  PE Z&#93;</b>" e
19af0 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49  xpression. .  ^I
19b00 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
19b10 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
19b20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
19b30 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  e.  like() funct
19b40 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77  ion is invoked w
19b50 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d 65  ith three argume
19b60 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65  nts.  ^Otherwise
19b70 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65  , it is.  invoke
19b80 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d  d with two argum
19b90 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20  ents only. Note 
19ba0 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
19bb0 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a   parameters are.
19bc0 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68    reversed in th
19bd0 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
19be0 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68  n relative to th
19bf0 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f  e infix [LIKE] o
19c00 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20  perator..  ^The 
19c10 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
19c20 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
19c30 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65  rface can be use
19c40 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68  d to override th
19c50 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  e.  like() funct
19c60 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20  ion and thereby 
19c70 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61  change the opera
19c80 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c  tion of the.  [L
19c90 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20  IKE] operator.  
19ca0 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20  When overriding 
19cb0 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  the like() funct
19cc0 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69  ion, it may be i
19cd0 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76  mportant.  to ov
19ce0 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20  erride both the 
19cf0 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72  two and three ar
19d00 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  gument versions 
19d10 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20  of the like() . 
19d20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72   function. Other
19d30 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20  wise, different 
19d40 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c  code may be call
19d50 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
19d60 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
19d70 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20  rator depending 
19d80 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
19d90 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75  t an ESCAPE clau
19da0 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66  se was .  specif
19db0 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66  ied..}...funcdef
19dc0 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59   {likelihood(X,Y
19dd0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
19de0 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
19df0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19e00 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61  argument X uncha
19e10 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65 20 76 61  nged..  ^(The va
19e20 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68  lue Y in likelih
19e30 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65  ood(X,Y) must be
19e40 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
19e50 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74  t constant.  bet
19e60 77 65 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30  ween 0.0 and 1.0
19e70 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a 20  , inclusive.)^. 
19e80 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
19e90 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
19ea0 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
19eb0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
19ec0 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
19ed0 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
19ee0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
19ef0 65 73 20 64 75 72 69 6e 67 20 72 75 6e 2d 74 69  es during run-ti
19f00 6d 65 0a 20 20 28 74 68 61 74 20 69 73 2c 20 64  me.  (that is, d
19f10 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b  uring calls to [
19f20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29  sqlite3_step()])
19f30 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65  ..  ^The purpose
19f40 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69 68 6f   of the likeliho
19f50 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
19f60 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
19f70 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71   hint.  to the q
19f80 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61  uery planner tha
19f90 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  t the argument X
19fa0 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74 68   is a boolean th
19fb0 61 74 20 69 73 0a 20 20 74 72 75 65 20 77 69 74  at is.  true wit
19fc0 68 20 61 20 70 72 6f 62 61 62 69 6c 69 74 79 20  h a probability 
19fd0 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  of approximately
19fe0 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e 6c   Y..  ^(The [unl
19ff0 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69  ikely(X)] functi
1a000 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64  on is short-hand
1a010 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28   for likelihood(
1a020 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20 5e  X,0.0625).)^.  ^
1a030 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29 5d  (The [likely(X)]
1a040 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1a050 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1a060 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35 29  lihood(X,0.9375)
1a070 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1a080 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a  likely(X)} {} {.
1a090 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29    ^The likely(X)
1a0a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a0b0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  s the argument X
1a0c0 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54   unchanged..  ^T
1a0d0 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1a0e0 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1a0f0 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
1a100 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
1a110 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
1a120 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
1a130 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20   CPU cycles at. 
1a140 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20   run-time (that 
1a150 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73  is, during calls
1a160 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65   to [sqlite3_ste
1a170 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75  p()])..  ^The pu
1a180 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b  rpose of the lik
1a190 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1a1a0 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  is to provide a 
1a1b0 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75  hint.  to the qu
1a1c0 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74  ery planner that
1a1d0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1a1e0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  is a boolean val
1a1f0 75 65 0a 20 20 74 68 61 74 20 69 73 20 75 73 75  ue.  that is usu
1a200 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54 68 65  ally true. ^(The
1a210 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74   likely(X) funct
1a220 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1a230 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1a240 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e  od](X,0.9375).)^
1a250 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69   See also: [unli
1a260 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e  kely(X)]..}..fun
1a270 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e  cdef {load_exten
1a280 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74  sion(X) load_ext
1a290 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20  ension(X,Y)} {} 
1a2a0 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  {.  ^The load_ex
1a2b0 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e  tension(X,Y) fun
1a2c0 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c  ction loads [SQL
1a2d0 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20  ite extensions] 
1a2e0 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
1a2f0 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
1a300 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
1a310 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
1a320 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1a330 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
1a340 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
1a350 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
1a360 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
1a370 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
1a380 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73  point name is us
1a390 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  ed..  ^The load_
1a3a0 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
1a3b0 74 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65  tion raises an e
1a3c0 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20  xception if the 
1a3d0 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20  extension fails 
1a3e0 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69  to.  load or ini
1a3f0 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c  tialize correctl
1a400 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f  y...  <p>^The lo
1a410 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  ad_extension() f
1a420 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  unction will fai
1a430 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  l if the extensi
1a440 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a  on attempts to .
1a450 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
1a460 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  te an SQL functi
1a470 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  on or collating 
1a480 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a  sequence.  ^The.
1a490 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20    extension can 
1a4a0 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e  add new function
1a4b0 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1a4c0 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61  equences, but ca
1a4d0 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72  nnot.  modify or
1a4e0 20 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   delete existing
1a4f0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
1a500 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1a510 73 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73  s because.  thos
1a520 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f  e functions and/
1a530 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1a540 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20  uences might be 
1a550 75 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20  used elsewhere. 
1a560 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c   in the currentl
1a570 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74  y running SQL st
1a580 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61  atement.  To loa
1a590 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74  d an extension t
1a5a0 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72  hat.  changes or
1a5b0 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f   deletes functio
1a5c0 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
1a5d0 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74  sequences, use t
1a5e0 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f  he.  [sqlite3_lo
1a5f0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20  ad_extension()] 
1a600 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c  C-language API.<
1a610 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65  /p>..  <p>For se
1a620 63 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20  curity reasons, 
1a630 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64  extension loaded
1a640 20 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62   is turned off b
1a650 79 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75  y default and mu
1a660 73 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20  st.  be enabled 
1a670 62 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20  by a prior call 
1a680 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62  to [sqlite3_enab
1a690 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le_load_extensio
1a6a0 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e  n()].</p>.}..fun
1a6b0 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20  cdef {lower(X)} 
1a6c0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65  {} {.  ^The lowe
1a6d0 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1a6e0 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1a6f0 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c  string X with al
1a700 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  l ASCII characte
1a710 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74  rs.  converted t
1a720 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e  o lower case.  ^
1a730 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c  The default buil
1a740 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e  t-in lower() fun
1a750 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f  ction works.  fo
1a760 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1a770 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20  rs only.  To do 
1a780 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  case conversions
1a790 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20   on non-ASCII.  
1a7a0 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64  characters, load
1a7b0 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69   the ICU extensi
1a7c0 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
1a7d0 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58  ltrim(X) ltrim(X
1a7e0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1a7f0 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   ltrim(X,Y) func
1a800 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1a810 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1a820 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1a830 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1a840 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1a850 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74   Y from the left
1a860 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49   side of X..  ^I
1a870 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1a880 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72   is omitted, ltr
1a890 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1a8a0 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65  aces from the le
1a8b0 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a  ft side.  of X..
1a8c0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28  }..funcdef {max(
1a8d0 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43  X,Y,...)} {*maxC
1a8e0 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61  oreFunc *max {ma
1a8f0 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  x() SQL function
1a900 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
1a910 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29  i-argument max()
1a920 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a930 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
1a940 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d  ith the .  maxim
1a950 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74  um value, or ret
1a960 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20  urn NULL if any 
1a970 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
1a980 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d  . .  ^The multi-
1a990 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
1a9a0 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73  unction searches
1a9b0 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
1a9c0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1a9d0 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  t.  for an argum
1a9e0 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
1a9f0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1aa00 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
1aa10 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20  hat collating.  
1aa20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
1aa30 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73   string comparis
1aa40 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f  ons.  ^If none o
1aa50 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1aa60 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e  to max().  defin
1aa70 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  e a collating fu
1aa80 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nction, then the
1aa90 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
1aaa0 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  g function is us
1aab0 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61  ed..  ^(Note tha
1aac0 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69  t <b>max()</b> i
1aad0 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a simple funct
1aae0 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61  ion when.  it ha
1aaf0 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75  s 2 or more argu
1ab00 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74  ments but operat
1ab10 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78 41  es as an.  [maxA
1ab20 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
1ab30 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
1ab40 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e  given only a sin
1ab50 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1ab60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
1ab70 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43  X,Y,...)} {*minC
1ab80 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69  oreFunc *min {mi
1ab90 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  n() SQL function
1aba0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
1abb0 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
1abc0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1abd0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
1abe0 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75  ith the.  minimu
1abf0 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20  m value..  ^The 
1ac00 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
1ac10 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  in() function se
1ac20 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
1ac30 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
1ac40 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
1ac50 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1ac60 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1ac70 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
1ac80 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
1ac90 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
1aca0 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
1acb0 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1acc0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
1acd0 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20  ments to min(). 
1ace0 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
1acf0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
1ad00 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
1ad10 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1ad20 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f   is used..  ^(No
1ad30 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29  te that <b>min()
1ad40 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
1ad50 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
1ad60 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
1ad70 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
1ad80 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a  operates as an .
1ad90 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20    [minAggFunc | 
1ada0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1adb0 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  on] if given.  o
1adc0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
1add0 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ument.)^.}..func
1ade0 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29  def {nullif(X,Y)
1adf0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75  } {} {.  ^The nu
1ae00 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
1ae10 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
1ae20 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66  irst argument if
1ae30 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
1ae40 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61  re.  different a
1ae50 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61  nd NULL if the a
1ae60 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
1ae70 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c   same.  ^The nul
1ae80 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
1ae90 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73  n.  searches its
1aea0 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1aeb0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f  left to right fo
1aec0 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
1aed0 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63  at defines a.  c
1aee0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1aef0 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1af00 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1af10 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
1af20 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  g.  comparisons.
1af30 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72    ^If neither ar
1af40 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66  gument to nullif
1af50 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  () defines a col
1af60 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a  lating function.
1af70 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52    then the BINAR
1af80 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75  Y is used..}..fu
1af90 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f  ncdef {printf(FO
1afa0 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a  RMAT,...)} {} {.
1afb0 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46    ^(The printf(F
1afc0 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66  ORMAT,...) SQL f
1afd0 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69  unction works li
1afe0 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ke the [sqlite3_
1aff0 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e  mprintf()] C-lan
1b000 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e  guage.  function
1b010 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28   and the printf(
1b020 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20  ) function from 
1b030 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1b040 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20  ibrary.)^.  The 
1b050 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
1b060 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  s a format strin
1b070 67 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  g that specifies
1b080 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63   how to construc
1b090 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73  t the output.  s
1b0a0 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75  tring using valu
1b0b0 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75  es taken from su
1b0c0 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e  bsequent argumen
1b0d0 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52  ts.  ^If the FOR
1b0e0 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a  MAT argument is.
1b0f0 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c    missing or NUL
1b100 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
1b110 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65  t is NULL.  ^The
1b120 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69   %n format is si
1b130 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61  lently ignored a
1b140 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f  nd.  does not co
1b150 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e  nsume an argumen
1b160 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d  t.  ^The %p form
1b170 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  at is an alias f
1b180 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20  or %X.  ^The %z 
1b190 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65  format.  is inte
1b1a0 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68  rchangeable with
1b1b0 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65   %s.  ^(If there
1b1c0 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67   are too few arg
1b1d0 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  uments in the ar
1b1e0 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d  gument list,.  m
1b1f0 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  issing arguments
1b200 20 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20   are assumed to 
1b210 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75  have a NULL valu
1b220 65 2c 20 77 68 69 63 68 20 69 73 20 74 72 61 6e  e, which is tran
1b230 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20  slated into.  0 
1b240 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72  or 0.0 for numer
1b250 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e  ic formats or an
1b260 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f   empty string fo
1b270 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75  r %s.)^.}.  ..fu
1b280 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
1b290 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f   {} {.  ^The quo
1b2a0 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  te(X) function r
1b2b0 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
1b2c0 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  of an SQL litera
1b2d0 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  l which.  is the
1b2e0 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72   value of its ar
1b2f0 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20  gument suitable 
1b300 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e  for inclusion in
1b310 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  to an SQL statem
1b320 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
1b330 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
1b340 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
1b350 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
1b360 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
1b370 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
1b380 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
1b390 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
1b3a0 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72  literals..  ^Str
1b3b0 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64  ings with embedd
1b3c0 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  ed NUL character
1b3d0 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72  s cannot be repr
1b3e0 65 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e  esented as strin
1b3f0 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20  g.  literals in 
1b400 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  SQL and hence th
1b410 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e  e returned strin
1b420 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75  g literal is tru
1b430 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74  ncated prior.  t
1b440 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e  o the first NUL.
1b450 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
1b460 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  dom()} {} {.  ^T
1b470 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63  he random() func
1b480 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70  tion returns a p
1b490 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74  seudo-random int
1b4a0 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d  eger.  between -
1b4b0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1b4c0 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32  808 and +9223372
1b4d0 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a  036854775807..}.
1b4e0 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
1b4f0 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
1b500 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  ^The randomblob(
1b510 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
1b520 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f  rn an N-byte blo
1b530 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65  b containing pse
1b540 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74  udo-random.  byt
1b550 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73  es. ^If N is les
1b560 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20  s than 1 then a 
1b570 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c  1-byte random bl
1b580 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  ob is returned..
1b590 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70  .  <p>Hint:  app
1b5a0 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65  lications can ge
1b5b0 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20  nerate globally 
1b5c0 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  unique identifie
1b5d0 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20  rs.  using this 
1b5e0 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65  function togethe
1b5f0 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61  r with [hex()] a
1b600 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29  nd/or.  [lower()
1b610 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e  ] like this:</p>
1b620 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ..  <blockquote>
1b630 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  .  hex(randomblo
1b640 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a  b(16))<br></br>.
1b650 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64    lower(hex(rand
1b660 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c  omblob(16))).  <
1b670 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a  /blockquote>.}..
1b680 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65  funcdef {replace
1b690 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
1b6a0 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59  ^The replace(X,Y
1b6b0 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
1b6c0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1b6d0 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75  rmed by substitu
1b6e0 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20  ting.  string Z 
1b6f0 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72  for every occurr
1b700 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
1b710 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e   in string X.  ^
1b720 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63  The [BINARY].  c
1b730 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1b740 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f  e is used for co
1b750 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1b760 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20  Y is an empty.  
1b770 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75  string then retu
1b780 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20  rn X unchanged. 
1b790 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e   ^If Z is not in
1b7a0 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69  itially.  a stri
1b7b0 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74  ng, it is cast t
1b7c0 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67  o a UTF-8 string
1b7d0 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73   prior to proces
1b7e0 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sing..}..funcdef
1b7f0 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64   {round(X) round
1b800 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1b810 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75  he round(X,Y) fu
1b820 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1b830 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
1b840 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65    value X rounde
1b850 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f  d to Y digits to
1b860 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
1b870 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
1b880 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1b890 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1b8a0 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20  , it is assumed 
1b8b0 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63  to be 0..}..func
1b8c0 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74  def {rtrim(X) rt
1b8d0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1b8e0 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29   ^The rtrim(X,Y)
1b8f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b900 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1b910 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1b920 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1b930 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1b940 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
1b950 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58   right side of X
1b960 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1b970 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1b980 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, rtrim(X) remo
1b990 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1b9a0 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65  the right.  side
1b9b0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1b9c0 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b  f {soundex(X)} {
1b9d0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64  } {.  ^The sound
1b9e0 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ex(X) function r
1b9f0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1ba00 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e  that is the soun
1ba10 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20  dex encoding .  
1ba20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  of the string X.
1ba30 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22  .  ^The string "
1ba40 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65  ?000" is returne
1ba50 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  d if the argumen
1ba60 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e  t is NULL or con
1ba70 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49  tains.  no ASCII
1ba80 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72   alphabetic char
1ba90 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73  acters..  ^(This
1baa0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69   function is omi
1bab0 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  tted from SQLite
1bac0 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49   by default..  I
1bad0 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  t is only availa
1bae0 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49  ble if the [SQLI
1baf0 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70  TE_SOUNDEX] comp
1bb00 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
1bb10 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53    is used when S
1bb20 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29  QLite is built.)
1bb30 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ^.}..funcdef {sq
1bb40 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1bb50 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a  on_get(N)} {} {.
1bb60 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f    ^The sqlite_co
1bb70 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1bb80 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1bb90 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1bba0 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
1bbb0 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1bbc0 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
1bbd0 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72  ction..  ^This r
1bbe0 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
1bbf0 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d  he N-th compile-
1bc00 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
1bc10 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
1bc20 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20  .  or NULL if N 
1bc30 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  is out of range.
1bc40 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b    See also the [
1bc50 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20  compile_options 
1bc60 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63  pragma]..}..func
1bc70 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
1bc80 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
1bc90 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1bca0 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1bcb0 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66  ion_used() SQL f
1bcc0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1bcd0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1bce0 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69    [sqlite3_compi
1bcf0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d  leoption_used()]
1bd00 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
1bd10 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67  .  ^When the arg
1bd20 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74  ument X to sqlit
1bd30 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1bd40 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72  used(X) is a str
1bd50 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74  ing which.  is t
1bd60 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d  he name of a com
1bd70 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1bd80 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  , this routine r
1bd90 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20  eturns true (1) 
1bda0 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64  or.  false (0) d
1bdb0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
1bdc0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
1bdd0 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20  option was used 
1bde0 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69  during the.  bui
1bdf0 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ld..}..funcdef {
1be00 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1be10 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
1be20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1be30 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1be40 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61  rns a string tha
1be50 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  t identifies the
1be60 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73  .  specific vers
1be70 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ion of the sourc
1be80 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20  e code that was 
1be90 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68  used to build th
1bea0 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
1beb0 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67  ry.  ^The string
1bec0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
1bed0 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20  ite_source_id() 
1bee0 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68  begins with.  th
1bef0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1bf00 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20  that the source 
1bf10 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64  code was checked
1bf20 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f   in and is follo
1bf30 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20  ws by.  an SHA1 
1bf40 68 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65  hash that unique
1bf50 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  ly identifies th
1bf60 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20  e source tree.  
1bf70 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
1bf80 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70  s.  an SQL wrapp
1bf90 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1bfa0 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
1bfb0 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a  )] C interface..
1bfc0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1bfd0 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d  te_version()} {}
1bfe0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1bff0 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74  _version() funct
1c000 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1c010 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66  version string f
1c020 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  or the SQLite.  
1c030 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20  library that is 
1c040 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20  running.  ^This 
1c050 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53  function is an S
1c060 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f  QL.  wrapper aro
1c070 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
1c080 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43  _libversion()] C
1c090 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66  -interface..}..f
1c0a0 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58  uncdef {substr(X
1c0b0 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59  ,Y,Z) substr(X,Y
1c0c0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1c0d0 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e  ubstr(X,Y,Z) fun
1c0e0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c0f0 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70  substring of inp
1c100 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74  ut string X that
1c110 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74   begins.  with t
1c120 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
1c130 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a  r and which is Z
1c140 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
1c150 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69  ..  ^If Z is omi
1c160 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72  tted then substr
1c170 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c  (X,Y) returns al
1c180 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72  l characters thr
1c190 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f  ough the end.  o
1c1a0 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62  f the string X b
1c1b0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68  eginning with th
1c1c0 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c  e Y-th..  ^The l
1c1d0 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74  eft-most charact
1c1e0 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65  er of X is numbe
1c1f0 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e  r 1.  ^If Y is n
1c200 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74  egative.  then t
1c210 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
1c220 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72  er of the substr
1c230 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ing is found by 
1c240 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68  counting from th
1c250 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72  e.  right rather
1c260 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
1c270 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69   ^If Z is negati
1c280 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62  ve then.  the ab
1c290 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20  s(Z) characters 
1c2a0 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d  preceding the Y-
1c2b0 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  th character are
1c2c0 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66   returned..  ^If
1c2d0 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74   X is a string t
1c2e0 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  hen characters i
1c2f0 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20  ndices refer to 
1c300 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20  actual UTF-8 .  
1c310 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66  characters.  ^If
1c320 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65   X is a BLOB the
1c330 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65  n the indices re
1c340 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a  fer to bytes..}.
1c350 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f  .funcdef {total_
1c360 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a  changes()} {} {.
1c370 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61    ^The total_cha
1c380 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
1c390 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1c3a0 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65  er of row change
1c3b0 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e  s.  caused by IN
1c3c0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1c3d0 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65  DELETE.  stateme
1c3e0 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75  nts since the cu
1c3f0 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
1c400 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70  onnection was op
1c410 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75  ened..  ^This fu
1c420 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1c430 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1c440 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
1c450 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
1c460 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
1c470 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20  uncdef {trim(X) 
1c480 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1c490 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29    ^The trim(X,Y)
1c4a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c4b0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1c4c0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1c4d0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1c4e0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1c4f0 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74  ar in Y from bot
1c500 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e  h ends of X..  ^
1c510 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1c520 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72  t is omitted, tr
1c530 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1c540 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65  aces from both e
1c550 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  nds of X..}..fun
1c560 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d  cdef {typeof(X)}
1c570 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70   {} {.  ^The typ
1c580 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  eof(X) function 
1c590 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1c5a0 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
1c5b0 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f  the [datatype] o
1c5c0 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  f.  the expressi
1c5d0 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69  on X: "null", "i
1c5e0 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c  nteger", "real",
1c5f0 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f   "text", or "blo
1c600 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  b"..}..funcdef {
1c610 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20  unlikely(X)} {} 
1c620 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  {.  ^The unlikel
1c630 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  y(X) function re
1c640 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
1c650 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nt X unchanged..
1c660 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
1c670 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
1c680 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
1c690 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
1c6a0 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
1c6b0 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
1c6c0 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
1c6d0 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
1c6e0 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
1c6f0 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
1c700 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
1c710 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
1c720 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1c730 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1c740 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1c750 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1c760 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1c770 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1c780 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61  lean value.  tha
1c790 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74  t is usually not
1c7a0 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c   true. ^(The unl
1c7b0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1c7c0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
1c7d0 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
1c7e0 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a  ](X, 0.0625).)^.
1c7f0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63  }..funcdef {unic
1c800 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ode(X)} {} {.  ^
1c810 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66  The unicode(X) f
1c820 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c830 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63  the numeric unic
1c840 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63  ode code point c
1c850 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a  orresponding to.
1c860 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72    the first char
1c870 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74 72  acter of the str
1c880 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20 61  ing X.  If the a
1c890 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f  rgument to unico
1c8a0 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73  de(X) is not a s
1c8b0 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65  tring.  then the
1c8c0 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
1c8d0 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ined..}..funcdef
1c8e0 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
1c8f0 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
1c900 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c910 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
1c920 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
1c930 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
1c940 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
1c950 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
1c960 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
1c970 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
1c980 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
1c990 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
1c9a0 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
1c9b0 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
1c9c0 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
1c9d0 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
1c9e0 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
1c9f0 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
1ca00 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
1ca10 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
1ca20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
1ca30 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
1ca40 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
1ca50 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
1ca60 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
1ca70 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
1ca80 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
1ca90 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
1caa0 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
1cab0 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
1cac0 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
1cad0 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
1cae0 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
1caf0 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
1cb00 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1cb10 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
1cb20 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1cb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb70 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1cb80 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46  {Date And Time F
1cb90 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
1cba0 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68  nc {*datefunc}.h
1cbb0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
1cbc0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1cbd0 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
1cbe0 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
1cbf0 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
1cc00 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
1cc10 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
1cc20 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
1cc30 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
1cc40 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
1cc50 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
1cc60 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
1cc70 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1cc80 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
1cc90 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
1cca0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1ccb0 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1ccc0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1ccd0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1cce0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1ccf0 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
1cd00 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1cd10 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1cd20 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1cd30 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1cd40 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
1cd50 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1cd60 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1cd70 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1cd80 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1cd90 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
1cda0 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
1cdb0 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1cdc0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1cdd0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1cde0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
1cdf0 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
1ce00 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
1ce10 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1ce20 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1ce30 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
1ce40 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
1ce50 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1ce60 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
1ce70 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
1ce80 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
1ce90 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
1cea0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
1ceb0 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
1cec0 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
1ced0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1cee0 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
1cef0 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
1cf00 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
1cf10 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
1cf20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1cf30 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
1cf40 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
1cf50 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1cf60 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
1cf70 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
1cf80 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
1cf90 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
1cfa0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1cfb0 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
1cfc0 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
1cfd0 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
1cfe0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1cff0 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
1d000 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
1d010 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
1d020 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
1d030 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
1d040 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
1d050 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
1d060 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
1d070 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1d080 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
1d090 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
1d0a0 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
1d0b0 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
1d0c0 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
1d0d0 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
1d0e0 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
1d0f0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1d100 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
1d110 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
1d120 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
1d130 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
1d140 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
1d150 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
1d160 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
1d170 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
1d180 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
1d190 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
1d1a0 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
1d1b0 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
1d1c0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1d1d0 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
1d1e0 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
1d1f0 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
1d200 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
1d210 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
1d220 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
1d230 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
1d240 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
1d250 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
1d260 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1d270 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
1d280 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
1d290 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
1d2a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
1d2b0 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
1d2c0 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
1d2d0 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
1d2e0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1d2f0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
1d300 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
1d310 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
1d320 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
1d330 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
1d340 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
1d350 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
1d360 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
1d370 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
1d380 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
1d390 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
1d3a0 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
1d3b0 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
1d3c0 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
1d3d0 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
1d3e0 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
1d3f0 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
1d400 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1d410 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
1d420 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
1d430 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
1d440 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
1d450 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
1d460 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
1d470 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
1d480 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
1d490 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
1d4a0 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
1d4b0 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
1d4c0 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
1d4d0 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith Sunday==0.<t
1d4e0 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
1d4f0 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
1d500 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
1d510 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
1d520 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
1d530 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
1d540 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
1d550 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
1d560 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
1d570 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
1d580 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1d590 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
1d5a0 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
1d5b0 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
1d5c0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
1d5d0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
1d5e0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
1d5f0 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
1d600 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
1d610 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
1d620 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
1d630 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
1d640 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
1d650 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
1d660 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1d670 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
1d680 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1d690 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
1d6a0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1d6b0 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
1d6c0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
1d6d0 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
1d6e0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1d6f0 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
1d700 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
1d710 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
1d720 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
1d730 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
1d740 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
1d750 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
1d760 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
1d770 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
1d780 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
1d790 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
1d7a0 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
1d7b0 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
1d7c0 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
1d7d0 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
1d7e0 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
1d7f0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
1d800 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
1d810 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
1d820 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
1d830 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
1d840 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1d850 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
1d860 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1d870 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
1d880 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1d890 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1d8a0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1d8b0 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1d8c0 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
1d8d0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1d8e0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1d8f0 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
1d900 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1d910 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
1d920 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1d930 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1d940 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
1d950 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1d960 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1d970 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
1d980 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
1d990 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
1d9a0 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
1d9b0 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
1d9c0 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
1d9d0 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
1d9e0 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
1d9f0 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
1da00 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
1da10 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
1da20 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
1da30 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
1da40 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
1da50 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
1da60 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
1da70 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
1da80 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
1da90 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
1daa0 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
1dab0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
1dac0 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
1dad0 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
1dae0 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
1daf0 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
1db00 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
1db10 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
1db20 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75  .^The 'now' argu
1db30 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64  ment to date and
1db40 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1db50 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
1db60 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20  xactly the.same 
1db70 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70  value for multip
1db80 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77  le invocations w
1db90 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b  ithin the same [
1dba0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20  sqlite3_step()] 
1dbb0 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65  call..^[http://e
1dbc0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1dbd0 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64  wiki/Coordinated
1dbe0 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20  _Universal_Time 
1dbf0 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  | Universal Coor
1dc00 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1dc10 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46  C)] is used. .^F
1dc20 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20  ormat 12 is the 
1dc30 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1dc40 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a  pedia.org/wiki/J
1dc50 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69  ulian_day | Juli
1dc60 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65  an day number].e
1dc70 78 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c  xpressed as a fl
1dc80 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1dc90 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f  ue..</p>..<p>.Fo
1dca0 72 6d 61 74 73 20 32 20 74 68 72 6f 75 67 68 20  rmats 2 through 
1dcb0 31 30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  10 may be option
1dcc0 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
1dcd0 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69   a timezone indi
1dce0 63 61 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72  cator of the for
1dcf0 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39  m."<i>&#91;+-&#9
1dd00 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20  3;HH:MM</i>" or 
1dd10 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e  just "<i>Z</i>".
1dd20 20 20 54 68 65 20 64 61 74 65 20 61 6e 64 20 74    The date and t
1dd30 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  ime functions us
1dd40 65 20 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a  e UTC or "zulu".
1dd50 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c  time internally,
1dd60 20 61 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20   and so the "Z" 
1dd70 73 75 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f  suffix is a no-o
1dd80 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f  p.  Any non-zero
1dd90 20 22 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20   "HH:MM" suffix 
1dda0 69 73 0a 73 75 62 74 72 61 63 74 65 64 20 66 72  is.subtracted fr
1ddb0 6f 6d 20 74 68 65 20 69 6e 64 69 63 61 74 65 64  om the indicated
1ddc0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69   date and time i
1ddd0 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75  n order to compu
1dde0 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f  te zulu time..Fo
1ddf0 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f  r example, all o
1de00 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1de10 74 69 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65  time strings are
1de20 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70   equivalent:.</p
1de30 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1de40 32 30 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33  2013-10-07 08:23
1de50 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33  :19.120<br>.2013
1de60 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e  -10-07T08:23:19.
1de70 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30  120Z<br>.2013-10
1de80 2d 30 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30  -07 04:23:19.120
1de90 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35  -04:00<br>.24565
1dea0 37 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c  72.84952685.</bl
1deb0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e  ockquote>..<p>.^
1dec0 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37  (In formats 4, 7
1ded0 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72  , and 10, the fr
1dee0 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
1def0 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61   value SS.SSS ca
1df00 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f  n have.one or mo
1df10 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77  re digits follow
1df20 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20  ing the decimal 
1df30 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20  point.  Exactly 
1df40 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65  three digits are
1df50 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78  .shown in the ex
1df60 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f  amples because o
1df70 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 74 68  nly the first th
1df80 72 65 65 20 64 69 67 69 74 73 20 61 72 65 20 73  ree digits are s
1df90 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68  ignificant.to th
1dfa0 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68  e result, but th
1dfb0 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
1dfc0 61 6e 20 68 61 76 65 20 66 65 77 65 72 20 6f 72  an have fewer or
1dfd0 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65   more than three
1dfe0 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20   digits.and the 
1dff0 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
1e000 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f  ons will still o
1e010 70 65 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79  perate correctly
1e020 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66  .)^.Similarly, f
1e030 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77  ormat 12 is show
1e040 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e 69 66  n with 10 signif
1e050 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75  icant digits, bu
1e060 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a  t the date/time.
1e070 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72  functions will r
1e080 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20  eally accept as 
1e090 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64  many or as few d
1e0a0 69 67 69 74 73 20 61 73 20 61 72 65 20 6e 65 63  igits as are nec
1e0b0 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73  essary to.repres
1e0c0 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64  ent the Julian d
1e0d0 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a  ay number..</p>.
1e0e0 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f  .<h3>Modifiers</
1e0f0 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d  h3>..<p>^The tim
1e100 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
1e110 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
1e120 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65   or more modifie
1e130 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64  rs that .alter d
1e140 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e  ate and/or time.
1e150 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a   ^Each modifier.
1e160 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74  is a transformat
1e170 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c  ion that is appl
1e180 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20  ied to the time 
1e190 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66  value to its lef
1e1a0 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72  t..^Modifiers ar
1e1b0 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c  e applied from l
1e1c0 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72  eft to right; or
1e1d0 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  der is important
1e1e0 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c  ..^(The availabl
1e1f0 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20  e modifiers are 
1e200 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a  as follows.</p>.
1e210 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64  .<ol>.<li> NNN d
1e220 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75  ays.<li> NNN hou
1e230 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75  rs.<li> NNN minu
1e240 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e  tes.<li> NNN.NNN
1e250 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e  N seconds.<li> N
1e260 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e  NN months.<li> N
1e270 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74  NN years.<li> st
1e280 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69  art of month.<li
1e290 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a  > start of year.
1e2a0 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61  <li> start of da
1e2b0 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e  y.<li> weekday N
1e2c0 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a  .<li> unixepoch.
1e2d0 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c  <li> localtime.<
1e2e0 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e  li> utc .</ol>)^
1e2f0 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20  ..<p>^The first 
1e300 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31  six modifiers (1
1e310 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d   through 6) .sim
1e320 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63  ply add the spec
1e330 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20  ified amount of 
1e340 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65  time to the date
1e350 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69   and time .speci
1e360 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63  fied by the prec
1e370 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67  eding timestring
1e380 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a   and modifiers..
1e390 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75  ^Note that "&plu
1e3a0 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20  smn;NNN months" 
1e3b0 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69  works by renderi
1e3c0 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
1e3d0 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59  date into.the YY
1e3e0 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c  YY-MM-DD format,
1e3f0 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75   adding the &plu
1e400 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d  smn;NNN to the M
1e410 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74  M month value, t
1e420 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20  hen.normalizing 
1e430 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68  the result.  ^Th
1e440 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  us, for example,
1e450 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30   the data 2001-0
1e460 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79  3-31 modified.by
1e470 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74   '+1 month' init
1e480 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30  ially yields 200
1e490 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72  1-04-31, but Apr
1e4a0 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64  il only has 30 d
1e4b0 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20  ays.so the date 
1e4c0 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f  is normalized to
1e4d0 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41   2001-05-01.  ^A
1e4e0 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20   similar effect 
1e4f0 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20  occurs when.the 
1e500 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73  original date is
1e510 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20   February 29 of 
1e520 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74  a leapyear and t
1e530 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26  he modifier is.&
1e540 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77  plusmn;N years w
1e550 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20  here N is not a 
1e560 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72  multiple of four
1e570 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1e580 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69  start of" modifi
1e590 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20 39  ers (7 through 9
1e5a0 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74 65  ) shift the date
1e5b0 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74   backwards .to t
1e5c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1e5d0 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1e5e0 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c  h, year or day.<
1e5f0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65  /p>..<p>^The "we
1e600 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20  ekday" modifier 
1e610 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74  advances the dat
1e620 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65  e forward to the
1e630 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72   next date .wher
1e640 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75  e the weekday nu
1e650 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61  mber is N. Sunda
1e660 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69  y is 0, Monday i
1e670 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  s 1, and so fort
1e680 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  h.</p>..<p>^The 
1e690 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1e6a0 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77  fier (11) only w
1e6b0 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64  orks if it immed
1e6c0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a  iately follows .
1e6d0 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20  a timestring in 
1e6e0 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66  the DDDDDDDDDD f
1e6f0 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f  ormat. .^This mo
1e700 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74 68  difier causes th
1e710 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20  e DDDDDDDDDD to 
1e720 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e  be interpreted n
1e730 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20  ot .as a Julian 
1e740 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74  day number as it
1e750 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20   normally would 
1e760 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70  be, but as.[http
1e770 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1e780 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69  org/wiki/Unix_ti
1e790 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20  me | Unix Time] 
1e7a0 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66  - the .number of
1e7b0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1e7c0 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e  970.  If the "un
1e7d0 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1e7e0 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f  r does not.follo
1e7f0 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f  w a timestring o
1e800 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44  f the form DDDDD
1e810 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70 72  DDDDD which expr
1e820 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72  esses the number
1e830 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63  .of seconds sinc
1e840 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68  e 1970 or if oth
1e850 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70  er modifiers.sep
1e860 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78 65  arate the "unixe
1e870 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66  poch" modifier f
1e880 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44  rom prior DDDDDD
1e890 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65  DDDD then the.be
1e8a0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
1e8b0 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63  ned..Due to prec
1e8c0 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e  ision limitation
1e8d0 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65  s imposed by the
1e8e0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1e8f0 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69   use.of 64-bit i
1e900 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e  ntegers, the "un
1e910 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1e920 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  r only works for
1e930 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20 30  .dates between 0
1e940 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a  000-01-01 00:00:
1e950 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30  00 and 5352-11-0
1e960 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78  1 10:52:47 (unix
1e970 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37   times.of -62167
1e980 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20 31  219200 through 1
1e990 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e  0675199167).</p>
1e9a0 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c  ..<p>^The "local
1e9b0 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28  time" modifier (
1e9c0 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65 20  12) assumes the 
1e9d0 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69  time string to i
1e9e0 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e  ts left is in.Un
1e9f0 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
1ea00 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20 61  ted Time (UTC) a
1ea10 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 74  nd adjusts the t
1ea20 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68  ime.string so th
1ea30 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c  at it displays l
1ea40 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c  ocaltime.  If "l
1ea50 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77  ocaltime".follow
1ea60 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69 73  s a time that is
1ea70 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74   not UTC, then t
1ea80 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
1ea90 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20  ndefined..^(The 
1eaa0 22 75 74 63 22 20 69 73 20 74 68 65 20 6f 70 70  "utc" is the opp
1eab0 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74  osite of "localt
1eac0 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73 73  ime".  "utc" ass
1ead0 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74  umes that the st
1eae0 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74  ring.to its left
1eaf0 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c   is in the local
1eb00 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64   timezone and ad
1eb10 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e  justs that strin
1eb20 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29  g to be in UTC.)
1eb30 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73  ^.If the prior s
1eb40 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20  tring is not in 
1eb50 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20  localtime, then 
1eb60 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75  the result of "u
1eb70 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64  tc" is.undefined
1eb80 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70  .</p>..<h3>Examp
1eb90 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43  les</h3>..^(<p>C
1eba0 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
1ebb0 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c  nt date.<p>..<bl
1ebc0 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1ebd0 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c  date('now');</bl
1ebe0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1ebf0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
1ec00 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
1ec10 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
1ec20 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1ec30 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1ec40 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
1ec50 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
1ec60 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
1ec70 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1ec80 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1ec90 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1eca0 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1ecb0 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c  92941466.</p>..<
1ecc0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
1ecd0 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1ece0 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1ecf0 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63  xepoch');.</bloc
1ed00 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1ed10 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1ed20 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
1ed30 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
1ed40 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
1ed50 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
1ed60 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
1ed70 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
1ed80 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1ed90 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
1eda0 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
1edb0 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
1edc0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1edd0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1ede0 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20  he current unix 
1edf0 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a  timestamp.</p>..
1ee00 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1ee10 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1ee20 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c  %s','now');.</bl
1ee30 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1ee40 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1ee50 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
1ee60 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
1ee70 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
1ee80 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
1ee90 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence.</p>..<bloc
1eea0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1eeb0 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
1eec0 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  ) - julianday('1
1eed0 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62  776-07-04');.</b
1eee0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1eef0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
1ef00 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
1ef10 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75   since a particu
1ef20 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30  lar moment in 20
1ef30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  04:</p>..<blockq
1ef40 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
1ef50 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1ef60 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27  w') - strftime('
1ef70 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20  %s','2004-01-01 
1ef80 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c  02:34:56');.</bl
1ef90 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1efa0 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64  p>.Compute the d
1efb0 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  ate of the first
1efc0 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f   Tuesday in Octo
1efd0 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72  ber.for the curr
1efe0 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  ent year..</p>..
1eff0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1f000 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1f010 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27  ,'start of year'
1f020 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65  ,'+9 months','we
1f030 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f  ekday 2');.</blo
1f040 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f050 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d  >Compute the tim
1f060 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78  e since the unix
1f070 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64   epoch in second
1f080 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d  s .(like strftim
1f090 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78  e('%s','now') ex
1f0a0 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72  cept includes fr
1f0b0 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c  actional part):<
1f0c0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1f0d0 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69  >.  SELECT (juli
1f0e0 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32  anday('now') - 2
1f0f0 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e  440587.5)*86400.
1f100 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  0;.</blockquote>
1f110 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20  )^..<h3>Caveats 
1f120 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c  And Bugs</h3>..<
1f130 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  p>The computatio
1f140 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20  n of local time 
1f150 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20  depends heavily 
1f160 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20  on the whim .of 
1f170 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20  politicians and 
1f180 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c  is thus difficul
1f190 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74  t to get correct
1f1a0 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65   for .all locale
1f1b0 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c  s. ^In this impl
1f1c0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
1f1d0 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1f1e0 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
1f1f0 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
1f200 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
1f210 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
1f220 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
1f230 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d   ^(The .localtim
1f240 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e  e_r() C function
1f250 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77   normally only w
1f260 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62  orks for years.b
1f270 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20  etween 1970 and 
1f280 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20  2037. For dates 
1f290 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e  outside this ran
1f2a0 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65  ge, SQLite .atte
1f2b0 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20  mpts to map the 
1f2c0 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75  year into an equ
1f2d0 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74  ivalent year wit
1f2e0 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c  hin .this range,
1f2f0 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74   do the calculat
1f300 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68  ion, then map th
1f310 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f  e year back.)^</
1f320 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20  p>...<p>^(These 
1f330 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77  functions only w
1f340 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65  ork for dates be
1f350 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1f360 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39   00:00:00.and 99
1f370 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35  99-12-31 23:59:5
1f380 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e  9 (julidan day n
1f390 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35  umbers 1721059.5
1f3a0 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34   through 5373484
1f3b0 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73  .5).)^.For dates
1f3c0 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61   outside that ra
1f3d0 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  nge, the results
1f3e0 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69   of these.functi
1f3f0 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ons are undefine
1f400 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56  d.</p>..<p>Non-V
1f410 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1f420 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70  tforms only supp
1f430 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44  ort one set of D
1f440 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61  ST rules. .Vista
1f450 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74   only supports t
1f460 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f  wo. Therefore, o
1f470 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d  n these platform
1f480 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44  s, .historical D
1f490 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20  ST calculations 
1f4a0 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63  will be incorrec
1f4b0 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  t. .For example,
1f4c0 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32   in the US, in 2
1f4d0 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65  007 the DST rule
1f4e0 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d  s changed. .Non-
1f4f0 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
1f500 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68  atforms apply th
1f510 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72  e new 2007 DST r
1f520 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65  ules .to all pre
1f530 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77  vious years as w
1f540 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20  ell. Vista does 
1f550 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a  somewhat better.
1f560 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20  getting results 
1f570 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20  correct back to 
1f580 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72  1986, when the r
1f590 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63  ules were also c
1f5a0 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  hanged.</p>..<p>
1f5b0 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d  All internal com
1f5c0 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65  putations assume
1f5d0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1f5e0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1f5f0 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61  iki/Gregorian_ca
1f600 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69  lendar | Gregori
1f610 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73  an calendar].sys
1f620 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
1f630 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
1f640 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
1f650 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
1f660 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
1f670 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1f680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6c0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1f6d0 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
1f6e0 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a  ions} aggfunc {*
1f6f0 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a  aggfunc}.</tcl>.
1f700 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61  .<p>.The aggrega
1f710 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  te functions sho
1f720 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
1f730 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
1f740 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61  t.  Additional.a
1f750 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1f760 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
1f770 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69  may be added usi
1f780 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33  ng the .[sqlite3
1f790 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1f7a0 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  ()]</a>.API.</p>
1f7b0 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67  ..<p>.^In any ag
1f7c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1f7d0 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69   that takes a si
1f7e0 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74  ngle argument, t
1f7f0 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e  hat argument.can
1f800 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
1f810 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54  the keyword DIST
1f820 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20  INCT.  ^In such 
1f830 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
1f840 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
1f850 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
1f860 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
1f870 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
1f880 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  nction..^For exa
1f890 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69  mple, the functi
1f8a0 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e  on "count(distin
1f8b0 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75  ct X)" will retu
1f8c0 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  rn the number.of
1f8d0 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73   distinct values
1f8e0 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73   of column X ins
1f8f0 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61  tead of the tota
1f900 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  l number of non-
1f910 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63  null.values in c
1f920 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c  olumn X..</p>..<
1f930 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
1f940 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
1f950 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76  tcl>.funcdef {av
1f960 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67  g(X)} {*avg {avg
1f970 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1f980 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1f990 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a   avg() function.
1f9a0 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 76    returns the av
1f9b0 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61  erage value of a
1f9c0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58  ll non-NULL <i>X
1f9d0 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20  </i> within a.  
1f9e0 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20  group.  ^String 
1f9f0 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20  and BLOB values 
1fa00 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b  that do not look
1fa10 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72   like numbers ar
1fa20 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20  e.  interpreted 
1fa30 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73  as 0..  ^The res
1fa40 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
1fa50 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1fa60 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73  g point value as
1fa70 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68   long as.  at th
1fa80 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74 20  ere is at least 
1fa90 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  one non-NULL inp
1faa0 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ut even if all. 
1fab0 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
1fac0 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75  gers.  ^The resu
1fad0 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e  lt of avg() is N
1fae0 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ULL if and only 
1faf0 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e  if.  there are n
1fb00 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
1fb10 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  s.  .}..funcdef 
1fb20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28  {count(X) count(
1fb30 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75  *)} {*count {cou
1fb40 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  nt() aggregate f
1fb50 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1fb60 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63  he count(X) func
1fb70 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
1fb80 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75   count of the nu
1fb90 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20  mber of times.  
1fba0 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73  that <i>X</i> is
1fbb0 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67   not NULL in a g
1fbc0 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e  roup.  ^The coun
1fbd0 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  t(*) function.  
1fbe0 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
1fbf0 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  ts) returns the 
1fc00 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1fc10 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
1fc20 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  p..}..funcdef {g
1fc30 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67  roup_concat(X) g
1fc40 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29  roup_concat(X,Y)
1fc50 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e  } {.  *group_con
1fc60 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  cat {group_conca
1fc70 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
1fc80 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
1fc90 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  he group_concat(
1fca0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1fcb0 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68  ns.  a string wh
1fcc0 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61  ich is the conca
1fcd0 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c  tenation of.  al
1fce0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
1fcf0 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  s of <i>X</i>.  
1fd00 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69  ^If parameter <i
1fd10 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e  >Y</i> is presen
1fd20 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75  t then.  it is u
1fd30 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1fd40 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69  ator.  between i
1fd50 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58  nstances of <i>X
1fd60 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20  </i>.  ^A comma 
1fd70 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
1fd80 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
1fd90 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
1fda0 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
1fdb0 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
1fdc0 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
1fdd0 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
1fde0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
1fdf0 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e  (X)} {*maxAggFun
1fe00 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28  c *agg_max {max(
1fe10 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1fe20 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1fe30 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1fe40 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
1fe50 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  ns the maximum v
1fe60 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
1fe70 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1fe80 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  .  ^The maximum 
1fe90 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c  value is the val
1fea0 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ue that would be
1feb0 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69   returned last i
1fec0 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20  n an.  ORDER BY 
1fed0 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75  on the same colu
1fee0 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  mn.  ^Aggregate 
1fef0 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55  max() returns NU
1ff00 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c  LL .  if and onl
1ff10 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
1ff20 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  o non-NULL value
1ff30 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1ff40 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
1ff50 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63  X)} {*minAggFunc
1ff60 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29   *agg_min {min()
1ff70 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1ff80 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1ff90 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1ffa0 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
1ffb0 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f  s the minimum no
1ffc0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20  n-NULL value of 
1ffd0 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
1ffe0 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20  e group..  ^The 
1fff0 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
20000 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
20010 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77  ULL value that w
20020 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e  ould appear.  in
20030 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20   an ORDER BY of 
20040 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41  the column..  ^A
20050 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72  ggregate min() r
20060 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61  eturns NULL if a
20070 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
20080 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
20090 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  .  values in the
200a0 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
200b0 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c  ef {sum(X) total
200c0 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e  (X)} {.  *sumFun
200d0 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20  c *sum *total.  
200e0 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74 65  {sum() aggregate
200f0 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f   function}.  {to
20100 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20  tal() aggregate 
20110 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
20120 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74  ^The sum() and t
20130 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
20140 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74   functions.  ret
20150 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e  urn sum of all n
20160 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
20170 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
20180 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
20190 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
201a0 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
201b0 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75  eturns.  NULL bu
201c0 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
201d0 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73  s 0.0..  NULL is
201e0 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20   not normally a 
201f0 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66  helpful result f
20200 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f  or the sum of no
20210 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20   rows.  but the 
20220 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
20230 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
20240 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61  t other.  SQL da
20250 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
20260 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
20270 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
20280 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
20290 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f  .  same way in o
202a0 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61  rder to be compa
202b0 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e  tible.   The non
202c0 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
202d0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
202e0 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
202f0 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
20300 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
20310 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
20320 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
20330 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
20340 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  >^The result of 
20350 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79  total() is alway
20360 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
20370 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  nt value..  ^The
20380 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
20390 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
203a0 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
203b0 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
203c0 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20  integers..  ^If 
203d0 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
203e0 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
203f0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
20400 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
20410 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
20420 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
20430 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
20440 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
20450 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
20460 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d  .</p>..  <p>^Sum
20470 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  () will throw an
20480 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c   "integer overfl
20490 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66  ow" exception if
204a0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72   all inputs.  ar
204b0 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55  e integers or NU
204c0 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  LL.  and an inte
204d0 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
204e0 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
204f0 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
20500 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61  utation..  ^Tota
20510 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
20520 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
20530 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  flow..}.</tcl>.<
20540 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
20550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20590 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
205a0 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
205b0 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53  ert {INSERT *INS
205c0 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ERTs}..Recursive
205d0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
205e0 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  sert-stmt.</tcl>
205f0 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  ..<p>The INSERT 
20600 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
20610 69 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66  in three basic f
20620 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69  orms.  .<ul>.<li
20630 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66  ><p>^The first f
20640 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56  orm (with the "V
20650 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
20660 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d  creates one or m
20670 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a  ore.new rows in.
20680 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
20690 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e  e. ^If no column
206a0 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
206b0 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  ed then the numb
206c0 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73  er.of values ins
206d0 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20  erted into each 
206e0 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20  row.must be the 
206f0 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
20700 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
20710 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20   the table. ^In 
20720 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65  this case.the re
20730 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
20740 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ng the left-most
20750 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d   expression from
20760 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68   each term of.th
20770 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73  e VALUES list is
20780 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
20790 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
207a0 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65 77 20  umn of each new 
207b0 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74  row,.and so fort
207c0 68 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65  h for each subse
207d0 71 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  quent expression
207e0 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c  . ^If a.column-l
207f0 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
20800 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
20810 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65  r of values in e
20820 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a  ach term of the.
20830 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20  VALUE list must 
20840 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72  match the number
20850 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f   of.specified co
20860 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20  lumns. ^Each of 
20870 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
20880 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77  s of the new row
20890 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69   is populated.wi
208a0 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  th the results o
208b0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
208c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56   corresponding V
208d0 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e  ALUES expression
208e0 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73  . ^Table.columns
208f0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70   that do not app
20900 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ear in the colum
20910 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c  n list are popul
20920 61 74 65 64 20 77 69 74 68 20 74 68 65 20 64 65  ated with the de
20930 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c  fault.column val
20940 75 65 20 28 73 70 65 63 69 66 69 65 64 20 61 73  ue (specified as
20950 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45   part of the CRE
20960 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
20970 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55  ent), or with NU
20980 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74  LL if.no default
20990 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66   value is specif
209a0 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65  ied...<li><p>The
209b0 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
209c0 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  the INSERT state
209d0 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  ment contains a 
209e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
209f0 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41  .instead of a VA
20a00 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20  LUES clause. ^A 
20a10 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73  new entry is ins
20a20 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74  erted into the t
20a30 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f  able for each.ro
20a40 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  w of data return
20a50 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20  ed by executing 
20a60 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
20a70 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75  ment. ^If a colu
20a80 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69  mn-list is.speci
20a90 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  fied, the number
20aa0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
20ab0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
20ac0 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20   SELECT must be 
20ad0 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20  the same.as the 
20ae0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20  number of items 
20af0 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69  in the column-li
20b00 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  st. ^Otherwise, 
20b10 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73  if no column-lis
20b20 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20  t is.specified, 
20b30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
20b40 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
20b50 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  ult of the SELEC
20b60 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
20b70 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me.as the number
20b80 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
20b90 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53  he table. ^Any S
20ba0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
20bb0 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70   including.[comp
20bc0 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e  ound SELECTs] an
20bd0 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d SELECT stateme
20be0 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20  nts with [ORDER 
20bf0 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49  BY] and/or [LIMI
20c00 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79  T] clauses, .may
20c10 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49   be used in an I
20c20 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
20c30 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c  of this form...<
20c40 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20  li><p>The third 
20c50 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52  form of an INSER
20c60 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77  T statement is w
20c70 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ith DEFAULT VALU
20c80 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54  ES..^(The INSERT
20c90 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c   ... DEFAULT VAL
20ca0 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  UES statement in
20cb0 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e  serts a single n
20cc0 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  ew row into the.
20cd0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e  named table.)^ ^
20ce0 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
20cf0 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
20d00 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73  pulated with its
20d10 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a   default value,.
20d20 6f 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69  or with a NULL i
20d30 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c  f no default val
20d40 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ue is specified 
20d50 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
20d60 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e  olumn.definition
20d70 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
20d80 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ABLE statement..
20d90 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</ul>..<p>^The 
20da0 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
20db0 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
20dc0 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
20dd0 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
20de0 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
20df0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
20e00 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
20e10 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
20e20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61  one INSERT comma
20e30 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
20e40 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
20e50 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
20e60 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
20e70 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  ion..For compati
20e80 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
20e90 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61  L, ^the parser a
20ea0 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
20eb0 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
20ec0 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
20ed0 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
20ee0 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
20ef0 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
20f00 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
20f10 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  ...<p>^(The opti
20f20 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73  onal "<i>databas
20f30 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
20f40 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68  b>" prefix on th
20f50 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
20f60 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66  /i>.is support f
20f70 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or top-level INS
20f80 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
20f90 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  nly.)^  ^The tab
20fa0 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a  le name must be.
20fb0 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20  unqualified for 
20fc0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
20fd0 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
20fe0 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47  hin [CREATE TRIG
20ff0 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  GER] statements.
21000 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  .^Similarly, the
21010 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53   "DEFAULT VALUES
21020 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e  " form of the IN
21030 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
21040 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  s supported for.
21050 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54  top-level INSERT
21060 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79   statements only
21070 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53   and not for INS
21080 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ERT statements w
21090 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a  ithin.triggers..
210a0 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  <p>..<tcl>.#####
210b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210f0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
21100 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
21110 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
21120 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
21130 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
21140 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
21150 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69  leDiagram confli
21160 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ct-clause.</tcl>
21170 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
21180 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e  LICT clause is n
21190 6f 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51  ot a separate SQ
211a0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69  L command.  It i
211b0 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  s a.non-standard
211c0 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e   clause that can
211d0 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20   appear in many 
211e0 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  other SQL comman
211f0 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20  ds..It is given 
21200 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20  its own section 
21210 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  in this document
21220 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e   because it is n
21230 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64  ot.part of stand
21240 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72  ard SQL and ther
21250 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20  efore might not 
21260 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e  be familiar.</p>
21270 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78  ..<p>^The syntax
21280 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
21290 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
212a0 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f  s shown above fo
212b0 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42  r.the CREATE TAB
212c0 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f  LE command.  ^Fo
212d0 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64  r the INSERT and
212e0 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73  .UPDATE commands
212f0 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  , the keywords "
21300 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65  ON CONFLICT" are
21310 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52   replaced by "OR
21320 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79  " so that.the sy
21330 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20  ntax reads more 
21340 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20  naturally.  For 
21350 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64  example, instead
21360 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43   of."INSERT ON C
21370 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20  ONFLICT IGNORE" 
21380 77 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20  we have "INSERT 
21390 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20  OR IGNORE"..The 
213a0 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20  keywords change 
213b0 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20  but the meaning 
213c0 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73  of the clause is
213d0 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72   the same.either
213e0 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   way.</p>..<p>Th
213f0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
21400 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
21410 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e  [UNIQUE], [NOT N
21420 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61  ULL],.[CHECK], a
21430 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  nd [PRIMARY KEY]
21440 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68   constraints..Th
21450 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
21460 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
21470 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
21480 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
21490 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
214a0 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
214b0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
214c0 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
214d0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
214e0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
214f0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
21500 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
21510 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
21520 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
21530 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
21540 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
21550 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
21560 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
21570 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
21580 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
21590 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
215a0 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
215b0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
215c0 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
215d0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
215e0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
215f0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
21600 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
21610 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
21620 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
21630 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
21640 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
21650 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
21660 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
21670 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
21680 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
21690 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
216a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
216b0 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
216c0 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
216d0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
216e0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
216f0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
21700 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
21710 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
21720 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
21730 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
21740 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21750 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
21760 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
21770 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
21780 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
21790 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20  error and backs 
217a0 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a  out any changes.
217b0 6d 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72  made by the curr
217c0 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
217d0 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63  t; but changes c
217e0 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53  aused.by prior S
217f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
21800 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  thin the same tr
21810 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72  ansaction are pr
21820 65 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a  eserved and the.
21830 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
21840 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73  ins active..This
21850 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
21860 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65  behavior and the
21870 20 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66   behavior specif
21880 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73  ied by the SQL.s
21890 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64  tandard.</p></dd
218a0 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
218b0 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
218c0 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
218d0 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
218e0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
218f0 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75   the FAIL.resolu
21900 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
21910 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
21920 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
21930 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43  with an.SQLITE_C
21940 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e  ONSTRAINT error.
21950 20 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20    ^But the FAIL 
21960 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20  resolution does 
21970 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69  not.back out pri
21980 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68  or changes of th
21990 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
219a0 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20  that failed nor 
219b0 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20  does.it end the 
219c0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f  transaction..^Fo
219d0 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
219e0 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
219f0 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
21a00 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21a10 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
21a20 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
21a30 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
21a40 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
21a50 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
21a60 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
21a70 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
21a80 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
21a90 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
21aa0 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
21ab0 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
21ac0 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
21ad0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
21ae0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21af0 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e  occurs, .the IGN
21b00 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORE resolution a
21b10 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74  lgorithm skips t
21b20 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
21b30 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
21b40 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
21b50 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  n and continues 
21b60 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65  processing subse
21b70 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68  quent rows.of th
21b80 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
21b90 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65  as if nothing we
21ba0 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20  nt wrong..Other 
21bb0 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20  rows before and 
21bc0 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68  after the row th
21bd0 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65  at.contained the
21be0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
21bf0 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74  ation are insert
21c00 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f  ed or updated.no
21c10 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f  rmally. ^No erro
21c20 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68  r is returned wh
21c30 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f  en the IGNORE co
21c40 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
21c50 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  n.algorithm is u
21c60 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  sed.</p></dd>..<
21c70 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62  dt><b>REPLACE</b
21c80 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
21c90 57 68 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20  When a [UNIQUE] 
21ca0 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  or [PRIMARY KEY]
21cb0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
21cc0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
21cd0 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72  he REPLACE algor
21ce0 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65  ithm.deletes pre
21cf0 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74  -existing rows t
21d00 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
21d10 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
21d20 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74  iolation.prior t
21d30 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75  o inserting or u
21d40 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
21d50 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20  ent row and the 
21d60 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65  command continue
21d70 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  s .executing nor
21d80 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f  mally..^If a [NO
21d90 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69  T NULL] constrai
21da0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
21db0 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
21dc0 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75   conflict.resolu
21dd0 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68  tion replaces th
21de0 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74  e NULL value wit
21df0 68 0a 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  h.the default va
21e00 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
21e10 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63  umn, or if the c
21e20 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
21e30 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
21e40 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
21e50 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49  ithm is used..^I
21e60 66 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73  f a [CHECK] cons
21e70 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21e80 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
21e90 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
21ea0 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
21eb0 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20  hm always works 
21ec0 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a  like ABORT.</p>.
21ed0 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45  .<p>^When the RE
21ee0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
21ef0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
21f00 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
21f10 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
21f20 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
21f30 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
21f40 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
21f50 65 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64  ers] fire if and
21f60 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73   only if.[recurs
21f70 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
21f80 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
21f90 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
21fa0 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
21fb0 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
21fc0 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
21fd0 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
21fe0 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
21ff0 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
22000 20 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20   by the REPLACE 
22010 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
22020 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e  ion strategy.  ^
22030 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45  Nor does.REPLACE
22040 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b   increment the [
22050 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
22060 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  | change counter
22070 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  ]..The exception
22080 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
22090 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
220a0 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
220b0 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
220c0 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
220d0 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67  dl>..<p>^The alg
220e0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
220f0 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73   in the OR claus
22100 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  e of an INSERT o
22110 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64  r UPDATE.overrid
22120 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d  es any algorithm
22130 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20   specified in a 
22140 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49  CREATE TABLE..^I
22150 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69  f no algorithm i
22160 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77  s specified anyw
22170 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20  here, the ABORT 
22180 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
22190 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
221a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221e0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
221f0 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
22200 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65  ndex REINDEX..Re
22210 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
22220 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d  gram reindex-stm
22230 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
22240 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
22250 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
22260 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
22270 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
22280 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
22290 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
222a0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
222b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
222c0 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
222d0 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
222e0 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
222f0 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
22300 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
22310 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62  equence or datab
22320 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e  ase .object iden
22330 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c  tifier, then all
22340 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
22350 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
22360 65 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a  es are rebuilt..
22370 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
22380 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66  DEX keyword is f
22390 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
223a0 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
223b0 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69  name, then.all i
223c0 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
223d0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
223e0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
223f0 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
22400 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72  quences.are recr
22410 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c  eated. ..<p>^Or,
22420 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
22430 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
22440 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66   REINDEX identif
22450 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a  ies a specific .
22460 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20  database table, 
22470 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
22480 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
22490 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
224a0 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49  are rebuilt. .^I
224b0 66 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20  f it identifies 
224c0 61 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62  a specific datab
224d0 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  ase index, then 
224e0 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20  just that index 
224f0 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c  is recreated...<
22500 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
22510 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
22520 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
22530 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
22540 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
22550 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
22560 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
22570 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
22580 2c 20 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72  , SQLite interpr
22590 65 74 73 0a 74 68 69 73 20 61 73 20 61 20 72 65  ets.this as a re
225a0 71 75 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64  quest to rebuild
225b0 20 74 68 65 20 69 6e 64 69 63 65 73 20 74 68 61   the indices tha
225c0 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
225d0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
225e0 63 65 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69  ce..This ambigui
225f0 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78  ty in the syntax
22600 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64 20   may be avoided 
22610 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66  by always specif
22620 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61  ying a.<i>databa
22630 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e  se-name</i> when
22640 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
22650 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
22660 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<tcl>.##
22670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226b0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
226c0 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
226d0 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
226e0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
226f0 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
22700 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
22710 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
22720 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
22730 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
22740 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
22750 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
22760 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
22770 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
22780 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
22790 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
227a0 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
227b0 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
227c0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
227d0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
227e0 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
227f0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
22800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22840 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63  .Section {WITH c
22850 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f  lause} with {{co
22860 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22870 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52  ssions} WITH}..R
22880 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
22890 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73  agram with-claus
228a0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d  e.</tcl>..<p>Com
228b0 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
228c0 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63  sions or CTEs ac
228d0 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79  t like temporary
228e0 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78   [views] that ex
228f0 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ist.only for the
22900 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
22910 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
22920 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20  ent.  There are 
22930 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d  two kinds of.com
22940 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22950 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79  sions: "ordinary
22960 22 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65  " and "recursive
22970 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d  ". Ordinary .com
22980 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22990 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75  sions are helpfu
229a0 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65  l for making.que
229b0 72 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75  ries easier to u
229c0 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63  nderstand by fac
229d0 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65  toring.subquerie
229e0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69  s out of the mai
229f0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
22a00 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  .Recursive commo
22a10 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22a20 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20  ons.provide the 
22a30 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69  ability to do hi
22a40 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65  erarchical or.re
22a50 63 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20  cursive queries 
22a60 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61  of trees and gra
22a70 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74  phs, a capabilit
22a80 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74  y.that is not ot
22a90 68 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c  herwise availabl
22aa0 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  e in the SQL lan
22ab0 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63  guage...<p>All c
22ac0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22ad0 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72  essions (ordinar
22ae0 79 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29  y and recursive)
22af0 20 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79   are .created by
22b00 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49   prepending a WI
22b10 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f  TH clause in fro
22b20 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d  nt of a [SELECT]
22b30 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c  , [INSERT], [DEL
22b40 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ETE],.or [UPDATE
22b50 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20  ] statement.  A 
22b60 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
22b70 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f  se can specify o
22b80 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f  ne or more.commo
22b90 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22ba0 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69  ons, some of whi
22bb0 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20  ch are ordinary 
22bc0 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  and some of whic
22bd0 68 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e  h.are recursive.
22be0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
22bf0 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b  nt ordinarycte {
22c00 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
22c10 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22c20 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64  s}</tcl>.<h3>Ord
22c30 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62  inary Common Tab
22c40 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
22c50 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e  h3>..<p>An ordin
22c60 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
22c70 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b   expression work
22c80 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  s as if it were 
22c90 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78  a [view] that.ex
22ca0 69 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72  ists for the dur
22cb0 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
22cc0 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72  e statement.  Or
22cd0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
22ce0 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  ble.expressions 
22cf0 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66  are useful for f
22d00 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62  actoring out sub
22d10 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69  queries and maki
22d20 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53  ng the overall.S
22d30 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73  QL statement eas
22d40 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20  ier to read and 
22d50 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e  understand...<p>
22d60 41 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  A WITH clause ca
22d70 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61  n contain ordina
22d80 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
22d90 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e  expressions even
22da0 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20   if.it includes 
22db0 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
22dc0 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20  yword.  The use 
22dd0 6f 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65  of RECURSIVE doe
22de0 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d  s not force.comm
22df0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22e00 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72  ions to be recur
22e10 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  sive...<tcl>.hd_
22e20 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69  fragment recursi
22e30 76 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65  vecte {recursive
22e40 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22e50 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65  pressions} \.{re
22e60 63 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c  cursive query}.<
22e70 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73  /tcl>.<h3>Recurs
22e80 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65  ive Common Table
22e90 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
22ea0 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76  >..<p>A recursiv
22eb0 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
22ec0 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
22ed0 20 75 73 65 64 20 74 6f 20 77 72 69 74 65 20 61   used to write a
22ee0 20 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b   query that.walk
22ef0 73 20 61 20 74 72 65 65 20 6f 72 20 67 72 61 70  s a tree or grap
22f00 68 2e 20 20 41 20 72 65 63 75 72 73 69 76 65 20  h.  A recursive 
22f10 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22f20 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20  ression has the 
22f30 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61  same.basic synta
22f40 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  x as an ordinary
22f50 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22f60 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69  pression, but wi
22f70 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
22f80 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74  .additional feat
22f90 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  ures:..<ol>.<li>
22fa0 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74   The "[select-st
22fb0 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62  mt]".     must b
22fc0 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  e a [compound se
22fd0 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65 20  lect] where the 
22fe0 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70  right-most [comp
22ff0 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69  ound-operator] i
23000 73 0a 20 20 20 20 20 65 69 74 68 65 72 20 55 4e  s.     either UN
23010 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c  ION or UNION ALL
23020 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65  ..<li> The table
23030 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65   named on the le
23040 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ft-hand side of 
23050 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d  the AS keyword m
23060 75 73 74 20 61 70 70 65 61 72 0a 20 20 20 20 20  ust appear.     
23070 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
23080 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
23090 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  of the right-mos
230a0 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
230b0 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63  nt.     of the c
230c0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20  ompound select, 
230d0 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65  and nowhere else
230e0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70  ..</ol>..<p>To p
230f0 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
23100 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63  y, a recursive c
23110 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23120 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b  ession must.look
23130 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
23140 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72  ing:..<tcl>Recur
23150 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
23160 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c  m recursive-cte<
23170 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66  /tcl>..<p>We ref
23180 65 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  er to the table 
23190 6e 61 6d 65 64 20 62 79 20 74 68 65 20 63 74 65  named by the cte
231a0 2d 74 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61  -table-name in a
231b0 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f   recursive.commo
231c0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
231d0 6f 6e 20 61 73 20 74 68 65 20 22 72 65 63 75 72  on as the "recur
231e0 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20  sive table"..In 
231f0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 63 74  the recursive-ct
23200 65 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  e bubble diagram
23210 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
23220 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
23230 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
23240 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
23250 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72   clause of the r
23260 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a  ecursive-select.
23270 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70  and must not app
23280 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ear anywhere els
23290 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 20  e in either the 
232a0 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f  initial-select o
232b0 72 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d  r the.recursive-
232c0 73 65 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e  select, includin
232d0 67 20 73 75 62 71 75 65 72 69 65 73 2e 20 20 54  g subqueries.  T
232e0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
232f0 74 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70  t may be.a [comp
23300 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75  ound select], bu
23310 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63  t it may not inc
23320 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59  lude an ORDER BY
23330 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53  , LIMIT, or OFFS
23340 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76  ET..The recursiv
23350 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65  e-select must be
23360 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74   a simple select
23370 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64  , not a compound
23380 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65  .  The.recursive
23390 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77  -select is allow
233a0 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e  ed to include an
233b0 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54   ORDER BY, LIMIT
233c0 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e  , and/or OFFSET.
233d0 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61  ..<p>The basic a
233e0 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d  lgorithm for com
233f0 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  puting the conte
23400 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
23410 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20  ive table.is as 
23420 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c  follows:..<ol>.<
23430 6c 69 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74  li> Run the init
23440 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61  ial-select and a
23450 64 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74  dd the results t
23460 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  o a queue..<li> 
23470 57 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20  While the queue 
23480 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f  is not empty:.<o
23490 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e  l type="a">.<li>
234a0 20 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c   Extract a singl
234b0 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71  e row from the q
234c0 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72  ueue..<li> Inser
234d0 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f  t that single ro
234e0 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72  w into the recur
234f0 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20  sive table.<li> 
23500 50 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65  Pretend that the
23510 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74   single row just
23520 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
23530 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20  e only.     row 
23540 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
23550 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74   table and run t
23560 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
23570 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67  ect,.     adding
23580 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20   all results to 
23590 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e  the queue..</ol>
235a0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62  .</ol>..<p>The b
235b0 61 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61  asic procedure a
235c0 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65  bove may modifie
235d0 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
235e0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75  ng additional ru
235f0 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  les:..<ul>.<li><
23600 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20  p>.  If a UNION 
23610 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74  operator connect
23620 73 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  s the initial-se
23630 6c 65 63 74 20 77 69 74 68 20 74 68 65 0a 20 20  lect with the.  
23640 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
23650 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20  , then only add 
23660 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65 75  rows to the queu
23670 65 20 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61  e if no identica
23680 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e  l row has.  been
23690 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65   previously adde
236a0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d to the queue. 
236b0 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61   Repeated rows a
236c0 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66  re discarded bef
236d0 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65  ore being.  adde
236e0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65  d to the queue e
236f0 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61  ven if the repea
23700 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c  ted rows have al
23710 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61  ready been extra
23720 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20  cted.  from the 
23730 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63  queue by the rec
23740 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66  ursion step.  If
23750 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
23760 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68   UNION ALL,.  th
23770 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65  en all rows gene
23780 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68  rated by both th
23790 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
237a0 20 61 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72   and the.  recur
237b0 73 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20  sive-select are 
237c0 61 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20  always added to 
237d0 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69  the queue even i
237e0 66 20 74 68 65 79 20 61 72 65 20 72 65 70 65 61  f they are repea
237f0 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72  ts..  When deter
23800 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20  mining if a row 
23810 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c  is repeated, NUL
23820 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65  L values compare
23830 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20  .  equal to one 
23840 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20  another and not 
23850 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68  equal to any oth
23860 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70  er value..<li><p
23870 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c  >.  The LIMIT cl
23880 61 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74  ause, if present
23890 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  , determines the
238a0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
238b0 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77  of rows that.  w
238c0 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64 65  ill ever be adde
238d0 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
238e0 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70  ve table in step
238f0 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20   2b..  Once the 
23900 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68 65 64  limit is reached
23910 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  , the recursion 
23920 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74  stops..  A limit
23930 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74   of zero means t
23940 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20  hat no rows are 
23950 65 76 65 72 20 61 64 64 65 64 20 74 6f 20 74 68  ever added to th
23960 65 0a 20 20 72 65 63 75 72 73 69 76 65 20 74 61  e.  recursive ta
23970 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74  ble, and a negat
23980 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20  ive limit means 
23990 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d  an unlimited num
239a0 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61  ber of rows.  ma
239b0 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
239c0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
239d0 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65  e..<li><p>.  The
239e0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
239f0 69 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74  if it is present
23a00 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74   and has a posit
23a10 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65  ive value N, pre
23a20 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73  vents the.  firs
23a30 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65  t N rows from be
23a40 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68 65  ing added to the
23a50 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
23a60 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e 20  ..  The first N 
23a70 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70  rows are still p
23a80 72 6f 63 65 73 73 65 64 20 62 79 20 74 68 65 20  rocessed by the 
23a90 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
23aa0 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72  ; they.  just ar
23ab0 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74  e not added to t
23ac0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
23ad0 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f  le.  Rows are no
23ae0 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64  t counted toward
23af0 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68  .  fulfilling th
23b00 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c  e LIMIT until al
23b10 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61  l OFFSET rows ha
23b20 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e  ve been skipped.
23b30 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e  .<li><p>.  If an
23b40 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
23b50 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20   is present, it 
23b60 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f  determines the o
23b70 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
23b80 77 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74  ws.  are extract
23b90 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
23ba0 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49  e in step 2a.  I
23bb0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52  f there is no OR
23bc0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20  DER BY clause,. 
23bd0 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
23be0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
23bf0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75  e extracted is u
23c00 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74  ndefined.  (In t
23c10 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70  he current.  imp
23c20 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
23c30 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61   queue becomes a
23c40 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44   FIFO if the ORD
23c50 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
23c60 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61  omitted,.  but a
23c70 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75  pplications shou
23c80 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e  ld not depend on
23c90 20 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65   that fact since
23ca0 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65   it might change
23cb0 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  .).</ul>..<tcl>h
23cc0 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31  d_fragment rcex1
23cd0 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72  </tcl>.<h4>Recur
23ce0 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
23cf0 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
23d00 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
23d10 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74   returns all int
23d20 65 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20  egers between 1 
23d30 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62  and 1000000:..<b
23d40 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
23d50 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
23d60 20 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55   cnt(x) AS (VALU
23d70 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
23d80 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
23d90 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30  cnt WHERE x<1000
23da0 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52  000).SELECT x FR
23db0 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f  OM cnt;.</pre></
23dc0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
23dd0 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69  Consider how thi
23de0 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20  s query works.  
23df0 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
23e00 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e  ct.runs first an
23e10 64 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67  d returns a sing
23e20 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69  le row.with a si
23e30 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e  ngle column "1".
23e40 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69    This one row i
23e50 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
23e60 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32  ueue.  In.step 2
23e70 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  a, that one row 
23e80 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
23e90 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20  m the queue and 
23ea0 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a  added to "cnt"..
23eb0 54 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69  Then the recursi
23ec0 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
23ed0 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77   in accordance w
23ee0 69 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65  ith step 2c gene
23ef0 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20  rating.a single 
23f00 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c  new row with val
23f10 75 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f  ue "2" to add to
23f20 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65   the queue.  The
23f30 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73   queue still.has
23f40 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65   one row, so ste
23f50 70 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68  p 2 repeats.  Th
23f60 65 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74  e "2" row is ext
23f70 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64  racted and added
23f80 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76   to the.recursiv
23f90 65 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73  e table by steps
23fa0 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65   2a and 2b.  The
23fb0 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69  n the row contai
23fc0 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a  ning 2 is used .
23fd0 61 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68  as if it were th
23fe0 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65  e complete conte
23ff0 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
24000 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  ive table and th
24010 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  e .recursive-sel
24020 65 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e  ect is run again
24030 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
24040 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20   row with value 
24050 22 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a  "3" being added.
24060 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
24070 68 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39  his repeats 9999
24080 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66  99 times until f
24090 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32  inally at step 2
240a0 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65  a the.only value
240b0 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73   on the queue is
240c0 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e   a row containin
240d0 67 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74  g 1000000.  That
240e0 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65   row is.extracte
240f0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
24100 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
24110 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69  le.  But this ti
24120 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c  me, the.WHERE cl
24130 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
24140 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
24150 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f   to return no ro
24160 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65  ws, so the.queue
24170 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61   remains empty a
24180 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  nd the recursion
24190 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f   stops...<p><b>O
241a0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65  ptimization note
241b0 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73  :</b>.In the dis
241c0 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73  cussion above, s
241d0 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22  tatements like "
241e0 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69  insert the row i
241f0 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76  nto.the recursiv
24200 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20  e table" should 
24210 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f  be understood co
24220 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20  nceptually, not 
24230 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f  literally..It so
24240 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74  unds as if SQLit
24250 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e  e is accumulatin
24260 67 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63  g a huge table.c
24270 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69  ontaining one mi
24280 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e  llion rows, then
24290 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20   going back and 
242a0 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61  scanning that ta
242b0 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20  ble.from top to 
242c0 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61  bottom to genera
242d0 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  te the result.  
242e0 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70  What really happ
242f0 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20  ens.is that the 
24300 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
24310 73 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73  sees that values
24320 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65   in the."cnt" re
24330 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72  cursive table ar
24340 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65  e only used once
24350 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f  .  So as each ro
24360 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68  w is added to.th
24370 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24380 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69  e, that row is i
24390 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72  mmediately retur
243a0 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  ned as a result 
243b0 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45  of the main.SELE
243c0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
243d0 20 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e   then discarded.
243e0 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65    SQLite does <e
243f0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d  m>not</em> accum
24400 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72  ulate.a temporar
24410 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  y table containi
24420 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77  ng a million row
24430 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20  s.  Very little 
24440 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64  memory is.needed
24450 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76   to run the abov
24460 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  e example.  Howe
24470 76 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d  ver, if the exam
24480 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49  ple had used.UNI
24490 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e  ON instead of UN
244a0 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51  ION ALL, then SQ
244b0 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20  Lite would have 
244c0 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75  had to keep arou
244d0 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  nd.all previousl
244e0 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74  y generated cont
244f0 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ent in order to 
24500 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63  check for duplic
24510 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72  ates..For this r
24520 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  eason, programme
24530 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65  rs should strive
24540 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c   to use UNION AL
24550 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49  L instead.of UNI
24560 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65  ON when feasible
24570 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
24580 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
24590 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c   previous exampl
245a0 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
245b0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
245c0 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
245d0 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31   (.     SELECT 1
245e0 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
245f0 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20       SELECT x+1 
24600 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c  FROM cnt.      L
24610 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29  IMIT 1000000.  )
24620 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
24630 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
24640 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72  kquote>..<p>Ther
24650 65 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72  e are two differ
24660 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61  ences in this va
24670 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e  riation.  The in
24680 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a  itial-select is.
24690 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65  "SELECT 1" inste
246a0 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29  ad of "VALUES(1)
246b0 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72  ".  But those ar
246c0 65 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74  e just different
246d0 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61  .syntaxes for sa
246e0 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65  ying exactly the
246f0 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68   same thing.  Th
24700 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69  e other change i
24710 73 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72  s that the.recur
24720 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20  sion is stopped 
24730 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65  by a LIMIT rathe
24740 72 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63  r than a WHERE c
24750 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20  lause.  The use 
24760 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74  of.LIMIT means t
24770 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65  hat when the one
24780 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69  -millionth row i
24790 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22  s added to the "
247a0 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20  cnt" table.(and 
247b0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
247c0 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61  main SELECT, tha
247d0 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79  nks to the query
247e0 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e   optimizer).then
247f0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
24800 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  tops immediately
24810 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
24820 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67  ow many rows mig
24830 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68  ht be.left in th
24840 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72  e queue.  On mor
24850 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65  e complex querie
24860 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69  s, it can someti
24870 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74  mes be.difficult
24880 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
24890 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
248a0 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79   will eventually
248b0 20 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65   cause the.queue
248c0 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68   to drain and th
248d0 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74  e recursion to t
248e0 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74  erminate.  But t
248f0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
24900 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70  will.always stop
24910 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20   the recursion. 
24920 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70   So it is good p
24930 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79  ractice to alway
24940 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49  s include a.LIMI
24950 54 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61  T clause as a sa
24960 66 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72  fety if an upper
24970 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69   bound on the si
24980 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ze of the recurs
24990 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a  ion .is known...
249a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
249b0 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex2</tcl>.<h4
249c0 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75  >Hierarchical Qu
249d0 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34  ery Examples</h4
249e0 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61  >..<p>Consider a
249f0 20 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63   table that desc
24a00 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72  ribes the member
24a10 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61  s of an organiza
24a20 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20  tion as.well as 
24a30 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d  the chain-of-com
24a40 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74  mand within that
24a50 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a   organization:..
24a60 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
24a70 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  >.CREATE TABLE o
24a80 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  rg(.  name TEXT 
24a90 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62  PRIMARY KEY,.  b
24aa0 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e  oss TEXT REFEREN
24ab0 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68  CES org,.  heigh
24ac0 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65  t INT,.  -- othe
24ad0 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65  r content omitte
24ae0 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d.);.</pre></blo
24af0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65  ckquote>..<p>Eve
24b00 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65  ry member in the
24b10 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61   organization ha
24b20 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f  s a name, and mo
24b30 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a  st members have.
24b40 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20  a single boss.  
24b50 28 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65  (The head of the
24b60 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74   whole organizat
24b70 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22  ion has a NULL."
24b80 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68  boss" field.) Th
24b90 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f  e rows of the "o
24ba0 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  rg" table form a
24bb0 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20   tree...<p>Here 
24bc0 69 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20  is a query that 
24bd0 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65  computes the ave
24be0 72 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72  rage height over
24bf0 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69   everyone.in Ali
24c00 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f  ce's organizatio
24c10 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69  n, including Ali
24c20 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ce:..<blockquote
24c30 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
24c40 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f  RSIVE.  works_fo
24c50 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a  r_alice(n) AS (.
24c60 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63      VALUES('Alic
24c70 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20  e').    UNION.  
24c80 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
24c90 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f  OM org, works_fo
24ca0 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45  r_alice.     WHE
24cb0 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b  RE org.boss=work
24cc0 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20  s_for_alice.n.  
24cd0 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69  ).SELECT avg(hei
24ce0 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57  ght) FROM org. W
24cf0 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e  HERE org.name IN
24d00 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65   works_for_alice
24d10 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
24d20 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65  uote>..<p>The ne
24d30 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20  xt example uses 
24d40 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  two .common tabl
24d50 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
24d60 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
24d70 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c  lause.  .The fol
24d80 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63  lowing table rec
24d90 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72  ords a family tr
24da0 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ee:..<blockquote
24db0 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
24dc0 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61  BLE family(.  na
24dd0 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
24de0 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20  KEY,.  mom TEXT 
24df0 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
24e00 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45  y,.  dad TEXT RE
24e10 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
24e20 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45  .  born DATETIME
24e30 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d  ,.  died DATETIM
24e40 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74  E, -- NULL if st
24e50 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f  ill alive.  -- o
24e60 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a  ther content.);.
24e70 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24e80 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d  te>..<p>The "fam
24e90 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69  ily" table is si
24ea0 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72  milar to the ear
24eb0 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65  lier "org" table
24ec0 20 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f   except that .no
24ed0 77 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  w there are two 
24ee0 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20  parents to each 
24ef0 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20  member..We want 
24f00 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69  to know all livi
24f10 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20  ng ancestors of 
24f20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65  Alice, from olde
24f30 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a  st to youngest..
24f40 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
24f50 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
24f60 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22  ion, "parent_of"
24f70 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72  , is defined fir
24f80 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61  st.  That.ordina
24f90 72 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77  ry CTE is a view
24fa0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
24fb0 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61  d to find all pa
24fc0 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64  rents of any.ind
24fd0 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f  ividual.  That o
24fe0 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74  rdinary CTE is t
24ff0 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
25000 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69  "ancestor_of_ali
25010 63 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54  ce".recursive CT
25020 45 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76  E.  The recursiv
25030 65 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73  e CTE is then us
25040 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  ed in the final 
25050 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  query:..<blockqu
25060 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
25070 45 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e  ECURSIVE.  paren
25080 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e  t_of(name, paren
25090 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43  t) AS.    (SELEC
250a0 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d  T name, mom FROM
250b0 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45   family UNION SE
250c0 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46  LECT name, dad F
250d0 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61  ROM family),.  a
250e0 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
250f0 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53  (name) AS.    (S
25100 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f  ELECT parent FRO
25110 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52  M parent_of WHER
25120 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20  E name='Alice'. 
25130 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
25140 20 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74     SELECT parent
25150 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20   FROM parent_of 
25160 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66  JOIN ancestor_of
25170 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d  _alice USING(nam
25180 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c  e)).SELECT famil
25190 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65  y.name FROM ance
251a0 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66  stor_of_alice, f
251b0 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63  amily. WHERE anc
251c0 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e  estor_of_alice.n
251d0 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a  ame=family.name.
251e0 20 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e     AND died IS N
251f0 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f  ULL. ORDER BY bo
25200 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  rn;.</pre></bloc
25210 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
25220 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c  _fragment rcex2<
25230 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65  /tcl>.<h4>Querie
25240 73 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70  s Against A Grap
25250 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72  h</h4>..<p>A ver
25260 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73  sion control sys
25270 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74  tem (VCS) will t
25280 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74  ypically store t
25290 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73  he evolving.vers
252a0 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63  ions of a projec
252b0 74 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20  t as a directed 
252c0 61 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44  acyclic graph (D
252d0 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a  AG).  Call each.
252e0 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70  version of the p
252f0 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69  roject a "checki
25300 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68  n".  A single.ch
25310 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a  eckin can have z
25320 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65  ero or more pare
25330 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b  nts.  Most check
25340 69 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a  ins (except the.
25350 66 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69  first) have a si
25360 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74  ngle parent, but
25370 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
25380 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b  a merge, a check
25390 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77  in.might have tw
253a0 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f  o or three or mo
253b0 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73  re parents.  A s
253c0 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72  chema to keep tr
253d0 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20  ack of.checkins 
253e0 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e  and the order in
253f0 20 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75   which they occu
25400 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d  r might look som
25410 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73  ething like.this
25420 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25430 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
25440 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20  E checkin(.  id 
25450 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
25460 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54  KEY,.  mtime INT
25470 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d  EGER -- timestam
25480 70 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63  p when this chec
25490 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a  kin occurred.);.
254a0 43 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72  CREATE TABLE der
254b0 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f  ivedfrom(.  xfro
254c0 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  m INTEGER NOT NU
254d0 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
254e0 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74  eckin, -- parent
254f0 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49   checkin.  xto I
25500 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20  NTEGER NOT NULL 
25510 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b  REFERENCES check
25520 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64  in,   -- derived
25530 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41   checkin.  PRIMA
25540 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f  RY KEY(xfrom,xto
25550 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  ).);.CREATE INDE
25560 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61  X derivedfrom_ba
25570 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f  ck ON derivedfro
25580 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f  m(xto,xfrom);.</
25590 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
255a0 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68  >..<p>This graph
255b0 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e   is acyclic.  An
255c0 64 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74  d we assume that
255d0 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76   the mtime of ev
255e0 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69  ery.child checki
255f0 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61  n is no less tha
25600 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61  n the mtime of a
25610 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20  ll its parents. 
25620 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20   But.unlike the 
25630 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73  earlier examples
25640 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67  , this graph mig
25650 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65  ht have multiple
25660 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72   paths of.differ
25670 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77  ing lengths betw
25680 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63  een any two chec
25690 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e  kins...<p>We wan
256a0 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77  t to know the tw
256b0 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74  enty most recent
256c0 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69   ancestors in ti
256d0 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74  me (out of.the t
256e0 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f  housands and tho
256f0 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74  usands of ancest
25700 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65  ors in the whole
25710 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69   DAG) for.checki
25720 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20  n "@BASELINE".  
25730 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72  (A query similar
25740 20 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64   to this is used
25750 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d  .by the <a href=
25760 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73  "http://www.foss
25770 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73  il-scm.org/">Fos
25780 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73  sil</a> VCS to.s
25790 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72  how the N most r
257a0 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
257b0 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72  of a check.  For
257c0 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65   example:.<a hre
257d0 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  f="http://www.sq
257e0 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
257f0 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
25800 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73  30">http://www.s
25810 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69  qlite.org/src/ti
25820 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e  meline?p=trunk&n
25830 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63  =30</a>.)..<bloc
25840 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
25850 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e  H RECURSIVE.  an
25860 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29  cestor(id,mtime)
25870 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
25880 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20   id, mtime FROM 
25890 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64  checkin WHERE id
258a0 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55  =@BASELINE.    U
258b0 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
258c0 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
258d0 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  m, checkin.mtime
258e0 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65  .      FROM ance
258f0 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f  stor, derivedfro
25900 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20  m, checkin.     
25910 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69  WHERE ancestor.i
25920 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74  d=derivedfrom.xt
25930 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65  o.       AND che
25940 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66  ckin.id=derivedf
25950 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f  rom.xfrom.     O
25960 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e  RDER BY checkin.
25970 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20  mtime DESC.     
25980 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c  LIMIT 20.  ).SEL
25990 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b  ECT * FROM check
259a0 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  in JOIN ancestor
259b0 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72   USING(id);.</pr
259c0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
259d0 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20  .<p>.The "ORDER 
259e0 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
259f0 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74   DESC" term in t
25a00 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
25a10 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75  ect makes.the qu
25a20 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73  ery run much fas
25a30 74 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e  ter by preventin
25a40 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77  g it from follow
25a50 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61  ing.branches tha
25a60 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73  t merge checkins
25a70 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20  .from long ago. 
25a80 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f   The ORDER BY fo
25a90 72 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69  rces the recursi
25aa0 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63  ve-select to foc
25ab0 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  us.on the most r
25ac0 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20  ecent checkins, 
25ad0 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74  the ones we want
25ae0 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f  .  Without the O
25af0 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72  RDER BY.on the r
25b00 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
25b10 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f   one would be fo
25b20 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20  rced to compute 
25b30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74  the complete set
25b40 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66   of.thousands of
25b50 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74   ancestors, sort
25b60 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69   them all by mti
25b70 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  me, then take th
25b80 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68  e top twenty..Th
25b90 65 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e  e ORDER BY essen
25ba0 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61  tially sets up a
25bb0 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
25bc0 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20  that.forces the 
25bd0 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20  recursive query 
25be0 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d  to look at the m
25bf0 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73  ost recent ances
25c00 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f  tors first,.allo
25c10 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20  wing the use of 
25c20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  a LIMIT clause t
25c30 6f 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73  o restrict the s
25c40 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72  cope of the.quer
25c50 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68  y to just the ch
25c60 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65  eckins of intere
25c70 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  st...<tcl>hd_fra
25c80 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62  gment withorderb
25c90 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74  y</tcl>.<h4>Cont
25ca0 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69  rolling Depth-Fi
25cb0 72 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64  rst Versus Bread
25cc0 74 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20  th-First Search 
25cd0 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20  Of a Tree.Using 
25ce0 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c  ORDER BY</h4>..<
25cf0 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  p>An ORDER BY cl
25d00 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75  ause on the recu
25d10 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e  rsive-select can
25d20 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   be used to cont
25d30 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20  rol.whether the 
25d40 73 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65  search of a tree
25d50 20 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20   is depth-first 
25d60 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74  or breadth-first
25d70 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65  .  To.illustrate
25d80 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20  , we will use a 
25d90 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
25da0 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f   "org" table fro
25db0 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f  m an example.abo
25dc0 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20  ve, without the 
25dd0 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c  "height" column,
25de0 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72   and with some r
25df0 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65  eal data inserte
25e00 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  d:..<blockquote>
25e10 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
25e20 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54  LE org(.  name T
25e30 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
25e40 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46  .  boss TEXT REF
25e50 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49  ERENCES org.) WI
25e60 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53  THOUT ROWID;.INS
25e70 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
25e80 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c  UES('Alice',NULL
25e90 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
25ea0 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c  rg VALUES('Bob',
25eb0 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54  'Alice');.INSERT
25ec0 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
25ed0 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27  ('Cindy','Alice'
25ee0 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
25ef0 72 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27  rg VALUES('Dave'
25f00 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20  ,'Bob');.INSERT 
25f10 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
25f20 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49  'Emma','Bob');.I
25f30 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
25f40 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69  ALUES('Fred','Ci
25f50 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ndy');.INSERT IN
25f60 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47  TO org VALUES('G
25f70 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c  ail','Cindy');.<
25f80 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25f90 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  e>..<p>Here is a
25fa0 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74   query to show t
25fb0 68 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72  he tree structur
25fc0 65 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66  e in a breadth-f
25fd0 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c  irst pattern:..<
25fe0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
25ff0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
26000 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
26010 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
26020 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
26030 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
26040 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
26050 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
26060 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
26070 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
26080 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
26090 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
260a0 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
260b0 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c  DER BY 2.  ).SEL
260c0 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e  ECT substr('....
260d0 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a  ......',1,level*
260e0 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20  3) || name FROM 
260f0 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  under_alice;.</p
26100 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
26110 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20  ..<p>The "ORDER 
26120 42 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61  BY 2" (which mea
26130 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22  ns the same as "
26140 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61  ORDER BY under_a
26150 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63  lice.level+1").c
26160 61 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76  auses higher lev
26170 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e  els in the organ
26180 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77  ization chart (w
26190 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76  ith smaller "lev
261a0 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62  el" values).to b
261b0 65 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e processed firs
261c0 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
261d0 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
261e0 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74  search.  The out
261f0 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  put is:..<blockq
26200 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65  uote><pre>.Alice
26210 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79  ....Bob....Cindy
26220 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
26230 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65  ..Emma.......Fre
26240 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70  d.......Gail.</p
26250 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
26260 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63  ..<p>But if we c
26270 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20  hange the ORDER 
26280 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64  BY clause to add
26290 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69   the "DESC" modi
262a0 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a  fier, that will.
262b0 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65  cause lower leve
262c0 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
262d0 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72  zation (with lar
262e0 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ger "level" valu
262f0 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73  es) to be.proces
26300 73 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65  sed first by the
26310 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
26320 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
26330 61 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65  a depth-first se
26340 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  arch:..<blockquo
26350 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
26360 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
26370 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
26380 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
26390 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
263a0 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
263b0 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
263c0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
263d0 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
263e0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
263f0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
26400 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
26410 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
26420 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29   <b>DESC</b>.  )
26430 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27  .SELECT substr('
26440 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65  ..........',1,le
26450 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46  vel*3) || name F
26460 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b  ROM under_alice;
26470 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
26480 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  ote>..<p>The out
26490 70 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69  put of this revi
264a0 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c  sed query is:..<
264b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
264c0 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
264d0 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45  ....Dave.......E
264e0 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e  mma....Cindy....
264f0 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
26500 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
26510 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20  quote>..<p>When 
26520 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
26530 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66  use is omitted f
26540 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76  rom the recursiv
26550 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75  e-select, the.qu
26560 65 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61  eue behaves as a
26570 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73   FIFO, which res
26580 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74  ults in a breadt
26590 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a  h-first search..
265a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
265b0 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63  nt mandelbrot {c
265c0 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65  ompute the Mande
265d0 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e  lbrot set}</tcl>
265e0 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20  .<h4>Outlandish 
265f0 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20  Recursive Query 
26600 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c  Examples</h4>..<
26610 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
26620 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61  query computes a
26630 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
26640 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  of the Mandelbro
26650 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74  t Set.and output
26660 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20  s the result as 
26670 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f  ASCII-art:..<blo
26680 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
26690 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78  TH RECURSIVE.  x
266a0 61 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55  axis(x) AS (VALU
266b0 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41  ES(-2.0) UNION A
266c0 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35  LL SELECT x+0.05
266d0 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52   FROM xaxis WHER
266e0 45 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69  E x<1.2),.  yaxi
266f0 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28  s(y) AS (VALUES(
26700 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  -1.0) UNION ALL 
26710 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f  SELECT y+0.1 FRO
26720 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79 3c  M yaxis WHERE y<
26730 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20  1.0),.  m(iter, 
26740 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53  cx, cy, x, y) AS
26750 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c   (.    SELECT 0,
26760 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20   x, y, 0.0, 0.0 
26770 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69  FROM xaxis, yaxi
26780 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  s.    UNION ALL.
26790 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b      SELECT iter+
267a0 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79  1, cx, cy, x*x-y
267b0 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79  *y + cx, 2.0*x*y
267c0 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20   + cy FROM m .  
267d0 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20     WHERE (x*x + 
267e0 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69  y*y) < 4.0 AND i
267f0 74 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32  ter<28.  ),.  m2
26800 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41  (iter, cx, cy) A
26810 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  S (.    SELECT m
26820 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79  ax(iter), cx, cy
26830 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59   FROM m GROUP BY
26840 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61   cx, cy.  ),.  a
26850 28 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  (t) AS (.    SEL
26860 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ECT group_concat
26870 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27  ( substr(' .+*#'
26880 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34  , 1+min(iter/7,4
26890 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20  ), 1), '') .    
268a0 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59  FROM m2 GROUP BY
268b0 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67   cy.  ).SELECT g
268c0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69  roup_concat(rtri
268d0 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d  m(t),x'0a') FROM
268e0 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   a;.</pre></bloc
268f0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74  kquote>..<p>In t
26900 68 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22  his query, the "
26910 78 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69  xaxis" and "yaxi
26920 73 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74  s" CTEs define t
26930 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74  he grid of point
26940 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20  s for.which the 
26950 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77  Mandelbrot Set w
26960 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61  ill be approxima
26970 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69  ted.  Each row i
26980 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78  n the."m(iter,cx
26990 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65  ,cy,x,y)" CTE me
269a0 61 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22  ans that after "
269b0 69 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73  iter" iterations
269c0 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  , the Mandelbrot
269d0 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74  .iteration start
269e0 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73  ing at cx,cy has
269f0 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78   reached point x
26a00 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ,y.  The number 
26a10 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e  of iterations.in
26a20 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73   this example is
26a30 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28   limited to 28 (
26a40 77 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c  which severely l
26a50 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75  imits the resolu
26a60 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70  tion of.the comp
26a70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20  utation, but is 
26a80 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c  sufficient for l
26a90 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53  ow-resolution AS
26aa0 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e  CII-art output).
26ab0 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78  .The "m2(iter,cx
26ac0 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20  ,cy)" CTE holds 
26ad0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
26ae0 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
26af0 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74   reached when.st
26b00 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20  arting at point 
26b10 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20  cx,cy..Finally, 
26b20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
26b30 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73  "a(t)" CTE holds
26b40 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68   a string .which
26b50 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e   is a single lin
26b60 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
26b70 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53  ASCII-art..The S
26b80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
26b90 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20  at the end just 
26ba0 71 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20  queries the "a" 
26bb0 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20  CTE to.retrieve 
26bc0 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43  all lines of ASC
26bd0 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f  II-art, one by o
26be0 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20  ne...<p>Running 
26bf0 74 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20  the query above 
26c00 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f  in an SQLite [co
26c10 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
26c20 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65  ] results.in the
26c30 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75   following outpu
26c40 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
26c50 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20  <pre>.          
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a            ....#.
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23             ..+##
26cd0 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
26d00 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
26d30 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20  #+.++++.        
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23    .+.###########
26d60 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
26d70 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e          ........
26d80 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23  .....+##########
26d90 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20  #########+.+.   
26da0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e             ..++.
26db0 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23  .#.....*########
26dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a  #############+..
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
26de0 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23  +#######++######
26df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e00 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e  #..          ...
26e10 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  .+*#############
26e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e30 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23  ###.. ##########
26e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e60 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20  ###....         
26e70 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
26e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e90 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20  #######..       
26ea0 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23        ...+######
26eb0 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23  #++#############
26ec0 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20  ##########..    
26ed0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
26ee0 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
26ef0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
26f10 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23  ..........+#####
26f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
26f30 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
26f40 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23              .+.#
26f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f60 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26f80 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
26f90 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e    .......+####..
26fc0 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20  ..   +.         
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b          ..+####+
26ff0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20  ....#.          
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70            +..</p
27070 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
27080 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
27090 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65  nt sudoku {solve
270a0 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d   Sudoku puzzles}
270b0 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20   </tcl>.<p>This 
270c0 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65  next query solve
270d0 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c  s a Sudoku puzzl
270e0 65 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66  e.  The state of
270f0 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64   the puzzle is.d
27100 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d  efined by an 81-
27110 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67  character string
27120 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69   formed by readi
27130 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ng entries from 
27140 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72  the.puzzle box r
27150 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c  ow by row from l
27160 65 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64  eft to right and
27170 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74   then from top t
27180 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20  o bottom..Blank 
27190 73 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70  squares in the p
271a0 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65  uzzle are denote
271b0 64 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61  d by a "." chara
271c0 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65  cter.  .Thus the
271d0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a   input string:..
271e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e  <blockquote>.53.
271f0 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e  .7....6..195....
27200 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e  98....6.8...6...
27210 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e  34..8.3..17...2.
27220 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34  ..6.6....28....4
27230 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c  19..5....8..79.<
27240 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
27250 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20  >Corresponds to 
27260 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68  a puzzle like th
27270 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
27280 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
27290 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "1" cellpadding=
272a0 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74  "5">.<tr><td>5<t
272b0 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>3<td> <td> <td
272c0 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >7<td> <td> <td>
272d0 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c   <td>.<tr><td>6<
272e0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74  td> <td> <td>1<t
272f0 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64  d>9<td>5<td> <td
27300 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20  > <td>.<tr><td> 
27310 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c  <td>9<td>8<td> <
27320 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27330 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d>6<td>.<tr><td>
27340 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  8<td> <td> <td> 
27350 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>6<td> <td> <
27360 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74  td> <td>3.<tr><t
27370 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>4<td> <td> <td
27380 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e  >8<td> <td>3<td>
27390 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e   <td> <td>1.<tr>
273a0 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>7<td> <td> <
273b0 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74  td> <td>2<td> <t
273c0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74  d> <td> <td>6.<t
273d0 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e  r><td> <td>6<td>
273e0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
273f0 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c  <td>2<td>8<td>.<
27400 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
27410 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e  > <td>4<td>1<td>
27420 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35  9<td> <td> <td>5
27430 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
27440 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74  td> <td> <td>8<t
27450 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64  d> <td> <td>7<td
27460 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  >9.</table>.</bl
27470 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
27480 69 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20  is is the query 
27490 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20  that solves the 
274a0 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71  puzzle:..<blockq
274b0 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
274c0 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75  RECURSIVE.  inpu
274d0 74 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20  t(sud) AS (.    
274e0 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e  VALUES('53..7...
274f0 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e  .6..195....98...
27500 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38  .6.8...6...34..8
27510 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36  .3..17...2...6.6
27520 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35  ....28....419..5
27530 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c  ....8..79').  ),
27540 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29  .  digits(z, lp)
27550 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
27560 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49  ('1', 1).    UNI
27570 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20  ON ALL SELECT.  
27580 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54    CAST(lp+1 AS T
27590 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20  EXT), lp+1 FROM 
275a0 64 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c  digits WHERE lp<
275b0 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e  9.  ),.  x(s, in
275c0 64 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  d) AS (.    SELE
275d0 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75  CT sud, instr(su
275e0 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70  d, '.') FROM inp
275f0 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  ut.    UNION ALL
27600 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20  .    SELECT.    
27610 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69    substr(s, 1, i
27620 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75  nd-1) || z || su
27630 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a  bstr(s, ind+1),.
27640 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62        instr( sub
27650 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29  str(s, 1, ind-1)
27660 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28   || z || substr(
27670 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29  s, ind+1), '.' )
27680 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69  .     FROM x, di
27690 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48  gits AS z.    WH
276a0 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20  ERE ind>0.      
276b0 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28  AND NOT EXISTS (
276c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c  .            SEL
276d0 45 43 54 20 31 0a 20 20 20 20 20 20 20 20 20 20  ECT 1.          
276e0 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20      FROM digits 
276f0 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20  AS lp.          
27700 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73     WHERE z.z = s
27710 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
27720 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a  )/9)*9 + lp, 1).
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
27750 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b  s, ((ind-1)%9) +
27760 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31   (lp-1)*9 + 1, 1
27770 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
27780 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
27790 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33  r(s, (((ind-1)/3
277a0 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20  ) % 3) * 3.     
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37     + ((ind-1)/27
277d0 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20  ) * 27 + lp.    
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20      + ((lp-1) / 
27800 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20  3) * 6, 1).     
27810 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54      ).  ).SELECT
27820 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20   s FROM x WHERE 
27830 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ind=0;.</pre></b
27840 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
27850 68 65 20 22 69 6e 70 75 74 22 20 43 54 45 20 64  he "input" CTE d
27860 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74  efines the input
27870 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69   puzzle..The "di
27880 67 69 74 73 22 20 43 54 45 20 64 65 66 69 6e 65  gits" CTE define
27890 73 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  s a table that h
278a0 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20  olds all digits 
278b0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e  between 1 and 9.
278c0 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c  .The work of sol
278d0 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20  ving the puzzle 
278e0 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79  is undertaken by
278f0 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e   the "x" CTE..An
27900 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e   entry in x(s,in
27910 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  d) means that th
27920 65 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73  e 81-character s
27930 74 72 69 6e 67 20 22 73 22 20 69 73 20 61 20 76  tring "s" is a v
27940 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a  alid.sudoku puzz
27950 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f  le (it has no co
27960 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61  nflicts) and tha
27970 74 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e  t the first unkn
27980 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73  own character.is
27990 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e   at position "in
279a0 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66  d", or ind==0 if
279b0 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70   all character p
279c0 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c  ositions are fil
279d0 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c  led in..The goal
279e0 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f  , then, is to co
279f0 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f  mpute entries fo
27a00 72 20 22 78 22 20 77 69 74 68 20 61 6e 20 22 69  r "x" with an "i
27a10 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68  nd" of 0...<p>Th
27a20 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62  e solver works b
27a30 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74  y adding new ent
27a40 72 69 65 73 20 74 6f 20 74 68 65 20 22 78 22 20  ries to the "x" 
27a50 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
27a60 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74  .Given prior ent
27a70 72 69 65 73 2c 20 74 68 65 20 72 65 63 75 72 73  ries, the recurs
27a80 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73  ive-select tries
27a90 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69   to fill in a si
27aa0 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f  ngle new.positio
27ab0 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65  n with all value
27ac0 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
27ad0 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20  9 that actually 
27ae0 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73  work in that.pos
27af0 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70  ition.  The comp
27b00 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49  licated "NOT EXI
27b10 53 54 53 22 20 73 75 62 71 75 65 72 79 20 69 73  STS" subquery is
27b20 20 74 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a   the magic that.
27b30 66 69 67 75 72 65 73 20 6f 75 74 20 77 68 65 74  figures out whet
27b40 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
27b50 63 61 6e 64 69 64 61 74 65 20 22 73 22 20 73 74  candidate "s" st
27b60 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a  ring is a valid.
27b70 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72  sudoku puzzle or
27b80 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69   not...<p>The fi
27b90 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f  nal answer is fo
27ba0 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66  und by looking f
27bb0 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  or a string with
27bc0 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20   ind==0..If the 
27bd0 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20  original sudoku 
27be0 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20  problem did not 
27bf0 68 61 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f  have a unique so
27c00 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65  lution, then.the
27c10 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75   query will retu
27c20 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  rn all possible 
27c30 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74  solutions.  If t
27c40 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62  he original prob
27c50 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62  lem.was unsolvab
27c60 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73  le, then no rows
27c70 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65   will be returne
27c80 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
27c90 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73  , the unique.ans
27ca0 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  wer is:..<blockq
27cb0 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36  uote>.5346789126
27cc0 37 32 31 39 35 33 34 38 31 39 38 33 34 32 35 36  7219534819834256
27cd0 37 38 35 39 37 36 31 34 32 33 34 32 36 38 35 33  7859761423426853
27ce0 37 39 31 37 31 33 39 32 34 38 35 36 39 36 31 35  7917139248569615
27cf0 33 37 32 38 34 32 38 37 34 31 39 36 33 35 33 34  3728428741963534
27d00 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71  5286179.</blockq
27d10 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f  uote>..<p>The so
27d20 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75  lution was compu
27d30 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e  ted in less than
27d40 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64   300 millisecond
27d50 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f  s on a modern.wo
27d60 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e  rkstation...<h3>
27d70 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20  Limitations And 
27d80 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75  Caveats</h3>..<u
27d90 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  l>.<li><p>.The W
27da0 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f  ITH clause canno
27db0 74 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e  t be used within
27dc0 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
27dd0 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  ER]..<li><p>.The
27de0 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73   WITH clause mus
27df0 74 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20  t appear at the 
27e00 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74  beginning of a t
27e10 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54  op-level [SELECT
27e20 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61  ] statement.or a
27e30 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
27e40 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e 20 20  of a subquery.  
27e50 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  The WITH clause 
27e60 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e  cannot be prepen
27e70 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e  ded to.the secon
27e80 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20  d or subsequent 
27e90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
27ea0 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   of a [compound 
27eb0 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e  select]..<li><p>
27ec0 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70  .The SQL:1999 sp
27ed0 65 63 20 72 65 71 75 69 72 65 73 20 74 68 61 74  ec requires that
27ee0 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b   the RECURSIVE k
27ef0 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49  eyword follow WI
27f00 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63  TH in any.WITH c
27f10 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75  lause that inclu
27f20 64 65 73 20 61 20 72 65 63 75 72 73 69 76 65 20  des a recursive 
27f30 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
27f40 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65  ression.  Howeve
27f50 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69  r, for.compatibi
27f60 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53 65 72  lity with SqlSer
27f70 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20  ver and Oracle, 
27f80 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
27f90 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c  enforce this rul
27fa0 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a  e..</ul>..<tcl>.
27fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
28000 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73  Section SELECT s
28010 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75  elect {SELECT qu
28020 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ery}..RecursiveB
28030 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
28040 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ect-stmt.</tcl>.
28050 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
28060 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
28070 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
28080 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
28090 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
280a0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
280b0 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
280c0 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
280d0 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
280e0 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53  of columns.  A S
280f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28100 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e  does not make.an
28110 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
28120 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54   database...<p>T
28130 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74  he "[select-stmt
28140 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  ]" syntax diagra
28150 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73  m above attempts
28160 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68   to show as much
28170 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73   of the.SELECT s
28180 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20  tatement syntax 
28190 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61  as possible in a
281a0 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c   single diagram,
281b0 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65   because some re
281c0 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20  aders.find that 
281d0 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f  helpful.  The fo
281e0 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72  llowing "[factor
281f0 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22  ed-select-stmt]"
28200 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   is an alternati
28210 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61  ve.syntax diagra
28220 6d 73 20 74 68 61 74 20 65 78 70 72 65 73 73 65  ms that expresse
28230 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61  s the same synta
28240 78 20 62 75 74 20 74 72 69 65 73 20 74 6f 20 62  x but tries to b
28250 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20  reak the syntax 
28260 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c  .down into small
28270 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c  er chunks...<tcl
28280 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
28290 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69  eDiagram --initi
282a0 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74  ally-hidden fact
282b0 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
282c0 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
282d0 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  cl>..<p>Note tha
282e0 74 20 74 68 65 72 65 20 61 72 65 20 70 61 74 68  t there are path
282f0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 73 79  s through the sy
28300 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68  ntax diagrams th
28310 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  at.are not allow
28320 65 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  ed in practice. 
28330 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a   Some examples:.
28340 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55  <ul>.<li>A [VALU
28350 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62  ES] clause can b
28360 65 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  e the first elem
28370 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75  ent in a [compou
28380 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74  nd SELECT].    t
28390 68 61 74 20 75 73 65 73 20 61 20 5b 57 49 54 48  hat uses a [WITH
283a0 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20  ] clause, but a 
283b0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
283c0 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  that consists of
283d0 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c  .    just a [VAL
283e0 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e  UES] clause cann
283f0 6f 74 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ot be preceded b
28400 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73  y a [WITH] claus
28410 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48  e..<li>The [WITH
28420 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63  ] clause must oc
28430 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74  cur on the first
28440 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f   SELECT of a [co
28450 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a  mpound SELECT]..
28460 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f      It cannot fo
28470 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  llow a [compound
28480 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c  -operator]..</ul
28490 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65  >.These and othe
284a0 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78  r similar syntax
284b0 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72   restrictions ar
284c0 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74  e described in t
284d0 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65  he text...<p>The
284e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
284f0 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
28500 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
28510 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
28520 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
28530 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
28540 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
28550 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
28560 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
28570 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
28580 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
28590 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
285a0 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
285b0 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
285c0 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
285d0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
285e0 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
285f0 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
28600 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
28610 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
28620 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
28630 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
28640 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
28650 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
28660 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
28670 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c  c process...<tcl
28680 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d  >hd_fragment sim
28690 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c  pleselect {simpl
286a0 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a  e SELECT}</tcl>.
286b0 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63  <h3>Simple Selec
286c0 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33  t Processing</h3
286d0 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f  >..<p>The core o
286e0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
286f0 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c  ment is a "simpl
28700 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20  e SELECT" shown 
28710 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63  by the.[select-c
28720 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65  ore] and [simple
28730 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79  -select-stmt] sy
28740 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 62 65  ntax diagrams be
28750 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69  low.  .In practi
28760 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20  ce, most SELECT 
28770 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73  statements are s
28780 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
28790 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a  tements...<tcl>.
287a0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
287b0 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65  iagram simple-se
287c0 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74  lect-stmt select
287d0 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -core.</tcl>..<p
287e0 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20  >Generating the 
287f0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d  results of a sim
28800 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  ple SELECT.state
28810 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65  ment is presente
28820 64 20 61 73 20 61 20 66 6f 75 72 20 73 74 65 70  d as a four step
28830 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20   process in the 
28840 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f  description belo
28850 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20  w:..<ol>.  <li> 
28860 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d  <p>[FROM clause]
28870 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65   processing: The
28880 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20   input data for 
28890 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
288a0 54 20 69 73 0a 20 20 20 20 20 20 20 64 65 74 65  T is.       dete
288b0 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75  rmined. The inpu
288c0 74 20 64 61 74 61 20 69 73 20 65 69 74 68 65 72  t data is either
288d0 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
288e0 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a  ngle row with 0.
288f0 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28         columns (
28900 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46  if there is no F
28910 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69  ROM clause) or i
28920 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
28930 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20  the FROM.       
28940 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c  clause..  <li> <
28950 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d  p>[WHERE clause]
28960 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65   processing: The
28970 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 66   input data is f
28980 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74 68  iltered using th
28990 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 63  e WHERE.       c
289a0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
289b0 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47  .  .  <li> <p>[G
289c0 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59  ROUP BY|GROUP BY
289d0 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73  , HAVING and res
289e0 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65  ult-column expre
289f0 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e  ssion] processin
28a00 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20 73  g: .       The s
28a10 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
28a20 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  s is computed by
28a30 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68 65   aggregating the
28a40 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20   data according 
28a50 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52  to.       any GR
28a60 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e  OUP BY clause an
28a70 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68  d calculating th
28a80 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70  e result-set exp
28a90 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65  ressions for the
28aa0 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20  .       rows of 
28ab0 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
28ac0 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20  ut dataset.  .  
28ad0 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43  <li> <p>[DISTINC
28ae0 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b  T|DISTINCT/ALL k
28af0 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69  eyword] processi
28b00 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72 79  ng: If the query
28b10 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20   is a "SELECT.  
28b20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71       DISTINCT" q
28b30 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20  uery, duplicate 
28b40 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
28b50 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66   from the set of
28b60 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f   result rows..</
28b70 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  ol>..<p>There ar
28b80 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73  e two types of s
28b90 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
28ba0 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61  tement - aggrega
28bb0 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72  te and .non-aggr
28bc0 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e  egate queries. ^
28bd0 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  A simple SELECT 
28be0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20  statement is an 
28bf0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
28c00 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65  if.it contains e
28c10 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42 59  ither a GROUP BY
28c20 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f   clause or one o
28c30 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
28c40 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68   functions.in th
28c50 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f  e result-set. ^O
28c60 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20 73  therwise, if a s
28c70 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e  imple SELECT con
28c80 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61  tains no aggrega
28c90 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  te.functions or 
28ca0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
28cb0 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61  e, it is a non-a
28cc0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a  ggregate query..
28cd0 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d  .<p><b>1. Determ
28ce0 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74  ination of input
28cf0 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75   data (FROM clau
28d00 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c  se processing).<
28d10 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  /b>.<tcl>hd_frag
28d20 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c  ment fromclause<
28d30 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
28d40 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61  ywords {FROM cla
28d50 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  use}</tcl>..<p>T
28d60 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73  he input data us
28d70 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
28d80 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20 61  ELECT query is a
28d90 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e   set of <i>N</i>
28da0 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d   rows .each <i>M
28db0 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64  </i> columns wid
28dc0 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  e...<p>^(If the 
28dd0 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f  FROM clause is o
28de0 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69  mitted from a si
28df0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
28e00 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  ement, then the 
28e10 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 69  .input data is i
28e20 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
28e30 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75  le row zero colu
28e40 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e  mns wide)^ (i.e.
28e50 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a   <i>N</i>=1 and.
28e60 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70  <i>M</i>=0)...<p
28e70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  >If a FROM claus
28e80 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
28e90 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63  the data on whic
28ea0 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  h a simple SELEC
28eb0 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73  T query.operates
28ec0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20   comes from the 
28ed0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  one or more tabl
28ee0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
28ef0 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65   (SELECT stateme
28f00 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73  nts.in parenthes
28f10 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66 6f  is) specified fo
28f20 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
28f30 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62   keyword. ^A sub
28f40 71 75 65 72 79 20 73 70 65 63 69 66 69 65 64 0a  query specified.
28f50 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d  in the table-or-
28f60 73 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69  subquery followi
28f70 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  ng the FROM clau
28f80 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20  se in a .simple 
28f90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28fa0 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
28fb0 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
28fc0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
28fd0 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
28fe0 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
28ff0 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
29000 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  t. ^Each column 
29010 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 20  of the subquery 
29020 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69  has the.[collati
29030 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  on|collation seq
29040 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69  uence] and [affi
29050 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72  nity] of the cor
29060 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65  responding expre
29070 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62  ssion.in the sub
29080 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
29090 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69  ..<p>^If there i
290a0 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  s only a single 
290b0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
290c0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c  y in the FROM.cl
290d0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69  ause, then the i
290e0 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
290f0 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
29100 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f  tement is the co
29110 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61  ntents of the.na
29120 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74  med table. ^If t
29130 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61  here is more tha
29140 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73  n one table or s
29150 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20  ubquery in FROM 
29160 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20  clause.then the 
29170 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20  contents of all 
29180 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75  tables and/or su
29190 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69  bqueries.are joi
291a0 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ned into a singl
291b0 65 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68  e dataset for th
291c0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
291d0 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65  statement to ope
291e0 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79  rate on..Exactly
291f0 20 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73   how the data is
29200 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64   combined depend
29210 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  s on the specifi
29220 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  c [join-operator
29230 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73  ] and.[join-cons
29240 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20  traint] used to 
29250 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c  connect the tabl
29260 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
29270 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41   together...<p>A
29280 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69  ll joins in SQLi
29290 74 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20  te are based on 
292a0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
292b0 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
292c0 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  t and.right-hand
292d0 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20   datasets. ^The 
292e0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
292f0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
29300 20 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e   dataset are, in
29310 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65   .order, all the
29320 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
29330 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
29340 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c  t followed by al
29350 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66  l the columns.of
29360 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
29370 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20  dataset. ^There 
29380 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  is a row in the 
29390 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
293a0 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64  t dataset.formed
293b0 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61   by combining ea
293c0 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e  ch unique combin
293d0 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66  ation of a row f
293e0 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e  rom the left-han
293f0 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  d .and right-han
29400 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e  d datasets. ^(In
29410 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
29420 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
29430 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20  ataset consists 
29440 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
29450 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
29460 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f  /sub></i> rows o
29470 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  f .<i>M<sub><sma
29480 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
29490 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  /sub></i> column
294a0 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74  s, and the right
294b0 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66  -hand dataset of
294c0 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
294d0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
294e0 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66  sub></i> rows of
294f0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29500 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
29510 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
29520 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65  , then the carte
29530 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20  sian product is 
29540 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69  a.dataset of .<i
29550 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >N<sub><small>le
29560 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
29570 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d  &times;N<sub><sm
29580 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
29590 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73  ></sub></i>.rows
295a0 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
295b0 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  g .<i>M<sub><sma
295c0 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
295d0 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61  /sub>+M<sub><sma
295e0 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
295f0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
29600 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
29610 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
29620 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c  is "CROSS JOIN",
29630 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22   "INNER JOIN", "
29640 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61  JOIN" or a comma
29650 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65  .(",") and there
29660 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49   is no ON or USI
29670 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  NG clause, then 
29680 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
29690 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79  e join is.simply
296a0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
296b0 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65  roduct of the le
296c0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
296d0 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20  d datasets. .If 
296e0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f  join-operator do
296f0 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53  es have ON or US
29700 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f  ING clauses, tho
29710 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61  se are handled a
29720 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20  ccording to.the 
29730 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74  following bullet
29740 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20   points:..<ul>. 
29750 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
29760 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61  ere is an ON cla
29770 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20  use then the ON 
29780 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20  expression is.  
29790 20 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66       evaluated f
297a0 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
297b0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
297c0 64 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20  duct as a .     
297d0 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65    [boolean expre
297e0 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
297f0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
29800 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
29810 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20  ates to .       
29820 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
29830 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
29840 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  et.)^..  <li> <p
29850 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20  >^If there is a 
29860 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20  USING clause.   
29870 20 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66      then each of
29880 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
29890 73 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74  s specified must
298a0 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61   exist in the da
298b0 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20  tasets to .     
298c0 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20    both the left 
298d0 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65  and right of the
298e0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20   join-operator. 
298f0 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  ^(For each pair 
29900 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20  of named.       
29910 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70  columns, the exp
29920 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d  ression "lhs.X =
29930 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75   rhs.X" is evalu
29940 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
29950 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20  w of.       the 
29960 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
29970 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  t as a [boolean 
29980 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
29990 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
299a0 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68  .       all such
299b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
299c0 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
299d0 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
299e0 20 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75   the.       resu
299f0 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20  lt set.)^ ^When 
29a00 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73  comparing values
29a10 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
29a20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
29a30 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61  the.       norma
29a40 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64  l rules for hand
29a50 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c  ling affinities,
29a60 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
29a70 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20  nces and NULL.  
29a80 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63       values in c
29a90 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79  omparisons apply
29aa0 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72  . ^The column fr
29ab0 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f  om the dataset o
29ac0 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66  n the.       lef
29ad0 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
29ae0 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
29af0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
29b00 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  o be on the left
29b10 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64  -hand.       sid
29b20 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  e of the compari
29b30 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29  son operator (=)
29b40 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
29b50 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  s of collation .
29b60 20 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20         sequence 
29b70 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65  and affinity pre
29b80 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20  cedence...      
29b90 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61   <p>^For each pa
29ba0 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64  ir of columns id
29bb0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53  entified by a US
29bc0 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20  ING clause, the 
29bd0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72  column.       fr
29be0 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  om the right-han
29bf0 64 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69  d dataset is omi
29c00 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f  tted from the jo
29c10 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54  ined dataset. ^T
29c20 68 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74  his .       is t
29c30 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
29c40 63 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49  ce between a USI
29c50 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74  NG clause and it
29c60 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a  s equivalent ON.
29c70 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
29c80 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  t...  <li> <p>^(
29c90 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  If the NATURAL k
29ca0 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65  eyword is in the
29cb0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74   join-operator t
29cc0 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d  hen an.       im
29cd0 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61  plicit USING cla
29ce0 75 73 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  use is added to 
29cf0 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  the join-constra
29d00 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63  ints. The implic
29d10 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20  it.       USING 
29d20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20  clause contains 
29d30 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
29d40 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70  mn names that ap
29d50 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20  pear in both.   
29d60 20 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64      the left and
29d70 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
29d80 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49  t datasets.)^ ^I
29d90 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
29da0 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20  ight-hand.      
29db0 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 20   input datasets 
29dc0 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f  feature no commo
29dd0 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  n column names, 
29de0 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c  then the NATURAL
29df0 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20   keyword.       
29e00 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e  has no effect on
29e10 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
29e20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49  the join. ^A USI
29e30 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20  NG or ON clause 
29e40 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62  may.       not b
29e50 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69  e added to a joi
29e60 6e 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  n that specifies
29e70 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
29e80 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  word...  <li> <p
29e90 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  >^(If the join-o
29ea0 70 65 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45  perator is a "LE
29eb0 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46  FT JOIN" or "LEF
29ec0 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74  T OUTER JOIN", t
29ed0 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72  hen.       after
29ee0 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f  .       the ON o
29ef0 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e  r USING filterin
29f00 67 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62  g clauses have b
29f10 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20  een applied, an 
29f20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20  extra row is .  
29f30 20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68       added to th
29f40 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63  e output for eac
29f50 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69  h row in the ori
29f60 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20  ginal left-hand 
29f70 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61  input .       da
29f80 74 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65  taset that corre
29f90 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77  sponds to no row
29fa0 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20  s at all in the 
29fb0 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20  composite.      
29fc0 20 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79   dataset (if any
29fd0 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20  ).)^ ^The added 
29fe0 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  rows contain NUL
29ff0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
2a000 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74  columns.       t
2a010 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
2a020 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  ly contain value
2a030 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  s copied from th
2a040 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  e right-hand inp
2a050 75 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  ut.       datase
2a060 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  t.  .</ul>..<p>^
2a070 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20  (When more than 
2a080 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a  two tables are j
2a090 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61  oined together a
2a0a0 73 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d  s part of a FROM
2a0b0 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69   clause,.the joi
2a0c0 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  n operations are
2a0d0 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72   processed in or
2a0e0 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
2a0f0 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
2a100 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f   .words, the FRO
2a110 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e  M clause (A join
2a120 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d  -op-1 B join-op-
2a130 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64  2 C) is computed
2a140 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70   as .((A join-op
2a150 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20  -1 B) join-op-2 
2a160 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  C).)^..<tcl>hd_f
2a170 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69  ragment crossjoi
2a180 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52  n {treats the CR
2a190 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f  OSS JOIN operato
2a1a0 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63  r specially}</tc
2a1b0 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f  l>.<p><b>Side no
2a1c0 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64  te: Special hand
2a1d0 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
2a1e0 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69  IN.</b>.^There i
2a1f0 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
2a200 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
2a210 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2a220 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
2a230 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72  erators. They ar
2a240 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74  e completely int
2a250 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20  erchangeable in 
2a260 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43  SQLite..^(The "C
2a270 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20  ROSS JOIN" join 
2a280 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65  operator produce
2a290 73 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c  s the same resul
2a2a0 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52  t as the ."INNER
2a2b0 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2a2c0 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73  nd "," operators
2a2d0 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f  )^, but is .[CRO
2a2e0 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20  SS JOIN|handled 
2a2f0 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74  differently by t
2a300 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2a310 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70  er].in that it p
2a320 72 65 76 65 6e 74 73 20 74 68 65 20 71 75 65 72  revents the quer
2a330 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d  y optimizer from
2a340 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20   reordering.the 
2a350 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f  tables in the jo
2a360 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74  in.  An applicat
2a370 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63  ion programmer c
2a380 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f 53 53  an use the CROSS
2a390 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20   JOIN .operator 
2a3a0 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c  to directly infl
2a3b0 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69  uence the algori
2a3c0 74 68 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73  thm that is chos
2a3d0 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a  en to implement.
2a3e0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2a3f0 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69  ment.  Avoid usi
2a400 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78  ng CROSS JOIN ex
2a410 63 65 70 74 20 69 6e 20 73 70 65 63 69 66 69 63  cept in specific
2a420 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65   situations .whe
2a430 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f  re manual contro
2a440 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f  l of the query o
2a450 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69  ptimizer is desi
2a460 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e  red.  Avoid usin
2a470 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72  g.CROSS JOIN ear
2a480 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f  ly in the develo
2a490 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c  pment of an appl
2a4a0 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67  ication as doing
2a4b0 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66   so is.a <a href
2a4c0 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f  ="http://c2.com/
2a4d0 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75  cgi/wiki?Prematu
2a4e0 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e  reOptimization">
2a4f0 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69  premature.optimi
2a500 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65  zation</a>.  The
2a510 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
2a520 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20  g of CROSS JOIN 
2a530 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65  is an SQLite-spe
2a540 63 69 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e  cific.feature an
2a550 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20  d is not a part 
2a560 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  of standard SQL.
2a570 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68  .       ..<tcl>h
2a580 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65  d_fragment where
2a590 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
2a5a0 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57  l>hd_keywords {W
2a5b0 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63  HERE clause}</tc
2a5c0 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52  l>.<p><b>2. WHER
2a5d0 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69  E clause filteri
2a5e0 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66  ng.</b>..<p>^(If
2a5f0 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
2a600 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
2a610 65 20 57 48 45 52 45 20 65 78 70 72 65 73 73 69  e WHERE expressi
2a620 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
2a630 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e  for .each row in
2a640 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
2a650 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2a660 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2a670 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2a680 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
2a690 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2a6a0 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
2a6b0 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2a6c0 68 65 20 64 61 74 61 73 65 74 20 62 65 66 6f 72  he dataset befor
2a6d0 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20  e.continuing.)^ 
2a6e0 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64   Rows are exclud
2a6f0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
2a700 6c 74 20 69 66 20 74 68 65 20 57 48 45 52 45 20  lt if the WHERE 
2a710 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73  clause.evaluates
2a720 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65   to either false
2a730 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f   or NULL...<p>Fo
2a740 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45  r a JOIN or INNE
2a750 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20  R JOIN or CROSS 
2a760 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e  JOIN, there is n
2a770 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  o difference bet
2a780 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69  ween .a constrai
2a790 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  nt expression in
2a7a0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2a7b0 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65  e and one in the
2a7c0 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77   ON clause.  How
2a7d0 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54  ever,.for a LEFT
2a7e0 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55   JOIN or LEFT OU
2a7f0 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69  TER JOIN, the di
2a800 66 66 65 72 65 6e 63 65 20 69 73 20 76 65 72 79  fference is very
2a810 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e   important.  .In
2a820 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68   a LEFT JOIN,.th
2a830 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77  e extra NULL row
2a840 20 66 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68   for the right-h
2a850 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61 64 64  and table is add
2a860 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75  ed after ON clau
2a870 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75  se processing.bu
2a880 74 20 62 65 66 6f 72 65 20 57 48 45 52 45 20 63  t before WHERE c
2a890 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
2a8a0 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20  .  A constraint 
2a8b0 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66  of the form "lef
2a8c0 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20  t.x=right.y".in 
2a8d0 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c  an ON clause wil
2a8e0 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f  l therefore allo
2a8f0 77 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 64  w through the ad
2a900 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77  ded all-NULL row
2a910 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74  s of the.right t
2a920 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68  able.  But if th
2a930 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69  at same constrai
2a940 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57 48 45  nt is in the WHE
2a950 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c  RE clause a NULL
2a960 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69   in."right.y" wi
2a970 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65 20 65  ll prevent the e
2a980 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e  xpression "left.
2a990 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20  x=right.y" from 
2a9a0 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a  being true, and.
2a9b0 74 68 75 73 20 65 78 63 6c 75 64 65 20 74 68 61  thus exclude tha
2a9c0 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f  t row from the o
2a9d0 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e  utput...<p><b>3.
2a9e0 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   Generation of t
2a9f0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
2aa00 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e   rows.</b>.<tcl>
2aa10 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75  hd_fragment resu
2aa20 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  ltset</tcl>.<tcl
2aa30 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65  >hd_keywords {re
2aa40 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73  sult-set express
2aa50 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d  ions} {GROUP BY}
2aa60 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20  </tcl>..<p>Once 
2aa70 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  the input data f
2aa80 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  rom the FROM cla
2aa90 75 73 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c  use has been fil
2aaa0 74 65 72 65 64 20 62 79 20 74 68 65 0a 57 48 45  tered by the.WHE
2aab0 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
2aac0 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74  sion (if any), t
2aad0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
2aae0 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69   rows for the si
2aaf0 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65  mple .SELECT are
2ab00 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61   calculated. Exa
2ab10 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73  ctly how this is
2ab20 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e   done depends on
2ab30 20 77 68 65 74 68 65 72 20 74 68 65 20 73 69 6d   whether the sim
2ab40 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61  ple .SELECT is a
2ab50 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e  n aggregate or n
2ab60 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
2ab70 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20  ry, and whether 
2ab80 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42  or not a GROUP.B
2ab90 59 20 63 6c 61 75 73 65 20 77 61 73 20 73 70 65  Y clause was spe
2aba0 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65  cified...<p> The
2abb0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
2abc0 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65  ions between the
2abd0 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d   SELECT and FROM
2abe0 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f   keywords is kno
2abf0 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74  wn as.the result
2ac00 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2ac10 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20  .  ^If a result 
2ac20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
2ac30 65 20 73 70 65 63 69 61 6c 20 65 78 70 72 65 73  e special expres
2ac40 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c  sion."*" then al
2ac50 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  l columns in the
2ac60 20 69 6e 70 75 74 20 64 61 74 61 20 61 72 65 20   input data are 
2ac70 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20  substituted for 
2ac80 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73  that one express
2ac90 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78  ion..^(If the ex
2aca0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2acb0 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65  alias of a table
2acc0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
2acd0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
2ace0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22  followed by ".*"
2acf0 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
2ad00 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  s from the named
2ad10 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2ad20 72 79 20 61 72 65 0a 73 75 62 73 74 69 74 75 74  ry are.substitut
2ad30 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c  ed for the singl
2ad40 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20  e expression.)^ 
2ad50 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  ^(It is an error
2ad60 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72   to use a "*" or
2ad70 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65  ."alias.*" expre
2ad80 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e  ssion in any con
2ad90 74 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20  text other than 
2ada0 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  a result express
2adb0 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74  ion list.)^.^(It
2adc0 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f   is also an erro
2add0 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f  r to use a "*" o
2ade0 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72  r "alias.*" expr
2adf0 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70  ession in a simp
2ae00 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20  le SELECT.query 
2ae10 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  that does not ha
2ae20 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  ve a FROM clause
2ae30 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e  .)^..<p> ^(The n
2ae40 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
2ae50 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74   in the rows ret
2ae60 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c  urned by a simpl
2ae70 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2ae80 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74  nt.is equal to t
2ae90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70  he number of exp
2aea0 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2aeb0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2aec0 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62  n list after.sub
2aed0 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61  stitution of * a
2aee0 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65  nd alias.* expre
2aef0 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72  ssions.)^ Each r
2af00 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c  esult row is cal
2af10 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75  culated by.evalu
2af20 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73  ating the expres
2af30 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
2af40 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2af50 69 73 74 20 77 69 74 68 20 72 65 73 70 65 63 74  ist with respect
2af60 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77   to a.single row
2af70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f   of input data o
2af80 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74 65  r, for aggregate
2af90 20 71 75 65 72 69 65 73 2c 20 77 69 74 68 20 72   queries, with r
2afa0 65 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75  espect to a grou
2afb0 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e  p.of rows...<ul>
2afc0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
2afd0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2afe0 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61  nt is <b>a non-a
2aff0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f  ggregate query</
2b000 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  b>, then .    ea
2b010 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
2b020 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72   the result expr
2b030 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65  ession list is e
2b040 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
2b050 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65  h row in.    the
2b060 20 64 61 74 61 73 65 74 20 66 69 6c 74 65 72 65   dataset filtere
2b070 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20 63  d by the WHERE c
2b080 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  lause...  <li><p
2b090 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
2b0a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
2b0b0 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2b0c0 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
2b0d0 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c  UP.    BY</b> cl
2b0e0 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20  ause, then each 
2b0f0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2b100 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2b110 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65  lt-set is .    e
2b120 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63  valuated once ac
2b130 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65 20  ross the entire 
2b140 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e  dataset. ^Each n
2b150 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2b160 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74  ression.    in t
2b170 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2b180 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2b190 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 69  for an arbitrari
2b1a0 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
2b1b0 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  of.    the datas
2b1c0 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72  et. ^The same ar
2b1d0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
2b1e0 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20 66  ed row is used f
2b1f0 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d  or each.    non-
2b200 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2b210 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68  sion. ^Or, if th
2b220 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69  e dataset contai
2b230 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68  ns zero rows, th
2b240 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e  en .    each non
2b250 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b260 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
2b270 65 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77  ed against a row
2b280 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20   consisting.    
2b290 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c  entirely of NULL
2b2a0 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e   values...   <p>
2b2b0 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20  ^The single row 
2b2c0 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61  of result-set da
2b2d0 74 61 20 63 72 65 61 74 65 64 20 62 79 20 65 76  ta created by ev
2b2e0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67 67  aluating the agg
2b2f0 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e  regate.    and n
2b300 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2b310 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2b320 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73  result-set forms
2b330 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
2b340 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74 65 20  n.    aggregate 
2b350 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20  query without a 
2b360 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
2b370 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20 71   ^An aggregate q
2b380 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20  uery without a. 
2b390 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
2b3a0 73 65 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  se always return
2b3b0 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f  s exactly one ro
2b3c0 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20  w of data, even 
2b3d0 69 66 20 74 68 65 72 65 20 61 72 65 0a 20 20 20  if there are.   
2b3e0 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e   zero rows of in
2b3f0 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69  put data...  <li
2b400 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c  ><p>^(If the SEL
2b410 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2b420 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65   <b>an aggregate
2b430 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
2b440 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63  OUP.    BY</b> c
2b450 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68  lause, then each
2b460 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
2b470 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73  ons specified as
2b480 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20   part of the.   
2b490 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2b4a0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2b4b0 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
2b4c0 65 20 64 61 74 61 73 65 74 2e 20 45 61 63 68 20  e dataset. Each 
2b4d0 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20  row.    is then 
2b4e0 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67  assigned to a "g
2b4f0 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74  roup" based on t
2b500 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73  he results; rows
2b510 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74   for which.    t
2b520 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76  he results of ev
2b530 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f  aluating the GRO
2b540 55 50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  UP BY expression
2b550 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 67  s are the same g
2b560 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20  et.    assigned 
2b570 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75  to the same grou
2b580 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  p.)^ ^For the pu
2b590 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69  rposes of groupi
2b5a0 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20  ng rows, NULL . 
2b5b0 20 20 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f     values are co
2b5c0 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20  nsidered equal. 
2b5d0 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73  ^The usual rules
2b5e0 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   for [collation|
2b5f0 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20  selecting a.    
2b600 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2b610 63 65 5d 20 77 69 74 68 20 77 68 69 63 68 20 74  ce] with which t
2b620 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
2b630 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e  alues apply when
2b640 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20   evaluating.    
2b650 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
2b660 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2b670 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
2b680 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ons in the GROUP
2b690 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64   BY clause.    d
2b6a0 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
2b6b0 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
2b6c0 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61  sions that appea
2b6d0 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
2b6e0 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65 73   ^The.    expres
2b6f0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
2b700 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e   BY clause may n
2b710 6f 74 20 62 65 20 61 67 67 72 65 67 61 74 65 20  ot be aggregate 
2b720 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20  expressions...  
2b730 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49    <p>^(If a HAVI
2b740 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  NG clause is spe
2b750 63 69 66 69 65 64 2c 20 69 74 20 69 73 20 65 76  cified, it is ev
2b760 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
2b770 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20   each group .   
2b780 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62   of rows as a [b
2b790 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
2b7a0 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c  n]. If the resul
2b7b0 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
2b7c0 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63  the.    HAVING c
2b7d0 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20  lause is false, 
2b7e0 74 68 65 20 67 72 6f 75 70 20 69 73 20 64 69 73  the group is dis
2b7f0 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68  carded.)^ ^If th
2b800 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
2b810 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67  is.    an aggreg
2b820 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2b830 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
2b840 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2b850 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49  in the group. ^I
2b860 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20 63  f.    a HAVING c
2b870 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61  lause is a non-a
2b880 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2b890 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ion, it is evalu
2b8a0 61 74 65 64 20 77 69 74 68 20 72 65 73 70 65 63  ated with respec
2b8b0 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69  t.    to an arbi
2b8c0 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2b8d0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72   row from the gr
2b8e0 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e  oup.  ^The HAVIN
2b8f0 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  G expression may
2b900 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20 76 61  .    refer to va
2b910 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65  lues, even aggre
2b920 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  gate functions, 
2b930 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20  that are not in 
2b940 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a  the result.</p>.
2b950 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78  .    <p>^Each ex
2b960 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2b970 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68  result-set is th
2b980 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  en evaluated onc
2b990 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67  e for each.    g
2b9a0 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49  roup of rows. ^I
2b9b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2b9c0 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
2b9d0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
2b9e0 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65  is .    evaluate
2b9f0 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
2ba00 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
2ba10 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
2ba20 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  s evaluated agai
2ba30 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65  nst.    a single
2ba40 20 61 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f   arbitrarily cho
2ba50 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74  sen row from wit
2ba60 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e  hin the group. ^
2ba70 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
2ba80 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f  .    than one no
2ba90 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2baa0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2bab0 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61  sult-set, then a
2bac0 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70 72  ll such.    expr
2bad0 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
2bae0 75 61 74 65 64 20 66 6f 72 20 74 68 65 20 73 61  uated for the sa
2baf0 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e  me row...    <p>
2bb00 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69  ^Each group of i
2bb10 6e 70 75 74 20 64 61 74 61 73 65 74 20 72 6f 77  nput dataset row
2bb20 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20  s contributes a 
2bb30 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68  single row to th
2bb40 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65  e .    set of re
2bb50 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a  sult rows. ^Subj
2bb60 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67  ect to filtering
2bb70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2bb80 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20   the DISTINCT.  
2bb90 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e    keyword, the n
2bba0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
2bbb0 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67  turned by an agg
2bbc0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2bbd0 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
2bbe0 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
2bbf0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
2bc00 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72  r of groups of r
2bc10 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62 79 20  ows produced by 
2bc20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65  applying.    the
2bc30 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41   GROUP BY and HA
2bc40 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20  VING clauses to 
2bc50 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
2bc60 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c  ut dataset..</ul
2bc70 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f  >..<p><b>4. Remo
2bc80 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65  val of duplicate
2bc90 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20   rows (DISTINCT 
2bca0 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e  processing).</b>
2bcb0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2bcc0 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e  t distinct</tcl>
2bcd0 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
2bce0 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63  s {DISTINCT}</tc
2bcf0 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74  l>..<p>^One of t
2bd00 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e  he ALL or DISTIN
2bd10 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20  CT keywords may 
2bd20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43  follow the SELEC
2bd30 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a  T keyword in a .
2bd40 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2bd50 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65  atement. ^If the
2bd60 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69   simple SELECT i
2bd70 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20  s a SELECT ALL, 
2bd80 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20  then the.entire 
2bd90 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2bda0 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
2bdb0 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e  by the SELECT. ^
2bdc0 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f  If neither ALL o
2bdd0 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20 70  r.DISTINCT are p
2bde0 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
2bdf0 20 62 65 68 61 76 69 6f 72 20 69 73 20 61 73 20   behavior is as 
2be00 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63  if ALL were spec
2be10 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20  ified. .^If the 
2be20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
2be30 20 61 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e   a SELECT DISTIN
2be40 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61  CT, then duplica
2be50 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te rows are remo
2be60 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74  ved.from the set
2be70 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
2be80 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 74  before it is ret
2be90 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20  urned. ^For the 
2bea0 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65  purposes of.dete
2beb0 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20  cting duplicate 
2bec0 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76  rows, two NULL v
2bed0 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
2bee0 65 72 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  ered to be equal
2bef0 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75  . ^The.normal ru
2bf00 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e  les for selectin
2bf10 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  g a collation se
2bf20 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72  quence to compar
2bf30 65 20 74 65 78 74 20 76 61 6c 75 65 73 20 77 69  e text values wi
2bf40 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e  th.apply...<tcl>
2bf50 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  .hd_fragment com
2bf60 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20  pound {compound 
2bf70 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
2bf80 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75  d query} {compou
2bf90 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70  nd SELECT} {comp
2bfa0 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f  ound SELECTs}.</
2bfb0 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  tcl>.<h3>Compoun
2bfc0 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
2bfd0 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f  nts</h3>..<p>Two
2bfe0 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65   or more [simple
2bff0 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
2c000 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
2c010 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
2c020 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
2c030 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
2c040 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
2c050 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
2c060 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
2c070 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68  ,.as shown by th
2c080 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67  e following diag
2c090 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  ram:..<tcl>.Recu
2c0a0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2c0b0 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65  am compound-sele
2c0c0 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
2c0d0 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  <p>^In a compoun
2c0e0 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
2c0f0 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
2c100 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
2c110 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
2c120 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
2c130 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
2c140 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
2c150 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
2c160 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
2c170 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
2c180 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
2c190 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20  tain [ORDER BY] 
2c1a0 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
2c1b0 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20  es..^[ORDER BY] 
2c1c0 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  and [LIMIT] clau
2c1d0 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
2c1e0 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
2c1f0 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
2c200 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64  ound.SELECT, and
2c210 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68   then only if th
2c220 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20  e final element 
2c230 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
2c240 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53  is not a [VALUES
2c250 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41  ] clause...<p>^A
2c260 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
2c270 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55   created using U
2c280 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
2c290 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68  r returns all th
2c2a0 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
2c2b0 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65  SELECT to the le
2c2c0 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20  ft of the UNION 
2c2d0 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e  ALL operator, an
2c2e0 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  d all the rows.f
2c2f0 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
2c300 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69  o the right of i
2c310 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70  t. ^The UNION op
2c320 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65  erator works the
2c330 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49   same way as.UNI
2c340 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74  ON ALL, except t
2c350 68 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hat duplicate ro
2c360 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
2c370 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65  rom the final re
2c380 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49  sult set..^The I
2c390 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
2c3a0 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e  r returns the in
2c3b0 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
2c3c0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
2c3d0 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20   left and.right 
2c3e0 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45  SELECTs.  ^The E
2c3f0 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72  XCEPT operator r
2c400 65 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65  eturns the subse
2c410 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  t of rows return
2c420 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53  ed by the.left S
2c430 45 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e  ELECT that are n
2c440 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  ot also returned
2c450 20 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61   by the right-ha
2c460 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c  nd SELECT. ^Dupl
2c470 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72  icate.rows are r
2c480 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
2c490 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52  results of INTER
2c4a0 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
2c4b0 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65  operators before
2c4c0 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20   the.result set 
2c4d0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70  is returned...<p
2c4e0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
2c4f0 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e  es of determinin
2c500 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
2c510 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73   for the results
2c520 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c   of compound.SEL
2c530 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e  ECT operators, N
2c540 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
2c550 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20  onsidered equal 
2c560 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  to other NULL va
2c570 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63  lues and.distinc
2c580 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e  t from all non-N
2c590 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65  ULL values. ^The
2c5a0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2c5b0 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70  nce used to comp
2c5c0 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61  are .two text va
2c5d0 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e  lues is determin
2c5e0 65 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c  ed as if the col
2c5f0 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
2c600 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
2c610 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2c620 73 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20  s were the left 
2c630 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f  and right-hand o
2c640 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65  perands of the e
2c650 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74  quals (=).operat
2c660 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  or, except that 
2c670 67 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e  greater preceden
2c680 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e  ce is not assign
2c690 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f  ed to a collatio
2c6a0 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63  n .sequence spec
2c6b0 69 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70  ified with the p
2c6c0 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f  ostfix COLLATE o
2c6d0 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66  perator. ^No aff
2c6e0 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61  inity.transforma
2c6f0 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65  tions are applie
2c700 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20  d to any values 
2c710 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72  when comparing r
2c720 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61  ows as part of a
2c730 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
2c740 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68  . ..<p>^(When th
2c750 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  ree or more simp
2c760 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63  le SELECTs are c
2c770 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
2c780 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2c790 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d  .they group from
2c7a0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
2c7b0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2c7c0 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20  if "A", "B" and 
2c7d0 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70  "C" are all.simp
2c7e0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2c7f0 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70  ents, (A op B op
2c800 20 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64   C) is processed
2c810 20 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70   as ((A op B) op
2c820 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74   C).)^..</p>..<t
2c830 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
2c840 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79  rderby {order by
2c850 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63  } {ORDER BY}</tc
2c860 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52  l>.<h3>The ORDER
2c870 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a   BY clause</h3>.
2c880 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
2c890 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
2c8a0 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
2c8b0 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
2c8c0 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
2c8d0 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
2c8e0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
2c8f0 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
2c900 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
2c910 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
2c920 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
2c930 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2c940 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
2c950 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
2c960 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
2c970 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
2c980 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
2c990 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
2c9a0 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
2c9b0 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e  o the user...<p>
2c9c0 0a 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  .In a [compound 
2c9d0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
2c9e0 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74  t, only the last
2c9f0 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2ca00 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d  simple SELECT].m
2ca10 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  ay have an ORDER
2ca20 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 61 74   BY clause. That
2ca30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2ca40 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f   will apply acro
2ca50 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20  ss all elements 
2ca60 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of.the compound.
2ca70 20 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   If the right-mo
2ca80 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2ca90 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2caa0 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20  ] is a [VALUES] 
2cab0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20  clause,.then no 
2cac0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2cad0 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68  is allowed on th
2cae0 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  at statement....
2caf0 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72  <p>^Rows are fir
2cb00 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20  st sorted based 
2cb10 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2cb20 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
2cb30 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
2cb40 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44  ssion in the ORD
2cb50 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e  ER BY list, then
2cb60 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e   ties are broken
2cb70 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .by evaluating t
2cb80 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d  he second left-m
2cb90 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ost expression a
2cba0 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72  nd so on. The or
2cbb0 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f  der in which.two
2cbc0 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
2cbd0 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
2cbe0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
2cbf0 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65  e to equal value
2cc00 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69  s are.returned i
2cc10 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61  s undefined. ^Ea
2cc20 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2cc30 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
2cc40 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
2cc50 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
2cc60 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d  keywords ASC (sm
2cc70 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65  aller values are
2cc80 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2cc90 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72   or DESC (larger
2cca0 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75  .values are retu
2ccb0 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66  rned first). ^If
2ccc0 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20   neither ASC or 
2ccd0 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69  DESC are specifi
2cce0 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72  ed, rows.are sor
2ccf0 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
2cd00 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
2cd10 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79   first) order by
2cd20 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61   default...<p>Ea
2cd30 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2cd40 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
2cd50 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
2cd60 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
2cd70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2cd80 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2cd90 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
2cda0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78  er K then the.ex
2cdb0 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
2cdc0 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20  idered an alias 
2cdd0 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c  for the K-th col
2cde0 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
2cdf0 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61  t set.(columns a
2ce00 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  re numbered from
2ce10 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73   left to right s
2ce20 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e  tarting with 1).
2ce30 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  ..<li><p>^If the
2ce40 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2ce50 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74  sion is an ident
2ce60 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65  ifier that corre
2ce70 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c  sponds to.the al
2ce80 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68  ias of one of th
2ce90 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e output columns
2cea0 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
2ceb0 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
2cec0 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72  red.an alias for
2ced0 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c   that column...<
2cee0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2cef0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2cf00 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2cf10 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73  any other expres
2cf20 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61  sion, it .is eva
2cf30 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
2cf40 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73  eturned value us
2cf50 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20  ed to order the 
2cf60 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66  output rows. ^If
2cf70 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  .the SELECT stat
2cf80 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c  ement is a simpl
2cf90 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61  e SELECT, then a
2cfa0 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63  n ORDER BY may c
2cfb0 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74  ontain any.arbit
2cfc0 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73  rary expressions
2cfd0 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
2cfe0 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63  he SELECT is a c
2cff0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
2d000 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78  then.ORDER BY ex
2d010 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
2d020 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74  re not aliases t
2d030 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  o output columns
2d040 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
2d050 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20  .the same as an 
2d060 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20  expression used 
2d070 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c  as an output col
2d080 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  umn..</ol>..<p>^
2d090 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2d0a0 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73   of sorting rows
2d0b0 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  , values are com
2d0c0 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d  pared in the sam
2d0d0 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f  e way.as for [co
2d0e0 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73  mparison express
2d0f0 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61  ions]. The colla
2d100 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2d110 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77  ed to compare.tw
2d120 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
2d130 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66   determined as f
2d140 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20  ollows:..<ol>.  
2d150 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2d160 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2d170 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61  on is assigned a
2d180 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2d190 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20  nce using.  the 
2d1a0 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45  postfix [COLLATE
2d1b0 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
2d1c0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
2d1d0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d1e0 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c  e is.  used..  <
2d1f0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2d200 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2d210 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d220 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65  an alias to an e
2d230 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74  xpression.  that
2d240 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e   has been assign
2d250 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
2d260 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68  equence using th
2d270 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f  e postfix .  [CO
2d280 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2d290 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
2d2a0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73  ion sequence ass
2d2b0 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69  igned to the ali
2d2c0 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f  ased.  expressio
2d2d0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69  n is used..  <li
2d2e0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2d2f0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2d300 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2d310 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69  column or an ali
2d320 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65  as of.  an expre
2d330 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20  ssion that is a 
2d340 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65  column, then the
2d350 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
2d360 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a  on sequence for.
2d370 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20    the column is 
2d380 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e  used. .  <li><p>
2d390 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
2d3a0 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69  [BINARY] collati
2d3b0 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  on sequence is u
2d3c0 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49  sed..</ol>..<p>I
2d3d0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2d3e0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2d3f0 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2d400 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
2d410 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
2d420 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
2d430 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2d440 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a  f the compound..
2d450 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
2d460 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
2d470 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
2d480 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
2d490 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
2d4a0 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
2d4b0 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
2d4c0 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2d4d0 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
2d4e0 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
2d4f0 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
2d500 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
2d510 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
2d520 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
2d530 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
2d540 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
2d550 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
2d560 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
2d570 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
2d580 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
2d590 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
2d5a0 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
2d5b0 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
2d5c0 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
2d5d0 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
2d5e0 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
2d5f0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
2d600 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2d610 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
2d620 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
2d630 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
2d640 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
2d650 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
2d660 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
2d670 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
2d680 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
2d690 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
2d6a0 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
2d6b0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
2d6c0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
2d6d0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2d6e0 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20  ent limitoffset 
2d6f0 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d  {LIMIT} {OFFSET}
2d700 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
2d710 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e  IMIT clause</h3>
2d720 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63  ..<p>The LIMIT c
2d730 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f  lause is used to
2d740 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20   place an upper 
2d750 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
2d760 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
2d770 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69  rned by the enti
2d780 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  re SELECT statem
2d790 65 6e 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63  ent...<p>In a [c
2d7a0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c  ompound SELECT],
2d7b0 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f   only the.last o
2d7c0 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2d7d0 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79  mple SELECT] may
2d7e0 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54   contain a LIMIT
2d7f0 20 63 6c 61 75 73 65 2e 20 20 0a 49 6e 20 61 20   clause.  .In a 
2d800 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2d810 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c  ], .the LIMIT cl
2d820 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
2d830 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f  the entire compo
2d840 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68  und, not just th
2d850 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a  e final SELECT..
2d860 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  If the right-mos
2d870 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
2d880 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63  ] is a [VALUES c
2d890 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c  lause] then no L
2d8a0 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61  IMIT clause.is a
2d8b0 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79  llowed...<p>^Any
2d8c0 20 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69   scalar expressi
2d8d0 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69  on may be used i
2d8e0 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61  n the .LIMIT cla
2d8f0 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20  use, so long as 
2d900 69 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  it evaluates to 
2d910 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
2d920 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
2d930 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
2d940 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
2d950 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78  eger. ^If the ex
2d960 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2d970 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61  es to a NULL .va
2d980 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  lue or any other
2d990 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e   value that cann
2d9a0 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
2d9b0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
2d9c0 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72   integer, an.err
2d9d0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  or is returned. 
2d9e0 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78  ^If the LIMIT ex
2d9f0 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2da00 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  es to a negative
2da10 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65   value,.then the
2da20 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62  re is no upper b
2da30 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
2da40 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
2da50 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ned. ^Otherwise,
2da60 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75   the.SELECT retu
2da70 72 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20  rns the first N 
2da80 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75  rows of its resu
2da90 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65  lt set only, whe
2daa0 72 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75  re N is the valu
2dab0 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54  e.that the LIMIT
2dac0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
2dad0 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69  uates to. ^Or, i
2dae0 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
2daf0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74  tement would.ret
2db00 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20  urn less than N 
2db10 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c  rows without a L
2db20 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
2db30 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73  n the entire res
2db40 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72  ult set is.retur
2db50 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65  ned. ..<p>^The e
2db60 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68  xpression attach
2db70 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e  ed to the option
2db80 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  al OFFSET clause
2db90 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77   that may follow
2dba0 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20   a.LIMIT clause 
2dbb0 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61  must also evalua
2dbc0 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  te to an integer
2dbd0 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  , or a value tha
2dbe0 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
2dbf0 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
2dc00 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
2dc10 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68   an expression h
2dc20 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61  as an OFFSET cla
2dc30 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69  use,.then the fi
2dc40 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f  rst M rows are o
2dc50 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
2dc60 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72  result set retur
2dc70 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
2dc80 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  T.statement and 
2dc90 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20  the next N rows 
2dca0 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68  are returned, wh
2dcb0 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20  ere M and N are 
2dcc0 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a  the values that.
2dcd0 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c  the OFFSET and L
2dce0 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61  IMIT clauses eva
2dcf0 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63  luate to, respec
2dd00 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20  tively. ^Or, if 
2dd10 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64  the SELECT.would
2dd20 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61   return less tha
2dd30 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74  n M+N rows if it
2dd40 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20   did not have a 
2dd50 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
2dd60 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72  en the.first M r
2dd70 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20  ows are skipped 
2dd80 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  and the remainin
2dd90 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20  g rows (if any) 
2dda0 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49  are returned. ^I
2ddb0 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61  f the.OFFSET cla
2ddc0 75 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f  use evaluates to
2ddd0 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75   a negative valu
2dde0 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  e, the results a
2ddf0 72 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  re the same as i
2de00 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74  f it.had evaluat
2de10 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ed to zero...<p>
2de20 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65  ^Instead of a se
2de30 70 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c  parate OFFSET cl
2de40 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20  ause, the LIMIT 
2de50 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69  clause may speci
2de60 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78  fy two.scalar ex
2de70 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61  pressions separa
2de80 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20  ted by a comma. 
2de90 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74  ^In this case, t
2dea0 68 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73  he first express
2deb0 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74  ion.is used as t
2dec0 68 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  he OFFSET expres
2ded0 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63  sion and the sec
2dee0 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54  ond as the LIMIT
2def0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69   expression..Thi
2df00 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74  s is counter-int
2df10 75 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20  uitive, as when 
2df20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  using the OFFSET
2df30 20 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f   clause the seco
2df40 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78  nd of.the two ex
2df50 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65  pressions is the
2df60 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20   OFFSET and the 
2df70 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e  first the LIMIT.
2df80 20 0a 54 68 69 73 20 72 65 76 65 72 73 61 6c 20   .This reversal 
2df90 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e  of the offset an
2dfa0 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e  d limit is inten
2dfb0 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69  tional.- it maxi
2dfc0 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c  mizes compatibil
2dfd0 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 53  ity with other S
2dfe0 51 4c 20 64 61 74 61 62 61 73 65 20 73 79 73 74  QL database syst
2dff0 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f  ems..However, to
2e000 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
2e010 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
2e020 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75  e strongly encou
2e030 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65  raged to use.the
2e040 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d   form of the LIM
2e050 49 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 75  IT clause that u
2e060 73 65 73 20 74 68 65 20 22 4f 46 46 53 45 54 22  ses the "OFFSET"
2e070 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f   keyword and avo
2e080 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54  id.using a LIMIT
2e090 20 63 6c 61 75 73 65 20 77 69 74 68 20 61 20 63   clause with a c
2e0a0 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f  omma-separated o
2e0b0 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ffset...<tcl>hd_
2e0c0 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20  fragment values 
2e0d0 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20  {VALUES clause} 
2e0e0 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33  VALUES</tcl>.<h3
2e0f0 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75  >The VALUES clau
2e100 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  se</h3>..<p>The 
2e110 70 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c  phrase "VALUES(<
2e120 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29  i>expr-list</i>)
2e130 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2e140 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43   thing.as "SELEC
2e150 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  T <i>expr-list</
2e160 69 3e 22 2e 20 20 54 68 65 20 70 68 72 61 73 65  i>".  The phrase
2e170 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72  ."VALUES(<i>expr
2e180 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e  -list-1</i>),...
2e190 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e  ,(<i>expr-list-N
2e1a0 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65  </i>)" means the
2e1b0 20 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22   same.thing as "
2e1c0 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c  SELECT <i>expr-l
2e1d0 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20  ist-1</i> UNION 
2e1e0 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c  ALL ... UNION AL
2e1f0 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72  L.SELECT <i>expr
2e200 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20 20 54  -list-N</i>".  T
2e210 68 65 72 65 20 69 73 20 6e 6f 20 61 64 76 61 6e  here is no advan
2e220 74 61 67 65 20 74 6f 20 75 73 69 6e 67 20 6f 6e  tage to using on
2e230 65 20 66 6f 72 6d 0a 6f 76 65 72 20 74 68 65 20  e form.over the 
2e240 6f 74 68 65 72 2e 20 20 42 6f 74 68 20 66 6f 72  other.  Both for
2e250 6d 73 20 79 69 65 6c 64 20 74 68 65 20 73 61 6d  ms yield the sam
2e260 65 20 72 65 73 75 6c 74 20 61 6e 64 20 62 6f 74  e result and bot
2e270 68 20 66 6f 72 6d 73 20 75 73 65 0a 74 68 65 20  h forms use.the 
2e280 73 61 6d 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d  same amount of m
2e290 65 6d 6f 72 79 20 61 6e 64 20 70 72 6f 63 65 73  emory and proces
2e2a0 73 69 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70 3e 54  sing time...<p>T
2e2b0 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65  here are some re
2e2c0 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
2e2d0 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45  e use of a VALUE
2e2e0 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72  S clause that ar
2e2f0 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74  e.not shown on t
2e300 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2e310 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ms:..<ul>.<li><p
2e320 3e 0a 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73  >.A VALUES claus
2e330 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c  e cannot be foll
2e340 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42  owed by [ORDER B
2e350 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e 0a 0a  Y] or [LIMIT]...
2e360 3c 6c 69 3e 3c 70 3e 0a 41 20 56 41 4c 55 45 53  <li><p>.A VALUES
2e370 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
2e380 65 20 75 73 65 64 20 74 6f 67 65 74 68 65 72 20  e used together 
2e390 77 69 74 68 20 61 20 5b 57 49 54 48 5d 20 63 6c  with a [WITH] cl
2e3a0 61 75 73 65 20 69 6e 20 61 0a 5b 73 69 6d 70 6c  ause in a.[simpl
2e3b0 65 20 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75 6c 3e  e SELECT]..</ul>
2e3c0 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20  ...<h3>The WITH 
2e3d0 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  Clause</h3>..<p>
2e3e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2e3f0 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  s may be optiona
2e400 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20  lly preceded by 
2e410 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63  a single.[WITH c
2e420 6c 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69  lause] that defi
2e430 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  nes one or more 
2e440 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  [common table ex
2e450 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75  pressions].for u
2e460 73 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45  se within the SE
2e470 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
2e480 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
2e490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4d0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55  ######.Section U
2e4e0 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50  PDATE update {UP
2e4f0 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a  DATE *UPDATEs}..
2e500 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
2e510 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
2e520 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
2e530 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
2e540 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f  nt is used to mo
2e550 64 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66  dify a subset of
2e560 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72   the values stor
2e570 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d  ed in .zero or m
2e580 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ore rows of the 
2e590 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2e5a0 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
2e5b0 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74   .<i>qualified-t
2e5c0 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70  able-name</i> sp
2e5d0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
2e5e0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
2e5f0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66  atement...<p>^If
2e600 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2e610 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68  ement does not h
2e620 61 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75  ave a WHERE clau
2e630 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  se, all rows in 
2e640 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f  the.table are mo
2e650 64 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50  dified by the UP
2e660 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65  DATE. ^Otherwise
2e670 2c 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66  , the UPDATE aff
2e680 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a  ects only those.
2e690 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2e6a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
2e6b0 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52  luating the WHER
2e6c0 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
2e6d0 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65  ion as a .[boole
2e6e0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f  an expression|bo
2e6f0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2e700 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69   is true]. ^It i
2e710 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69  s not an error i
2e720 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  f the.WHERE clau
2e730 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c  se does not eval
2e740 75 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72  uate to true for
2e750 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20   any row in the 
2e760 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73  table - this jus
2e770 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t.means that the
2e780 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2e790 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72  t affects zero r
2e7a0 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64  ows...<p>The mod
2e7b0 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20  ifications made 
2e7c0 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65  to each row affe
2e7d0 63 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54  cted by an UPDAT
2e7e0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a  E statement are.
2e7f0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
2e800 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
2e810 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
2e820 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e  the SET keyword.
2e830 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74   Each.assignment
2e840 20 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c   specifies a col
2e850 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20  umn name to the 
2e860 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61  left of the equa
2e870 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63  ls sign and a.sc
2e880 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
2e890 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46  to the right. ^F
2e8a0 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64  or each affected
2e8b0 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20   row, the named 
2e8c0 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20  columns.are set 
2e8d0 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f  to the values fo
2e8e0 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
2e8f0 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
2e900 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72  ing scalar .expr
2e910 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73  essions. ^If a s
2e920 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  ingle column-nam
2e930 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74  e appears more t
2e940 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20  han once in the 
2e950 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65  list of.assignme
2e960 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  nt expressions, 
2e970 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68  all but the righ
2e980 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65  tmost occurrence
2e990 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f   is ignored. ^Co
2e9a0 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f  lumns.that do no
2e9b0 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
2e9c0 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
2e9d0 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d  nts are left unm
2e9e0 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63  odified. ^The sc
2e9f0 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73  alar.expressions
2ea00 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f   may refer to co
2ea10 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77  lumns of the row
2ea20 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20   being updated. 
2ea30 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c  ^In this case al
2ea40 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  l.scalar express
2ea50 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
2ea60 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73  ed before any as
2ea70 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61  signments are ma
2ea80 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  de...<p>^The opt
2ea90 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
2eaa0 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
2eab0 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
2eac0 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
2ead0 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
2eae0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2eaf0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
2eb00 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
2eb10 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
2eb20 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
2eb30 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
2eb40 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
2eb50 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2eb60 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
2eb70 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
2eb80 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
2eb90 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
2eba0 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
2ebb0 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
2ebc0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
2ebd0 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
2ebe0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2ebf0 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
2ec00 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
2ec10 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
2ec20 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
2ec30 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2ec40 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61  ^The <i>table-na
2ec50 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64  me</i> specified
2ec60 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55   as part of an U
2ec70 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2ec80 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74  within.      a t
2ec90 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74  rigger body must
2eca0 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e   be unqualified.
2ecb0 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
2ecc0 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e  s, the.      <i>
2ecd0 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
2ece0 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
2ecf0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
2ed00 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  me of the UPDATE
2ed10 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c   is.      not al
2ed20 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
2ed30 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73  ggers.)^ ^Unless
2ed40 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
2ed50 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a  ich the trigger.
2ed60 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65        is attache
2ed70 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50  d is in the TEMP
2ed80 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
2ed90 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
2eda0 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20  ed by the.      
2edb0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2edc0 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74  must reside in t
2edd0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2ede0 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
2edf0 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77  table.      to w
2ee00 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
2ee10 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
2ee20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
2ee30 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
2ee40 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64       unqualified
2ee50 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2ee60 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  le being updated
2ee70 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
2ee80 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20  the same way.   
2ee90 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20     as it is for 
2eea0 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
2eeb0 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
2eec0 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
2eed0 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20  MP database,.   
2eee0 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e     then the main
2eef0 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
2ef00 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
2ef10 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
2ef20 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20   they were.     
2ef30 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c   attached)...  <
2ef40 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
2ef50 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
2ef60 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
2ef70 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
2ef80 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74   UPDATE.      st
2ef90 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
2efa0 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
2efb0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
2efc0 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
2efd0 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41  clauses for UPDA
2efe0 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74  TE are unsupport
2eff0 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20  ed within.      
2f000 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64  triggers, regard
2f010 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
2f020 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20  ilation options 
2f030 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
2f040 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  Lite..</ul>..<h3
2f050 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
2f060 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61  and ORDER BY Cla
2f070 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
2f080 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  If SQLite is bui
2f090 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  lt with the [SQL
2f0a0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2f0b0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
2f0c0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2f0d0 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e  ion then the syn
2f0e0 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54  tax of the UPDAT
2f0f0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  E statement is e
2f100 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74  xtended.with opt
2f110 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
2f120 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
2f130 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  )^ as follows:</
2f140 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
2f150 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
2f160 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
2f170 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41  ..<p>^If an UPDA
2f180 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
2f190 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
2f1a0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2f1b0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
2f1c0 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64  .will be updated
2f1d0 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61   is found by eva
2f1e0 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f  luating the acco
2f1f0 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73  mpanying express
2f200 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a  ion and casting.
2f210 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
2f220 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74   value. ^A negat
2f230 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74  ive value is int
2f240 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
2f250 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20  limit"...<p>^If 
2f260 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2f270 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2f280 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  o non-negative v
2f290 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e  alue <i>N</i> an
2f2a0 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61  d the.UPDATE sta
2f2b0 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
2f2c0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
2f2d0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
2f2e0 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t would be updat
2f2f0 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63  ed in.the absenc
2f300 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
2f310 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
2f320 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
2f330 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74  e ORDER BY and t
2f340 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69  he.first <i>N</i
2f350 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20  > updated. ^(If 
2f360 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2f370 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e  ment also has an
2f380 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a   OFFSET clause,.
2f390 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
2f3a0 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
2f3b0 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e  nd cast to an in
2f3c0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
2f3d0 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65  the OFFSET.expre
2f3e0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2f3f0 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  to a non-negativ
2f400 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e  e value <i>M</i>
2f410 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
2f420 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61   <i>M</i>.rows a
2f430 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74  re skipped and t
2f440 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e  he following <i>
2f450 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74  N</i> rows updat
2f460 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c  ed instead.)^..<
2f470 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
2f480 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
2f490 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
2f4a0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
2f4b0 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75   that.would be u
2f4c0 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62  pdated in the ab
2f4d0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
2f4e0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
2f4f0 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
2f500 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
2f510 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
2f520 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
2f530 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
2f540 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61  termine .which a
2f550 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61  re actually upda
2f560 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
2f570 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
2f580 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
2f590 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e  ement is used on
2f5a0 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
2f5b0 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20  which.rows fall 
2f5c0 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
2f5d0 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77  . The order in w
2f5e0 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f  hich rows are mo
2f5f0 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72  dified is arbitr
2f600 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69  ary.and is not i
2f610 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65  nfluenced by the
2f620 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2f630 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  .)^..<tcl>.#####
2f640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f680 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2f690 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20  n VACUUM vacuum 
2f6a0 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76  VACUUM..Recursiv
2f6b0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76  eBubbleDiagram v
2f6c0 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c  acuum-stmt.</tcl
2f6d0 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43  >..<p>.  The VAC
2f6e0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75  UUM command rebu
2f6f0 69 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20  ilds the entire 
2f700 64 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20  database. There 
2f710 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72  are several .  r
2f720 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63  easons an applic
2f730 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74  ation might do t
2f740 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  his:..<ul>.  <li
2f750 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51  > <p> ^Unless SQ
2f760 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20  Lite is running 
2f770 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d  in "auto_vacuum=
2f780 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e  FULL" mode, when
2f790 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d   a large.     am
2f7a0 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20  ount of data is 
2f7b0 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65  deleted from the
2f7c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2f7d0 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20  t leaves behind 
2f7e0 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65  empty.     space
2f7f0 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61  , or "free" data
2f800 62 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73  base pages. This
2f810 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
2f820 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20  ase file might. 
2f830 20 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68      be larger th
2f840 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65  an strictly nece
2f850 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20  ssary. ^Running 
2f860 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c  VACUUM to rebuil
2f870 64 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61  d the .     data
2f880 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68  base reclaims th
2f890 69 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64  is space and red
2f8a0 75 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  uces the size of
2f8b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f8c0 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  le...  <li> <p> 
2f8d0 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74  ^Frequent insert
2f8e0 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20  s, updates, and 
2f8f0 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73  deletes can caus
2f900 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
2f910 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f  ile.     to beco
2f920 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20  me fragmented - 
2f930 77 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61  where data for a
2f940 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72   single table or
2f950 20 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65   index is scatte
2f960 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64  red .     around
2f970 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f980 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43  le. ^Running VAC
2f990 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74  UUM ensures that
2f9a0 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a   each table and.
2f9b0 20 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61       index is la
2f9c0 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e  rgely stored con
2f9d0 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e  tiguously within
2f9e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f9f0 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20  le. ^In some.   
2fa00 20 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20    cases, VACUUM 
2fa10 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20  may also reduce 
2fa20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2fa30 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70  rtially filled p
2fa40 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65  ages in.     the
2fa50 20 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63   database, reduc
2fa60 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ing the size of 
2fa70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fa80 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c  e further...  <l
2fa90 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79  i> <p> ^Normally
2faa0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b  , the database [
2fab0 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77  page_size] and w
2fac0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
2fad0 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
2fae0 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76  supports [auto_v
2faf0 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63  acuum] must be c
2fb00 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65  onfigured before
2fb10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2fb20 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61  le is.     actua
2fb30 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f  lly created. ^Ho
2fb40 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20  wever, when not 
2fb50 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
2fb60 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a  log] mode, the .
2fb70 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d       [page_size]
2fb80 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61   and/or [auto_va
2fb90 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73  cuum] properties
2fba0 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
2fbb0 64 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a  database may be.
2fbc0 20 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20       changed by 
2fbd0 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f  using the [page_
2fbe0 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65  size pragma|page
2fbf0 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a  _size]  and/or .
2fc00 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75       [auto_vacuu
2fc10 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61  m|pragma auto_va
2fc20 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e  cuum] pragmas an
2fc30 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65  d then immediate
2fc40 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20  ly VACUUMing.   
2fc50 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20    the database. 
2fc60 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d  ^When in [write-
2fc70 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c  ahead log] mode,
2fc80 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f   only the [auto_
2fc90 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70  vacuum].     sup
2fca0 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61  port property ca
2fcb0 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69  n be changed usi
2fcc0 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e  ng VACUUM..</ul>
2fcd0 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e  ..<p>^(VACUUM on
2fce0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20  ly works on the 
2fcf0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49  main database. I
2fd00 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
2fd10 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61  e to VACUUM an.a
2fd20 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2fd30 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68   file.)^..<p>^Th
2fd40 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
2fd50 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e   works by copyin
2fd60 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  g the contents o
2fd70 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2fd80 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20  nto.a temporary 
2fd90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
2fda0 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69  d then overwriti
2fdb0 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
2fdc0 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e  with the .conten
2fdd0 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ts of the tempor
2fde0 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20  ary file. ^When 
2fdf0 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20  overwriting the 
2fe00 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c  original, a roll
2fe10 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
2fe20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
2fe30 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73  ] WAL file is us
2fe40 65 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f  ed just as it wo
2fe50 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f  uld be for any.o
2fe60 74 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72  ther database tr
2fe70 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73  ansaction. ^This
2fe80 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
2fe90 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74   VACUUMing a dat
2fea0 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20  abase, .as much 
2feb0 61 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a  as twice the siz
2fec0 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
2fed0 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  l database file 
2fee0 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66  is required in f
2fef0 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a  ree.disk space..
2ff00 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
2ff10 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
2ff20 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20  ge the [ROWID | 
2ff30 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69  ROWIDs] of entri
2ff40 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73  es in any.tables
2ff50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76   that do not hav
2ff60 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
2ff70 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
2ff80 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  EY]..</p>..<p>^A
2ff90 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69   VACUUM will fai
2ffa0 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
2ffb0 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
2ffc0 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  n, or if there a
2ffd0 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61  re one or.more a
2ffe0 63 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d  ctive SQL statem
2fff0 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20  ents when it is 
30000 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66  run...<p>^(As of
30010 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
30020 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74  3.1, an alternat
30030 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65  ive to using the
30040 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
30050 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65  to.reclaim space
30060 20 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20   after data has 
30070 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20  been deleted is 
30080 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
30090 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a  , enabled using.
300a0 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
300b0 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65  ] pragma.)^ ^Whe
300c0 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  n [auto_vacuum] 
300d0 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61  is enabled for a
300e0 20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70   database.free p
300f0 61 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c  ages may be recl
30100 61 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65  aimed after dele
30110 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69  ting data, causi
30120 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73  ng the file to s
30130 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72  hrink,.without r
30140 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e  ebuilding the en
30150 74 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73  tire database us
30160 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77  ing VACUUM.  How
30170 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74  ever, using.[aut
30180 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65  o_vacuum] can le
30190 61 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61  ad to extra data
301a0 62 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65  base file fragme
301b0 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61  ntation.  And [a
301c0 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73  uto_vacuum].does
301d0 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72   not compact par
301e0 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
301f0 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ges of the datab
30200 61 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f  ase as VACUUM do
30210 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  es...</p>...<tcl
30220 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
30230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30270 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45  .Section {INDEXE
30280 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20  D BY} indexedby 
30290 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e  {{INDEXED BY} {N
302a0 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f  OT INDEXED}}..</
302b0 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44  tcl>.<p>^The IND
302c0 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66  EXED BY phrase f
302d0 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74  orces the [SQLit
302e0 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d  e query planner]
302f0 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63   to use a.partic
30300 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78  ular named index
30310 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20   on a [DELETE], 
30320 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
30330 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
30340 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
30350 70 68 72 61 73 65 20 69 73 20 61 6e 20 65 78 74  phrase is an ext
30360 65 6e 73 69 6f 6e 20 74 68 61 74 20 69 73 20 70  ension that is p
30370 61 72 74 69 63 75 6c 61 72 20 74 6f 20 53 51 4c  articular to SQL
30380 69 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70  ite and.is not p
30390 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72  ortable to other
303a0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
303b0 67 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44 45 58  gines..The INDEX
303c0 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e  ED BY phrase can
303d0 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20   be seen in the 
303e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
303f0 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a  .diagrams:</p>..
30400 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42  <tcl>.RecursiveB
30410 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
30420 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
30430 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  e.</tcl>..<p>^Th
30440 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e  e "INDEXED BY in
30450 64 65 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65  dex-name" phrase
30460 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
30470 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a  the named index.
30480 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20  must be used in 
30490 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70  order to look up
304a0 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70   values on the p
304b0 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a  receding table..
304c0 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64  ^If index-name d
304d0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72  oes not exist or
304e0 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
304f0 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74  for the query, t
30500 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74  hen.the preparat
30510 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73  ion of the SQL s
30520 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a  tatement fails..
30530 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58  ^(The "NOT INDEX
30540 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  ED" clause speci
30550 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64  fies that no ind
30560 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64  ex shall be used
30570 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20   when.accessing 
30580 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61  the preceding ta
30590 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ble, including i
305a0 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63  mplied indices c
305b0 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20  reate by.UNIQUE 
305c0 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20  and PRIMARY KEY 
305d0 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f  constraints.  Ho
305e0 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47  wever, the INTEG
305f0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63  ER PRIMARY KEY.c
30600 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64  an still be used
30610 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72   to look up entr
30620 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e  ies even when "N
30630 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73  OT INDEXED" is s
30640 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a  pecified.)^</p>.
30650 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
30660 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
30670 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
30680 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
30690 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
306a0 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
306b0 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
306c0 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
306d0 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
306e0 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
306f0 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
30700 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
30710 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
30720 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
30730 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
30740 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
30750 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
30760 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68  sed as such..^Th
30770 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
30780 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76  use does not giv
30790 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  e the optimizer 
307a0 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63  hints about whic
307b0 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20  h index.to use; 
307c0 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74  it gives the opt
307d0 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65  imizer a require
307e0 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e  ment of which in
307f0 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20  dex to use..^If 
30800 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
30810 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f  zer is unable to
30820 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73   use the index s
30830 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a  pecified by the.
30840 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c  INDEX BY clause,
30850 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
30860 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
30870 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
30880 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
30890 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f  clause is <em>no
308a0 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20  t</em> intended 
308b0 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e  for use in tunin
308c0 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63  g.the performanc
308d0 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  e of a query.  T
308e0 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65  he intent of the
308f0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
30900 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61  se is.to raise a
30910 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20   run-time error 
30920 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e  if a schema chan
30930 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70  ge, such as drop
30940 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67  ping or.creating
30950 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65   an index, cause
30960 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  s the query plan
30970 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73   for a time-sens
30980 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63  itive query.to c
30990 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45  hange.  The INDE
309a0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
309b0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c   designed to hel
309c0 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72  p detect.undesir
309d0 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20  able query plan 
309e0 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72  changes during r
309f0 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e  egression testin
30a00 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72  g..Developers ar
30a10 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20  e admonished to 
30a20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20  omit all use of 
30a30 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e  INDEXED BY durin
30a40 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  g.application de
30a50 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61  sign, implementa
30a60 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61  tion, testing, a
30a70 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49  nd tuning.  If.I
30a80 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20  NDEXED BY is to 
30a90 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20  be used at all, 
30aa0 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73  it should be ins
30ab0 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
30ac0 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76  y.end of the dev
30ad0 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73  elopment process
30ae0 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64   when "locking d
30af0 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f  own" a design.</
30b00 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f  p>..<h3>See Also
30b10 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :</h3>..<ol>.<li
30b20 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70  ><p>The [query p
30b30 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74  lanner checklist
30b40 5d 20 64 65 73 63 72 69 62 65 73 20 73 74 65 70  ] describes step
30b50 73 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69  s that applicati
30b60 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68  on.developers sh
30b70 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  ould following t
30b80 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71  o help resolve q
30b90 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f  uery planner pro
30ba0 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68  blems..Notice th
30bb0 65 20 74 68 61 74 20 74 68 65 20 75 73 65 20 6f  e that the use o
30bc0 66 20 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f INDEXED BY is 
30bd0 61 20 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74  a last resort, t
30be0 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77  o be used only.w
30bf0 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65  hen all other me
30c00 61 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e  asures fail.</p>
30c10 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63  ..<li><p>[uplusc
30c20 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79  ontrol|The unary
30c30 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63   "+" operator].c
30c40 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
30c50 73 71 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69  squalify terms i
30c60 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  n the WHERE clau
30c70 73 65 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69  se from use by i
30c80 6e 64 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20  ndices..Careful 
30c90 75 73 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63  use of unary + c
30ca0 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c  an sometimes hel
30cb0 70 20 70 72 65 76 65 6e 74 20 74 68 65 20 71 75  p prevent the qu
30cc0 65 72 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d  ery planner from
30cd0 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72  .choosing a poor
30ce0 20 69 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72   index without r
30cf0 65 73 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f  estricting it to
30d00 20 75 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69   using one speci
30d10 66 69 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66  fic index..Caref
30d20 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20  ul placement of 
30d30 75 6e 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72  unary + operator
30d40 73 20 69 73 20 61 20 62 65 74 74 65 72 20 6d 65  s is a better me
30d50 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c  thod for control
30d60 6c 69 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69  ling .which indi
30d70 63 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ces are used by 
30d80 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c  a query.</p>..<l
30d90 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65  i><p>The [sqlite
30da0 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d  3_stmt_status()]
30db0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
30dc0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74   together with t
30dd0 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  he.[SQLITE_STMTS
30de0 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53  TATUS_FULLSCAN_S
30df0 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45  TEP] and [SQLITE
30e00 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
30e10 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75  ] verbs.can be u
30e20 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74  sed to detect at
30e30 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61   run-time when a
30e40 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
30e50 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66  is not.making ef
30e60 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69  fective use of i
30e70 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70  ndices.  Many ap
30e80 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70  plications may p
30e90 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65  refer to.use the
30ea0 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73   [sqlite3_stmt_s
30eb0 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61  tatus()] interfa
30ec0 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64  ce to detect ind
30ed0 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72  ex misuse.rather
30ee0 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45   than the INDEXE
30ef0 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63  D BY phrase desc
30f00 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a  ribed here.</p>.
30f10 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </ol>..<tcl>.###
30f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f60 23 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c  ##########.# A l
30f70 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e  ist of keywords.
30f80 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63    A asterisk occ
30f90 75 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65  urs after the ke
30fa0 79 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f  yword if it is o
30fb0 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b  n.# the fallback
30fc0 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79   list..#.set key
30fd0 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74  word_list [lsort
30fe0 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41   {.   ABORT.   A
30ff0 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20  CTION.   ADD.   
31000 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20  AFTER.   ALL.   
31010 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45  ALTER.   ANALYZE
31020 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20  .   AND.   AS.  
31030 20 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20   ASC.   ATTACH. 
31040 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a    AUTOINCREMENT.
31050 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47     BEFORE.   BEG
31060 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20  IN.   BETWEEN.  
31070 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20   BY.   CASCADE. 
31080 20 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20    CASE.   CAST. 
31090 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41    CHECK.   COLLA
310a0 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20  TE.   COLUMN.   
310b0 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49  COMMIT.   CONFLI
310c0 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54  CT.   CONSTRAINT
310d0 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52  .   CREATE.   CR
310e0 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44  OSS.   CURRENT_D
310f0 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  ATE.   CURRENT_T
31100 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  IME.   CURRENT_T
31110 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41  IMESTAMP.   DATA
31120 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a  BASE.   DEFAULT.
31130 20 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44     DEFERRED.   D
31140 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
31150 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44  ETE.   DESC.   D
31160 45 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43  ETACH.   DISTINC
31170 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44  T.   DROP.   END
31180 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45  .   EACH.   ELSE
31190 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58  .   ESCAPE.   EX
311a0 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56  CEPT.   EXCLUSIV
311b0 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45  E.   EXISTS.   E
311c0 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20  XPLAIN.   FAIL. 
311d0 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e    FOR.   FOREIGN
311e0 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c  .   FROM.   FULL
311f0 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55  .   GLOB.   GROU
31200 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49  P.   HAVING.   I
31210 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49  F.   IGNORE.   I
31220 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20  MMEDIATE.   IN. 
31230 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58    INDEX.   INDEX
31240 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a  ED.   INITIALLY.
31250 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
31260 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20  RT.   INSTEAD.  
31270 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
31280 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
31290 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
312a0 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b  Y.   LEFT.   LIK
312b0 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41  E.   LIMIT.   MA
312c0 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20  TCH.   NATURAL. 
312d0 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e    NO.   NOT.   N
312e0 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20  OTNULL.   NULL. 
312f0 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20    OF.   OFFSET. 
31300 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
31310 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
31320 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20  PLAN.   PRAGMA. 
31330 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45    PRIMARY.   QUE
31340 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52  RY.   RAISE.   R
31350 45 43 55 52 53 49 56 45 0a 20 20 20 52 45 46 45  ECURSIVE.   REFE
31360 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50  RENCES.   REGEXP
31370 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52  .   REINDEX.   R
31380 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45  ELEASE.   RENAME
31390 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52  .   REPLACE.   R
313a0 45 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54  ESTRICT.   RIGHT
313b0 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20  .   ROLLBACK.   
313c0 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54  ROW.   SAVEPOINT
313d0 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45  .   SELECT.   SE
313e0 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45  T.   TABLE.   TE
313f0 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a  MP.   TEMPORARY.
31400 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20     THEN.   TO.  
31410 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20   TRANSACTION.   
31420 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e  TRIGGER.   UNION
31430 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50  .   UNIQUE.   UP
31440 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20  DATE.   USING.  
31450 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45   VACUUM.   VALUE
31460 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52  S.   VIEW.   VIR
31470 54 55 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20  TUAL.   WITH.   
31480 57 49 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a  WITHOUT.   WHEN.
31490 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f     WHERE.}]..hd_
314a0 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73  puts {<DIV class
314b0 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d  ="pdf_section">}
314c0 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65  .Section {SQLite
314d0 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f   Keywords} keywo
314e0 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f  rds {{*SQL keywo
314f0 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rd} {SQL keyword
31500 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44  s}}.hd_puts {</D
31510 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  IV>}.</tcl>..<p>
31520 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  The SQL standard
31530 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67   specifies a hug
31540 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77  e number of keyw
31550 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e  ords which may n
31560 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68  ot.be used as th
31570 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65  e names of table
31580 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75  s, indices, colu
31590 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20  mns, databases, 
315a0 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e  user-defined.fun
315b0 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f  ctions, collatio
315c0 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ns, virtual tabl
315d0 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e  e modules, or an
315e0 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62  y other named ob
315f0 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f  ject..The list o
31600 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f  f keywords is so
31610 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70   long that few p
31620 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62  eople can rememb
31630 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72  er them all..For
31640 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20   most SQL code, 
31650 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20  your safest bet 
31660 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20  is to never use 
31670 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  any English lang
31680 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65  uage.word as the
31690 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d   name of a user-
316a0 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c  defined object.<
316b0 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77  /p>..<p>If you w
316c0 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79  ant to use a key
316d0 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20  word as a name, 
316e0 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74  you need to quot
316f0 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65  e it.  There.are
31700 20 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75   four ways of qu
31710 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69  oting keywords i
31720 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c  n SQLite:</p>..<
31730 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  p>.<blockquote>.
31740 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64  <table>.<tr>.<td
31750 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
31760 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f  >'keyword'</b></
31770 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
31780 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  "></td>..<td>^A 
31790 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
317a0 65 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74  e quotes is a st
317b0 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74  ring literal.</t
317c0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
317d0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
317e0 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c  b>"keyword"</b><
317f0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
31800 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e  td>^A keyword in
31810 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69   double-quotes i
31820 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e  s an identifier.
31830 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
31840 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
31850 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72  "><b>&#91;keywor
31860 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d&#93;</b></td><
31870 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
31880 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
31890 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63  d in square brac
318a0 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20  kets is .       
318b0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
318c0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
318d0 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
318e0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
318f0 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
31900 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20  ed by MS Access 
31910 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61  and SQL Server a
31920 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
31930 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
31940 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
31950 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  ty.</td></tr>..<
31960 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
31970 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79  top"><b>&#96;key
31980 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74  word&#96;</b></t
31990 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
319a0 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  >^A keyword encl
319b0 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63  osed in grave ac
319c0 63 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64  cents (ASCII cod
319d0 65 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20  e 96) is .      
319e0 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e    an identifier.
319f0 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74    This is not st
31a00 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69  andard SQL.  Thi
31a10 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e  s quoting mechan
31a20 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75  ism.        is u
31a30 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64  sed by MySQL and
31a40 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
31a50 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
31a60 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
31a70 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61  .</td></tr>.</ta
31a80 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
31a90 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20  e>.</p>..<p>For 
31aa0 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20  resilience when 
31ab0 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20  confronted with 
31ac0 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73  historical SQL s
31ad0 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74  tatements, SQLit
31ae0 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73  e.will sometimes
31af0 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e   bend the quotin
31b00 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f  g rules above:</
31b10 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
31b20 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
31b30 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28   single.quotes (
31b40 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e  ex: <b>'key'</b>
31b50 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62   or <b>'glob'</b
31b60 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
31b70 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e  context where.an
31b80 20 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61   identifier is a
31b90 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65  llowed but where
31ba0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
31bb0 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  l is not allowed
31bc0 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e  , then.the token
31bd0 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
31be0 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69  o be an identifi
31bf0 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  er instead of a 
31c00 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a  string literal..
31c10 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
31c20 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  p>^If a keyword 
31c30 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73  in double.quotes
31c40 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f   (ex: <b>"key"</
31c50 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c  b> or <b>"glob"<
31c60 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
31c70 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
31c80 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73  it cannot be res
31c90 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e  olved to an iden
31ca0 74 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65  tifier but where
31cb0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
31cc0 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68  l.is allowed, th
31cd0 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  en the token is 
31ce0 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65  understood to be
31cf0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
31d00 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20  l instead.of an 
31d10 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c  identifier.</p><
31d20 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50  /li>.</ul>..<p>P
31d30 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63  rogrammers are c
31d40 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20  autioned not to 
31d50 75 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65  use the two exce
31d60 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64  ptions described
31d70 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73   in.the previous
31d80 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d   bullets.  We em
31d90 70 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65  phasize that the
31da0 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20  y exist only so 
31db0 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c  that old.and ill
31dc0 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74  -formed SQL stat
31dd0 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20  ements will run 
31de0 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75  correctly.  Futu
31df0 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  re versions of.S
31e00 51 4c 69 74 65 20 6d 69 67 68 74 20 72 61 69 73  QLite might rais
31e10 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64  e errors instead
31e20 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68   of accepting th
31e30 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74  e malformed.stat
31e40 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62  ements covered b
31e50 79 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  y the exceptions
31e60 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   above.</p>..<p>
31e70 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77  .SQLite adds new
31e80 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74   keywords from t
31e90 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e  ime to time when
31ea0 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77   it takes on new
31eb0 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f   features..So to
31ec0 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f   prevent your co
31ed0 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72  de from being br
31ee0 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65  oken by future e
31ef0 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75  nhancements, you
31f00 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79   should.normally
31f10 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74   quote any ident
31f20 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
31f30 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
31f40 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
31f50 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
31f60 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
31f70 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f  e list below sho
31f80 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  ws all possible 
31f90 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79  keywords used by
31fa0 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51   any build of.SQ
31fb0 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20  Lite regardless 
31fc0 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  of [compile-time
31fd0 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73   options].  .Mos
31fe0 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e  t reasonable con
31ff0 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20  figurations use 
32000 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74  most or all of t
32010 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62  hese keywords,.b
32020 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73  ut some keywords
32030 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
32040 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67  when SQL languag
32050 65 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64  e features are.d
32060 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72  isabled..^(Regar
32070 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
32080 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
32090 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65  uration, any ide
320a0 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
320b0 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f  not on.the follo
320c0 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74  wing <tcl>hd_put
320d0 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  s [llength $keyw
320e0 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20  ord_list]</tcl> 
320f0 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20  element.list is 
32100 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f  not a keyword to
32110 20 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20   the SQL parser 
32120 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a  in SQLite:.</p>.
32130 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
32140 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
32150 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  "><tr>.<td align
32160 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
32170 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
32180 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c  >.<tcl>.set n [l
32190 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
321a0 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35  list].set nCol 5
321b0 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20  .set nRow [expr 
321c0 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e  {($n+$nCol-1)/$n
321d0 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f  Col}].set i 0.fo
321e0 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77  reach word $keyw
321f0 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20  ord_list {.  if 
32200 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20  {$i==$nRow} {.  
32210 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e    hd_puts "</td>
32220 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
32230 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c  \" align=\"left\
32240 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e  " width=\"20%\">
32250 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20  ".    set i 1.  
32260 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63  } else {.    inc
32270 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  r i.  }.  hd_put
32280 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a  s "$word<br>\n".
32290 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f  }.</tcl>.</td></
322a0 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  tr></table></blo
322b0 63 6b 71 75 6f 74 65 3e 29 5e 0a                 ckquote>)^.