Documentation Source Text

Hex Artifact Content
Login

Artifact 25ddca3f48459c3056d3689f48c2d4627cdda732:


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 49 66 20 66 6f 72 65 69  <li><p>.If forei
1c80: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1c90: 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 0a  ts are enabled,.
1ca0: 64 69 73 61 62 6c 65 20 74 68 65 6d 20 75 73 69  disable them usi
1cb0: 6e 67 20 5b 50 52 41 47 4d 41 20 66 6f 72 65 69  ng [PRAGMA forei
1cc0: 67 6e 5f 6b 65 79 73 20 7c 20 50 52 41 47 4d 41  gn_keys | PRAGMA
1cd0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46   foreign_keys=OF
1ce0: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61  F]...<li><p>.Sta
1cf0: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
1d00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d  ...<li><p>.Remem
1d10: 62 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  ber the format o
1d20: 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e  f all indexes an
1d30: 64 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  d triggers assoc
1d40: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
1d50: 20 58 2e 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61   X..This informa
1d60: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65  tion will be nee
1d70: 64 65 64 20 69 6e 20 73 74 65 70 20 38 20 62 65  ded in step 8 be
1d80: 6c 6f 77 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f  low.  One way to
1d90: 20 64 6f 20 74 68 69 73 20 69 73 0a 74 6f 20 72   do this is.to r
1da0: 75 6e 20 61 20 71 75 65 72 79 20 6c 69 6b 65 20  un a query like 
1db0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53  the following:.S
1dc0: 45 4c 45 43 54 20 74 79 70 65 2c 20 73 71 6c 20  ELECT type, sql 
1dd0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1de0: 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d  er WHERE tbl_nam
1df0: 65 3d 27 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  e='X'...<li><p>.
1e00: 55 73 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  Use [CREATE TABL
1e10: 45 5d 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  E] to construct 
1e20: 61 20 6e 65 77 20 74 61 62 6c 65 20 22 6e 65 77  a new table "new
1e30: 5f 58 22 20 74 68 61 74 20 69 73 20 69 6e 20 74  _X" that is in t
1e40: 68 65 20 64 65 73 69 72 65 64 0a 72 65 76 69 73  he desired.revis
1e50: 65 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 61 62  ed format of tab
1e60: 6c 65 20 58 2e 20 20 4d 61 6b 65 20 73 75 72 65  le X.  Make sure
1e70: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 22   that the name "
1e80: 6e 65 77 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20  new_X" does not 
1e90: 63 6f 6c 6c 69 64 65 0a 77 69 74 68 20 61 6e 79  collide.with any
1ea0: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20   existing table 
1eb0: 6e 61 6d 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e  name, of course.
1ec0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66  ..<li><p>.Transf
1ed0: 65 72 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  er content from 
1ee0: 58 20 69 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69  X into new_X usi
1ef0: 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c  ng a statement.l
1f00: 69 6b 65 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f  ike: INSERT INTO
1f10: 20 6e 65 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e   new_X SELECT ..
1f20: 2e 20 46 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c  . FROM X...<li><
1f30: 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c 64 20  p>.Drop the old 
1f40: 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f 50 20  table X:  [DROP 
1f50: 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54 41 42  TABLE | DROP TAB
1f60: 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  LE X]...<li><p>.
1f70: 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20  Change the name 
1f80: 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20 75 73  of new_X to X us
1f90: 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42 4c 45  ing: ALTER TABLE
1fa0: 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20 54 4f   new_X RENAME TO
1fb0: 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65   X...<li><p>.Use
1fc0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
1fd0: 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52 49 47  and [CREATE TRIG
1fe0: 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73 74 72  GER] to reconstr
1ff0: 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e 64 20  uct indexes and 
2000: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
2010: 74 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58  ted with table X
2020: 2e 20 20 50 65 72 68 61 70 73 20 75 73 65 20 74  .  Perhaps use t
2030: 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20 6f 66  he old format of
2040: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 61 6e   the triggers an
2050: 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65 64 20  d.indexes saved 
2060: 66 72 6f 6d 20 73 74 65 70 20 33 20 61 62 6f 76  from step 3 abov
2070: 65 20 61 73 20 61 20 67 75 69 64 65 2c 20 6d 61  e as a guide, ma
2080: 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61 73 20  king changes as 
2090: 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f 72 20  appropriate.for 
20a0: 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e 2e 0a  the alteration..
20b0: 0a 3c 6c 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76  .<li><p>If any v
20c0: 69 65 77 73 20 72 65 66 65 72 20 74 6f 20 74 61  iews refer to ta
20d0: 62 6c 65 20 58 20 69 6e 20 61 20 77 61 79 20 74  ble X in a way t
20e0: 68 61 74 20 69 73 20 61 66 66 65 63 74 65 64 20  hat is affected 
20f0: 62 79 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  by the.schema ch
2100: 61 6e 67 65 2c 20 74 68 65 6e 20 64 72 6f 70 20  ange, then drop 
2110: 74 68 6f 73 65 20 76 69 65 77 73 20 75 73 69 6e  those views usin
2120: 67 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 61 6e  g [DROP VIEW] an
2130: 64 20 72 65 63 72 65 61 74 65 20 74 68 65 6d 0a  d recreate them.
2140: 77 69 74 68 20 77 68 61 74 65 76 65 72 20 63 68  with whatever ch
2150: 61 6e 67 65 73 20 61 72 65 20 6e 65 63 65 73 73  anges are necess
2160: 61 72 79 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61  ary to accommoda
2170: 74 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  te the schema ch
2180: 61 6e 67 65 0a 75 73 69 6e 67 20 5b 43 52 45 41  ange.using [CREA
2190: 54 45 20 56 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c  TE VIEW]...<li><
21a0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
21b0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  y constraints we
21c0: 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e  re originally en
21d0: 61 62 6c 65 64 0a 74 68 65 6e 20 72 75 6e 20 5b  abled.then run [
21e0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
21f0: 65 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ey_check] to ver
2200: 69 66 79 20 74 68 61 74 20 74 68 65 20 73 63 68  ify that the sch
2210: 65 6d 61 0a 63 68 61 6e 67 65 20 64 69 64 20 6e  ema.change did n
2220: 6f 74 20 62 72 65 61 6b 20 61 6e 79 20 66 6f 72  ot break any for
2230: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2240: 69 6e 74 73 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ints....<li><p>.
2250: 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  Commit the trans
2260: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 69  action started i
2270: 6e 20 73 74 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c  n step 2...<li><
2280: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
2290: 79 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  ys constraints w
22a0: 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65  ere originally e
22b0: 6e 61 62 6c 65 64 2c 20 72 65 65 6e 61 62 6c 65  nabled, reenable
22c0: 20 74 68 65 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e   them now..</ol>
22d0: 0a 0a 3c 70 3e 54 68 65 20 70 72 6f 63 65 64 75  ..<p>The procedu
22e0: 72 65 20 61 62 6f 76 65 20 69 73 20 63 6f 6d 70  re above is comp
22f0: 6c 65 74 65 6c 79 20 67 65 6e 65 72 61 6c 20 61  letely general a
2300: 6e 64 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65  nd will work eve
2310: 6e 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20  n if the.schema 
2320: 63 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68  change causes th
2330: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74  e information st
2340: 6f 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c  ored in the tabl
2350: 65 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20  e to change..So 
2360: 74 68 65 20 66 75 6c 6c 20 70 72 6f 63 65 64 75  the full procedu
2370: 72 65 20 61 62 6f 76 65 20 69 73 20 61 70 70 72  re above is appr
2380: 6f 70 72 69 61 74 65 20 66 6f 72 20 64 72 6f 70  opriate for drop
2390: 70 69 6e 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63  ping a column,.c
23a0: 68 61 6e 67 69 6e 67 20 74 68 65 20 6f 72 64 65  hanging the orde
23b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64  r of columns, ad
23c0: 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67  ding or removing
23d0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
23e0: 61 69 6e 74 0a 6f 72 20 50 52 49 4d 41 52 59 20  aint.or PRIMARY 
23f0: 4b 45 59 2c 20 61 64 64 69 6e 67 20 43 48 45 43  KEY, adding CHEC
2400: 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59  K or FOREIGN KEY
2410: 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e   or NOT NULL con
2420: 73 74 72 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61  straints,.or cha
2430: 6e 67 69 6e 67 20 74 68 65 20 64 61 74 61 74 79  nging the dataty
2440: 70 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c  pe for a column,
2450: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 20 48   for example.  H
2460: 6f 77 65 76 65 72 2c 20 61 20 73 69 6d 70 6c 65  owever, a simple
2470: 72 0a 61 6e 64 20 66 61 73 74 65 72 20 70 72 6f  r.and faster pro
2480: 63 65 64 75 72 65 20 63 61 6e 20 6f 70 74 69 6f  cedure can optio
2490: 6e 61 6c 6c 79 20 62 65 20 75 73 65 64 20 66 6f  nally be used fo
24a0: 72 0a 73 6f 6d 65 20 63 68 61 6e 67 65 73 20 74  r.some changes t
24b0: 68 61 74 20 64 6f 20 6e 6f 20 61 66 66 65 63 74  hat do no affect
24c0: 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e   the on-disk con
24d0: 74 65 6e 74 20 69 6e 20 61 6e 79 20 77 61 79 2e  tent in any way.
24e0: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  .The following s
24f0: 69 6d 70 6c 65 72 20 70 72 6f 63 65 64 75 72 65  impler procedure
2500: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20   is appropriate 
2510: 66 6f 72 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45  for removing.CHE
2520: 43 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45  CK or FOREIGN KE
2530: 59 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  Y or NOT NULL co
2540: 6e 73 74 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d  nstraints,.renam
2550: 69 6e 67 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20  ing columns, or 
2560: 61 64 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69  adding or removi
2570: 6e 67 20 6f 72 20 63 68 61 6e 67 69 6e 67 20 64  ng or changing d
2580: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e  efault values on
2590: 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e  .a column...<ol>
25a0: 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61 72 74 20 61  .<lI><p> Start a
25b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
25c0: 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47  li><p> Run [PRAG
25d0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
25e0: 6e 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  n] to determine 
25f0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65  the current sche
2600: 6d 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma.version numbe
2610: 72 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20  r.  This number 
2620: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66  will be needed f
2630: 6f 72 20 73 74 65 70 20 36 20 62 65 6c 6f 77 2e  or step 6 below.
2640: 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61  ..<li><p> Activa
2650: 74 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  te schema editin
2660: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
2670: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
2680: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
2690: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a  le_schema=ON]...
26a0: 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b  <li><p> Run an [
26b0: 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
26c0: 74 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  t to change the 
26d0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61  definition of ta
26e0: 62 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71  ble X.in the [sq
26f0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
2700: 65 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69  e]: .UPDATE sqli
2710: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
2720: 6c 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65  l=... WHERE type
2730: 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d  ='table' AND nam
2740: 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61  e='X';.<p><em>Ca
2750: 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b  ution:</em>  Mak
2760: 69 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ing a change to 
2770: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
2780: 72 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69  r table like thi
2790: 73 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68  s will.render th
27a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  e database corru
27b0: 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c  pt and unreadabl
27c0: 65 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20  e if the change 
27d0: 63 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61  contains.a synta
27e0: 78 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20  x error.  It is 
27f0: 73 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63  suggested that c
2800: 61 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f  areful testing o
2810: 66 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61  f the UPDATE.sta
2820: 74 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f  tement be done o
2830: 6e 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61  n a separate bla
2840: 6e 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  nk database prio
2850: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2860: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2870: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2880: 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20   data...<li><p> 
2890: 49 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f  If the change to
28a0: 20 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66   table X also af
28b0: 66 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c  fects other tabl
28c0: 65 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72  es or indexes or
28d0: 0a 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69  .triggers are vi
28e0: 65 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d  ews within schem
28f0: 61 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44  a, then run [UPD
2900: 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ATE] statements 
2910: 74 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20  to modify.those 
2920: 6f 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64  other tables ind
2930: 65 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74  exes and views t
2940: 6f 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  oo.  For example
2950: 2c 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66  , if the name of
2960: 0a 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65  .a column change
2970: 73 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b  s, all FOREIGN K
2980: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
2990: 74 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65  triggers, indexe
29a0: 73 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61  s, and.views tha
29b0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20  t refer to that 
29c0: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d  column must be m
29d0: 6f 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e  odified..<p><em>
29e0: 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f  Caution:</em>  O
29f0: 6e 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e  nce again, makin
2a00: 67 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  g changes to the
2a10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
2a20: 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20  table like this 
2a30: 77 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20  will render the 
2a40: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
2a50: 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20   and unreadable 
2a60: 69 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63  if the .change c
2a70: 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72  ontains an error
2a80: 2e 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73  .  Carefully tes
2a90: 74 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65  t of this entire
2aa0: 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20   procedure.on a 
2ab0: 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61  separate test da
2ac0: 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20  tabase prior to 
2ad0: 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61  using it on.a da
2ae0: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
2af0: 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61  g important data
2b00: 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63   and/or make bac
2b10: 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d  kup copies of.im
2b20: 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65  portant database
2b30: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
2b40: 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  ng this procedur
2b50: 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72  e...<li><p> Incr
2b60: 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61  ement the schema
2b70: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
2b80: 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63  using.[PRAGMA sc
2b90: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50  hema_version | P
2ba0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
2bb0: 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20  sion=X] where X 
2bc0: 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  is one.more than
2bd0: 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20   the old schema 
2be0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
2bf0: 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61  ound in step 2 a
2c00: 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44  bove...<li><p> D
2c10: 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64  isable schema ed
2c20: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
2c30: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
2c40: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
2c50: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
2c60: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70  F]...<li><p> (Op
2c70: 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41  tional) Run [PRA
2c80: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2c90: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
2ca0: 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63  hat the.schema c
2cb0: 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64  hanges did not d
2cc0: 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61  amage the databa
2cd0: 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d  se...<li><p> Com
2ce0: 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  mit the transact
2cf0: 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20 73  ion started on s
2d00: 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f  tep 1 above..</o
2d10: 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66  l>..<p>If some f
2d20: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66  uture version of
2d30: 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77   SQLite adds new
2d40: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70   ALTER TABLE cap
2d50: 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73  abilities, .thos
2d60: 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77  e capabilities w
2d70: 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20  ill very likely 
2d80: 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74  use one of the t
2d90: 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75  wo procedures.ou
2da0: 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c  tlined above...<
2db0: 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74  tcl>.#  One of t
2dc0: 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a  he reasons that.
2dd0: 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  # SQLite does no
2de0: 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70  t currently supp
2df0: 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54  ort more ALTER T
2e00: 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65  ABLE capabilitie
2e10: 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20  s is that.# the 
2e20: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20  procedure shown 
2e30: 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75  above is difficu
2e40: 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66  lt to automate f
2e50: 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  or an arbitrary 
2e60: 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63  schema..# Partic
2e70: 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f  ularly troubleso
2e80: 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65  me areas are ide
2e90: 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65  ntifying all vie
2ea0: 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ws associated wi
2eb0: 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20  th.# table X in 
2ec0: 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74  step 1 and creat
2ed0: 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e  ing new views an
2ee0: 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  d triggers that 
2ef0: 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23  are compatible.#
2f00: 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65   with the altere
2f10: 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62  d schema for tab
2f20: 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20  le X in step 6. 
2f30: 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20   It is a tricky 
2f40: 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70  but solvable.# p
2f50: 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65  roblem to create
2f60: 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20   code that will 
2f70: 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70  perform the step
2f80: 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22  s above .# for "
2f90: 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65  reasonable" sche
2fa0: 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75  mas commonly fou
2fb0: 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  nd in practice. 
2fc0: 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78   .# But there ex
2fd0: 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73  ist malevolent s
2fe0: 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68  chemas for which
2ff0: 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61  .# these steps a
3000: 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64  re maddeningly d
3010: 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63  ifficult to do c
3020: 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65  orrectly.  Rathe
3030: 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20  r than create.# 
3040: 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74  ALTER TABLE feat
3050: 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63  ures that work c
3060: 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f  orrectly 99.9% o
3070: 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70  f the time but p
3080: 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70  ossibly.# corrup
3090: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20  t the schema on 
30a0: 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20  the other 0.1%, 
30b0: 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c  the SQLite devel
30c0: 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64  opers have decid
30d0: 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65  ed.# to push the
30e0: 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68   problem into th
30f0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  e application do
3100: 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69  main, where it i
3110: 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20  s much easier.# 
3120: 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e  to solve..</tcl>
3130: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3180: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3190: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
31a0: 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72  e ANALYZE..Recur
31b0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
31c0: 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c  m analyze-stmt.<
31d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
31e0: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
31f0: 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69  gathers statisti
3200: 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20  cs about tables 
3210: 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20  and.indices and 
3220: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65  stores the colle
3230: 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cted information
3240: 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61  .in [internal ta
3250: 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74  bles] of the dat
3260: 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20  abase where the 
3270: 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
3280: 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69  can.access the i
3290: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75  nformation and u
32a0: 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61  se it to help ma
32b0: 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20  ke better query 
32c0: 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73  planning choices
32d0: 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e  ..^If no argumen
32e0: 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c  ts are given, al
32f0: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
3300: 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65  ases are.analyze
3310: 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  d.  ^If a databa
3320: 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e  se name is given
3330: 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
3340: 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65  , then all table
3350: 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e  s.and indices in
3360: 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61   that one databa
3370: 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  se are analyzed.
3380: 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d    .^If the argum
3390: 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e  ent is a table n
33a0: 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ame, then only t
33b0: 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68  hat table and th
33c0: 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  e.indices associ
33d0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74  ated with that t
33e0: 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  able are analyze
33f0: 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75  d.  ^If the argu
3400: 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78  ment.is an index
3410: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
3420: 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20   that one index 
3430: 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e  is analyzed.</p>
3440: 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75  ..<p> ^The defau
3450: 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  lt implementatio
3460: 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61  n stores all sta
3470: 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e  tistics in a sin
3480: 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20  gle.table named 
3490: 22 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22  "[sqlite_stat1]"
34a0: 2e 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73  .  ^If SQLite is
34b0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
34c0: 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he.[SQLITE_ENABL
34d0: 45 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20  E_STAT3] option 
34e0: 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20  and without the 
34f0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
3500: 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68  TAT4].option, th
3510: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
3520: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
3530: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
3540: 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f  ored in [sqlite_
3550: 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c  stat3].. ^If SQL
3560: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
3570: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
3580: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f  _ENABLE_STAT4] o
3590: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69  ption, then addi
35a0: 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d  tional histogram
35b0: 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74   data is.collect
35c0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e  ed and stored in
35d0: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e   [sqlite_stat4].
35e0: 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20  .Older versions 
35f0: 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20  of SQLite would 
3600: 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20  make use of the 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74  [sqlite_stat2] t
3620: 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c  able.when compil
3630: 65 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed with [SQLITE_
3640: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75  ENABLE_STAT2] bu
3650: 74 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72  t all recent ver
3660: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
3670: 69 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74  ignore the sqlit
3680: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46  e_stat2 table..F
3690: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
36a0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
36b0: 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e  ditional [intern
36c0: 61 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20  al tables] with 
36d0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61  the same name pa
36e0: 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74  ttern except wit
36f0: 68 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61  h.final digit la
3700: 72 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41  rger than "4"..A
3710: 6c 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c  ll of these tabl
3720: 65 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  es are collectiv
3730: 65 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  ely referred to 
3740: 61 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74  as "statistics t
3750: 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ables"..</p>..<p
3760: 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  > ^The content o
3770: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3780: 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71   tables can be q
3790: 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45  ueried using [SE
37a0: 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65  LECT].and can be
37b0: 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74   changed using t
37c0: 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e  he [DELETE], [IN
37d0: 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41  SERT], and [UPDA
37e0: 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28  TE] commands..^(
37f0: 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  The [DROP TABLE]
3800: 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f   command works o
3810: 6e 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  n statistics tab
3820: 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65  les.as of SQLite
3830: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29   version 3.7.9.)
3840: 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41  ^.^The [ALTER TA
3850: 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  BLE] command doe
3860: 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74  s not work on st
3870: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e  atistics tables.
3880: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
3890: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
38a0: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
38b0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
38c0: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
38d0: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
38e0: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
38f0: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
3900: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
3910: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
3920: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
3930: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
3940: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
3950: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
3960: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
3970: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
3980: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
3990: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
39a0: 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e  and.  .See "[Man
39b0: 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51  ual Control Of Q
39c0: 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67  uery Plans Using
39d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62   SQLITE_STAT Tab
39e0: 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65  les]" for.furthe
39f0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  r information.</
3a00: 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74  p>..<p> ^Statist
3a10: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
3a20: 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20  ANALYZE are not 
3a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
3a40: 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e  dated as.the con
3a50: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
3a60: 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49  base changes.  I
3a70: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
3a80: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68   the database.ch
3a90: 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e  anges significan
3aa0: 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64  tly, or if the d
3ab0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
3ac0: 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65  hanges, then one
3ad0: 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72   should.consider
3ae0: 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41   rerunning the A
3af0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69  NALYZE command i
3b00: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
3b10: 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  e the statistics
3b20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71  .</p>..<p> The q
3b30: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61  uery planner loa
3b40: 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ds the content o
3b50: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3b60: 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d   tables.into mem
3b70: 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68  ory when the sch
3b80: 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48  ema is read.  ^H
3b90: 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70  ence, when an ap
3ba0: 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65  plication.change
3bb0: 73 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  s the statistics
3bc0: 20 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79   tables directly
3bd0: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f  , SQLite will no
3be0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f  t immediately.no
3bf0: 74 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73  tice the changes
3c00: 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  . ^An applicatio
3c10: 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20  n.can force the 
3c20: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
3c30: 20 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74   reread the stat
3c40: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3c50: 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c   running.<b>ANAL
3c60: 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
3c70: 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  r</b>. </p>..<p>
3c80: 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cd0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3ce0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
3cf0: 7d 20 61 74 74 61 63 68 20 7b 61 74 74 61 63 68  } attach {attach
3d00: 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a 52 65 63  ed *ATTACH}..Rec
3d10: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
3d20: 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 0a  ram attach-stmt.
3d30: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65  </tcl>..<p> ^The
3d40: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
3d50: 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20   statement adds 
3d60: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
3d70: 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75   .file to the cu
3d80: 72 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20  rrent [database 
3d90: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 44 61  connection]. .Da
3da0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
3db0: 74 20 77 65 72 65 20 70 72 65 76 69 6f 75 73 6c  t were previousl
3dc0: 79 20 61 74 74 61 63 68 65 64 20 63 61 6e 20 62  y attached can b
3dd0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 0a  e removed using.
3de0: 74 68 65 20 5b 44 45 54 41 43 48 20 44 41 54 41  the [DETACH DATA
3df0: 42 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 0a  BASE] command...
3e00: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  <p>^The filename
3e10: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3e20: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
3e30: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
3e40: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
3e50: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
3e60: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
3e70: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
3e80: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3e90: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
3ea0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
3eb0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
3ec0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
3ed0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
3ee0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
3ef0: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
3f00: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
3f10: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
3f20: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
3f30: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
3f40: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
3f50: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
3f60: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
3f70: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
3f80: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
3f90: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
3fa0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
3fb0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
3fc0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
3fd0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
3fe0: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
3ff0: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
4000: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
4010: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
4020: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
4030: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
4040: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
4050: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
4060: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
4070: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
4080: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
4090: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
40a0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
40b0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
40c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
40d0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
40e0: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
40f0: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
4100: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
4110: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
4120: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
4130: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
4140: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
4150: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
4160: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
4170: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
4180: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
4190: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
41a0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
41b0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
41c0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
41d0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
41e0: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
41f0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
4200: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
4210: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
4220: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
4230: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
4240: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4250: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
4260: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
4270: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
4280: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
4290: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
42a0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
42b0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
42c0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
42d0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
42e0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
42f0: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
4300: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
4310: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
4320: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
4330: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
4340: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
4350: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
4360: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
4370: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
4380: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
4390: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
43a0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
43b0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
43c0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
43d0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
43e0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
43f0: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
4400: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
4410: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
4420: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
4430: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
4440: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
4450: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
4460: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
4470: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
4480: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
4490: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
44a0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
44b0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
44c0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
44d0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
44e0: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
44f0: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
4500: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
4510: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
4520: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
4530: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
4540: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
4550: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
4560: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
4570: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
4580: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
4590: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
45a0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
45b0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
45c0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
45d0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
45e0: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
45f0: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
4600: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
4610: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
4620: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4670: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
4680: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
4690: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
46a0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
46b0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52  MIT ROLLBACK}..R
46c0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46d0: 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74  agram begin-stmt
46e0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
46f0: 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73  Diagram commit-s
4700: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
4710: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
4720: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
4730: 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73  .<p>.^No changes
4740: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
4750: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63  the database exc
4760: 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61  ept within a tra
4770: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63  nsaction..^Any c
4780: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
4790: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
47a0: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
47b0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
47c0: 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d  er than [SELECT]
47d0: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
47e0: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
47f0: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
4800: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
4810: 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f  n effect.  ^Auto
4820: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65  matically starte
4830: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  d transactions.a
4840: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65  re committed whe
4850: 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79  n the last query
4860: 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a   finishes..</p>.
4870: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
4880: 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  ns can be starte
4890: 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67  d manually using
48a0: 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61   the BEGIN.comma
48b0: 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e  nd.  ^(Such tran
48c0: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
48d0: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
48e0: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
48f0: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
4900: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
4910: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
4920: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
4930: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
4940: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
4950: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
4960: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
4970: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
4980: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
4990: 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68  cified.)^.See th
49a0: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
49b0: 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c  on the [ON CONFL
49c0: 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20  ICT].clause for 
49d0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
49e0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
49f0: 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69   ROLLBACK.confli
4a00: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
4a10: 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c  gorithm..</p>..<
4a20: 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54  p>.^END TRANSACT
4a30: 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ION is an alias 
4a40: 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e  for COMMIT..</p>
4a50: 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74  ..<p> ^(Transact
4a60: 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69  ions created usi
4a70: 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49  ng BEGIN...COMMI
4a80: 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e  T do not nest.)^
4a90: 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61  .^For nested tra
4aa0: 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74  nsactions, use t
4ab0: 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61  he [SAVEPOINT] a
4ac0: 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d  nd [RELEASE] com
4ad0: 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53  mands..The "TO S
4ae0: 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65  AVEPOINT <i>name
4af0: 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20  </i>" clause of 
4b00: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
4b10: 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68  mand shown.in th
4b20: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
4b30: 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61   above is only a
4b40: 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41  pplicable to [SA
4b50: 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63  VEPOINT].transac
4b60: 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65  tions.  ^An atte
4b70: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
4b80: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
4b90: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
4ba0: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
4bb0: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
4bc0: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
4bd0: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
4be0: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
4bf0: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
4c00: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
4c10: 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d  .^The COMMIT com
4c20: 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c  mand and the ROL
4c30: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
4c40: 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61  thout the TO cla
4c50: 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d  use.work the sam
4c60: 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e on [SAVEPOINT]
4c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73   transactions as
4c80: 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72   they do with tr
4c90: 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74  ansactions.start
4ca0: 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e  ed by BEGIN.</p>
4cb0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
4cc0: 6e 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45  nt immediate {BE
4cd0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b  GIN IMMEDIATE} {
4ce0: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d  BEGIN EXCLUSIVE}
4cf0: 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e  </tcl>.<p>.^Tran
4d00: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
4d10: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
4d20: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
4d30: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
4d40: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
4d50: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
4d60: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
4d70: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
4d80: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
4d90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
4da0: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
4db0: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
4dc0: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
4dd0: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
4de0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
4df0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
4e00: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
4e10: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
4e20: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
4e30: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
4e40: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
4e50: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
4e60: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
4e70: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
4e80: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
4e90: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
4ea0: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
4eb0: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
4ec0: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
4ed0: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
4ee0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
4ef0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
4f00: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
4f10: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
4f20: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
4f30: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
4f40: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
4f50: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
4f60: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
4f70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
4f80: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
4f90: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
4fa0: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
4fb0: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
4fc0: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
4fd0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4fe0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
4ff0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
5000: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
5010: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
5020: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
5030: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
5040: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
5050: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
5060: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
5070: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
5080: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
5090: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
50a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
50b0: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
50c0: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
50d0: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
50e0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
50f0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
5100: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
5110: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
5120: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
5130: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
5140: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
5150: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
5160: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
5170: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
5180: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
5190: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
51a0: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
51b0: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
51c0: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
51d0: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
51e0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
51f0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
5200: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
5210: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
5220: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
5230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
5240: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
5250: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
5260: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
5270: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
5280: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
5290: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
52a0: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
52b0: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
52c0: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
52d0: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
52e0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
52f0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5300: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
5310: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
5320: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
5330: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
5340: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
5350: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
5360: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
5370: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
5380: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
5390: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
53a0: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
53b0: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
53c0: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
53d0: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
53e0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
53f0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
5400: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
5410: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
5420: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
5430: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
5440: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
5450: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
5460: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
5470: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
5480: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
5490: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
54a0: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
54b0: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
54c0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
54d0: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
54e0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
54f0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
5500: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
5510: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
5520: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
5530: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
5540: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
5550: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
5560: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
5570: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
5580: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
5590: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
55a0: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
55b0: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
55c0: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
55d0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
55e0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
55f0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
5600: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
5610: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
5620: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
5630: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
5640: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
5650: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
5660: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
5670: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
5680: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
5690: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
56a0: 3e 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f  >..<p>.In very o
56b0: 6c 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ld versions of S
56c0: 51 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65  QLite (before ve
56d0: 72 73 69 6f 6e 20 33 2e 37 2e 31 31 20 63 69 72  rsion 3.7.11 cir
56e0: 63 61 20 32 30 31 32 2d 30 33 2d 32 30 29 0a 74  ca 2012-03-20).t
56f0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
5700: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
5710: 72 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54  ror code .[SQLIT
5720: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
5730: 20 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67   are any pending
5740: 20 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d   queries.  ^In m
5750: 6f 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69  ore recent.versi
5760: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74  ons of SQLite, t
5770: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
5780: 20 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e   proceed and pen
5790: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a  ding statements.
57a0: 77 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62  will often be ab
57b0: 6f 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74  orted, causing t
57c0: 68 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  hem to return an
57d0: 20 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20   [SQLITE_ABORT] 
57e0: 6f 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54  or.[SQLITE_ABORT
57f0: 5f 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72  _ROLLBACK] error
5800: 2e 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72  ..^In SQLite ver
5810: 73 69 6f 6e 20 33 2e 38 2e 38 20 61 6e 64 20 6c  sion 3.8.8 and l
5820: 61 74 65 72 2c 20 61 20 70 65 6e 64 69 6e 67 20  ater, a pending 
5830: 72 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  read will contin
5840: 75 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61  ue functioning.a
5850: 66 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43  fter the ROLLBAC
5860: 4b 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  K as long as the
5870: 20 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e   ROLLBACK does n
5880: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61  ot modify the da
5890: 74 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c  tabase.schema..<
58a0: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
58b0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
58c0: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
58d0: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
58e0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
58f0: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
5900: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
5910: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
5920: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
5930: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
5940: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
5950: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
5960: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
5970: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
5980: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
5990: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
59a0: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
59b0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
59c0: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
59d0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
59e0: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
59f0: 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20   that can cause 
5a00: 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c  an automatic rol
5a10: 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f  lback include:</
5a20: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53  p>..<ul>.<li> [S
5a30: 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74  QLITE_FULL]: dat
5a40: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75  abase or disk fu
5a50: 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ll.<li> [SQLITE_
5a60: 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f  IOERR]: disk I/O
5a70: 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c   error.<li> [SQL
5a80: 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62  ITE_BUSY]: datab
5a90: 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e  ase in use by an
5aa0: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c  other process.<l
5ab0: 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  i> [SQLITE_NOMEM
5ac0: 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  ]: out or memory
5ad0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46  .</ul>)^..<p>.^F
5ae0: 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
5af0: 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61  errors, SQLite a
5b00: 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20  ttempts to undo 
5b10: 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61  just the one sta
5b20: 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f  tement.it was wo
5b30: 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61  rking on and lea
5b40: 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  ve changes from 
5b50: 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  prior statements
5b60: 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65   within the.same
5b70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
5b80: 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  act and continue
5b90: 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61   with the transa
5ba0: 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72  ction.  ^However
5bb0: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
5bc0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
5bd0: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
5be0: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
5bf0: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
5c00: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
5c10: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
5c20: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
5c30: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
5c40: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
5c50: 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c  ction.  ^An appl
5c60: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c  ication can tell
5c70: 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66   which.course of
5c80: 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74   action SQLite t
5c90: 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65  ook by using the
5ca0: 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  .[sqlite3_get_au
5cb0: 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61  tocommit()] C-la
5cc0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
5cd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20  .</p>..<p>It is 
5ce0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
5cf0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65   applications re
5d00: 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72  spond to the err
5d10: 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65  ors.listed above
5d20: 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69   by explicitly i
5d30: 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43  ssuing a ROLLBAC
5d40: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20  K command.  ^If 
5d50: 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  the .transaction
5d60: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
5d70: 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  n rolled back au
5d80: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74  tomatically.by t
5d90: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
5da0: 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  e, then the ROLL
5db0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  BACK command wil
5dc0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65  l fail with an.e
5dd0: 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72  rror, but no har
5de0: 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74  m is caused by t
5df0: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74  his.</p>..<p>Fut
5e00: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5e10: 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e  SQLite may exten
5e20: 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72  d the list of er
5e30: 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74  rors which.might
5e40: 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63   cause automatic
5e50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
5e60: 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76  lback.  Future v
5e70: 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
5e80: 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74  e might change t
5e90: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
5ea0: 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61  e.  In particula
5eb0: 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65  r, we may.choose
5ec0: 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65   to simplify the
5ed0: 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75   interface in fu
5ee0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
5ef0: 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69   SQLite by.causi
5f00: 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62  ng the errors ab
5f10: 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20  ove to force an 
5f20: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f  unconditional ro
5f30: 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63  llback.</p>..<tc
5f40: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
5f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f70: 23 23 23 23 23 23 23 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 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45  ##.Section {SAVE
5fa0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
5fb0: 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45   {SAVEPOINT RELE
5fc0: 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ASE}..RecursiveB
5fd0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76  ubbleDiagram sav
5fe0: 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75  epoint-stmt.Recu
5ff0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
6000: 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a  am release-stmt.
6010: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
6020: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
6030: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
6040: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
6050: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
6060: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
6070: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
6080: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
6090: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
60a0: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
60b0: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
60c0: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
60d0: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
60e0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
60f0: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
6100: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
6110: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
6120: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
6130: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
6140: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
6150: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
6160: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
6170: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
6180: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
6190: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
61a0: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
61b0: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
61c0: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
61d0: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
61e0: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
61f0: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
6200: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
6210: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
6220: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
6230: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
6240: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
6250: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
6260: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
6270: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
6280: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
6290: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
62a0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
62b0: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
62c0: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
62d0: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
62e0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
62f0: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
6300: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
6310: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
6320: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
6330: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
6340: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
6350: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
6360: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
6370: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
6380: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
6390: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
63a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
63b0: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
63c0: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
63d0: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
63e0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
63f0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6400: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
6410: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
6420: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
6430: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
6440: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
6450: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
6460: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
6470: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
6480: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
6490: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
64a0: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
64b0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
64c0: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
64d0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
64e0: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
64f0: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
6500: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
6510: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
6520: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
6530: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
6540: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
6550: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
6560: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
6570: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
6580: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
6590: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
65a0: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
65b0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
65c0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
65d0: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
65e0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
65f0: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
6600: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
6610: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
6620: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
6630: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
6640: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
6650: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
6660: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
6670: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
6680: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
6690: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
66a0: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
66b0: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
66c0: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
66d0: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
66e0: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
66f0: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
6700: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
6710: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
6720: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
6730: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
6740: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
6750: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
6760: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
6770: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
6780: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
6790: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
67a0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
67b0: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
67c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
67d0: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
67e0: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
67f0: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
6800: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
6810: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
6820: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
6830: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
6840: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
6850: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
6860: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
6870: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
6880: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
6890: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
68a0: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
68b0: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
68c0: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
68d0: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
68e0: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
68f0: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
6900: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
6910: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
6920: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
6930: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
6940: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
6950: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
6960: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
6970: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
6980: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
6990: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
69a0: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
69b0: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
69c0: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
69d0: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
69e0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
69f0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
6a00: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
6a10: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
6a20: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
6a30: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
6a40: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
6a50: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
6a60: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
6a70: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
6a80: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
6a90: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
6aa0: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
6ab0: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
6ac0: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
6ad0: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
6ae0: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
6af0: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
6b00: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
6b10: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
6b20: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
6b30: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
6b40: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
6b50: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6b60: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
6b70: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
6b80: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
6b90: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
6ba0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
6bb0: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
6bc0: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
6bd0: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
6be0: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
6bf0: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
6c00: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
6c10: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
6c20: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
6c30: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
6c40: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
6c50: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
6c60: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6c70: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
6c80: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
6c90: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
6ca0: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
6cb0: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
6cc0: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
6cd0: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
6ce0: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
6cf0: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
6d00: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
6d10: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
6d20: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
6d30: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
6d40: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
6d50: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
6d60: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
6d70: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
6d80: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
6d90: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
6da0: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
6db0: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
6dc0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
6dd0: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
6de0: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
6df0: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
6e00: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
6e10: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
6e20: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
6e30: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
6e40: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
6e50: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
6e60: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
6e70: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
6e80: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
6e90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
6ea0: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
6eb0: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
6ec0: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
6ed0: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
6ee0: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
6ef0: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
6f00: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
6f10: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
6f20: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
6f30: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
6f40: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
6f50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6f60: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
6f70: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
6f80: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
6f90: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
6fa0: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
6fb0: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
6fc0: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
6fd0: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
6fe0: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
6ff0: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
7000: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
7010: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
7020: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
7030: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
7040: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
7050: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
7060: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
7070: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
7080: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
7090: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
70a0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
70b0: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
70c0: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
70d0: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
70e0: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
70f0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
7100: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
7110: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
7120: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
7130: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
7140: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
7150: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
7160: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
7170: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
7180: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
7190: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
71a0: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
71b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
71c0: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
71d0: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
71e0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
71f0: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
7200: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
7210: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
7220: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
7230: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
7240: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
7250: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
7260: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
7270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7280: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
7290: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
72a0: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
72b0: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
72c0: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
72d0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
72e0: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
72f0: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
7300: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
7310: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
7320: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
7330: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
7340: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
7350: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
7360: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
7370: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
7380: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
7390: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
73a0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 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 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
7400: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
7410: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52  nt *comments}..R
7420: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7430: 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79  agram comment-sy
7440: 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ntax.</tcl>..<p>
7450: 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f  ^Comments are no
7460: 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20  t SQL commands, 
7470: 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69  but can occur wi
7480: 74 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66  thin the text of
7490: 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73  .SQL queries pas
74a0: 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  sed to [sqlite3_
74b0: 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e  prepare_v2()] an
74c0: 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66  d related interf
74d0: 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  aces..^Comments 
74e0: 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77  are treated as w
74f0: 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65  hitespace by the
7500: 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e   parser..^Commen
7510: 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79  ts can begin any
7520: 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65  where whitespace
7530: 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20   .can be found, 
7540: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
7550: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
7560: 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20  t span multiple 
7570: 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  lines..</p>..<p>
7580: 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65  ^SQL comments be
7590: 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e  gin with two con
75a0: 73 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61  secutive "-" cha
75b0: 72 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30  racters (ASCII 0
75c0: 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20  x2d).and extend 
75d0: 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  up to and includ
75e0: 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77  ing the next new
75f0: 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28  line character (
7600: 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75  ASCII 0x0a).or u
7610: 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20  ntil the end of 
7620: 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72  input, whichever
7630: 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70   comes first.</p
7640: 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63  >..<p>^C-style c
7650: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69  omments begin.wi
7660: 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65  th "/*" and exte
7670: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
7680: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
7690: 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70  "*/" character p
76a0: 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65  air.or until the
76b0: 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77   end of input, w
76c0: 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66  hichever comes f
76d0: 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20  irst.  ^C-style 
76e0: 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61  comments.can spa
76f0: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
7700: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d  . </p>..<p>^Comm
7710: 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20  ents can appear 
7720: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
7730: 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69  ace can occur,.i
7740: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
7750: 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20  expressions and 
7760: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
7770: 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65   other SQL state
7780: 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  ments..^Comments
7790: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f   do not nest..</
77a0: 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
7800: 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d  n {CREATE INDEX}
7810: 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43   createindex {{C
7820: 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52  REATE INDEX}}..R
7830: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7840: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64  agram create-ind
7850: 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
7860: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49  <p>^The CREATE I
7870: 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  NDEX command con
7880: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79  sists of the key
7890: 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e  words "CREATE IN
78a0: 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79  DEX" followed.by
78b0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
78c0: 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20   new index, the 
78d0: 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68  keyword "ON", th
78e0: 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76  e name of a prev
78f0: 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74  iously.created t
7900: 61 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  able that is to 
7910: 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20  be indexed, and 
7920: 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
7930: 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66  list of names of
7940: 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20  .columns in the 
7950: 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 75  table that are u
7960: 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65  sed for the inde
7970: 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70  x key..If the op
7980: 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61  tional WHERE cla
7990: 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c  use is included,
79a0: 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20   then the index 
79b0: 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69  is a "[partial i
79c0: 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  ndex]"..</p>..<t
79d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
79e0: 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e  descidx} {descen
79f0: 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64  ding indices} {d
7a00: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d  escending index}
7a10: 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64   {descending ind
7a20: 65 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  exes}</tcl>.<p>^
7a30: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  Each column name
7a40: 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
7a50: 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22   by one of the "
7a60: 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b  ASC" or "DESC" k
7a70: 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63  eywords.to indic
7a80: 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20  ate sort order. 
7a90: 20 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72   ^The sort order
7aa0: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
7ab0: 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e  be ignored depen
7ac0: 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61  ding.on the data
7ad0: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  base file format
7ae0: 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75  , and in particu
7af0: 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20  lar the [schema 
7b00: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a  format number]..
7b10: 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63  ^The "legacy" sc
7b20: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20  hema format (1) 
7b30: 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f  ignores index.so
7b40: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
7b50: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
7b60: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28   schema format (
7b70: 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  4) takes index s
7b80: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
7b90: 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65  ccount.  Only ve
7ba0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
7bb0: 20 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72   3.3.0 and later
7bc0: 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64   are able to und
7bd0: 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63  erstand.the desc
7be0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72  ending index for
7bf0: 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69  mat. For compati
7c00: 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20  bility, version 
7c10: 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65  of SQLite betwee
7c20: 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e  n 3.3.0.and 3.7.
7c30: 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79  9 use the legacy
7c40: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62   schema format b
7c50: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20  y default.  The 
7c60: 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72  newer schema for
7c70: 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64  mat is.used by d
7c80: 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f  efault in versio
7c90: 6e 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74  n 3.7.10 and lat
7ca0: 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  er..^The [legacy
7cb0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
7cc0: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
7cd0: 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74   to change set t
7ce0: 68 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61  he specific.beha
7cf0: 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72  vior for any ver
7d00: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c  sion of SQLite.<
7d10: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  /p>..<p>^The COL
7d20: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69  LATE clause opti
7d30: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  onally following
7d40: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d   each column nam
7d50: 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c  e defines a.coll
7d60: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75  ating sequence u
7d70: 73 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74  sed for text ent
7d80: 72 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c  ries in that col
7d90: 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c  umn..^The defaul
7da0: 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  t collating.sequ
7db0: 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c  ence is the coll
7dc0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64  ating sequence d
7dd0: 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20  efined for that 
7de0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43  column in the.[C
7df0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
7e00: 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20  tement.  ^Or if 
7e10: 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  no collating seq
7e20: 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69  uence is otherwi
7e30: 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20  se defined,.the 
7e40: 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20  built-in BINARY 
7e50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
7e60: 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a  ce is used.</p>.
7e70: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
7e80: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
7e90: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  s on the number 
7ea0: 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  of indices that 
7eb0: 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20  can be.attached 
7ec0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
7ed0: 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  e.  ^(The number
7ee0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
7ef0: 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69  n index is .limi
7f00: 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ted to the value
7f10: 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33   set by.[sqlite3
7f20: 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f  _limit]([SQLITE_
7f30: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e  LIMIT_COLUMN],..
7f40: 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .).)^</p>..<tcl>
7f50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71  hd_fragment uniq
7f60: 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e  ueidx {unique in
7f70: 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49  dex}</tcl>.<p>^I
7f80: 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79  f the UNIQUE key
7f90: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74  word appears bet
7fa0: 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20  ween CREATE and 
7fb0: 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69  INDEX then dupli
7fc0: 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69  cate.index entri
7fd0: 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
7fe0: 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70  ed.  ^Any attemp
7ff0: 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75  t to insert a du
8000: 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69  plicate entry.wi
8010: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ll result in an 
8020: 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65  error.  ^For the
8030: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69   purposes of uni
8040: 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c  que indices, all
8050: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65   NULL values.are
8060: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64   considered to d
8070: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c  ifferent from al
8080: 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  l other NULL val
8090: 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ues and are thus
80a0: 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73   unique..This is
80b0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20   one of the two 
80c0: 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72  possible interpr
80d0: 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  etations of the 
80e0: 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a  SQL-92 standard.
80f0: 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e  (the language in
8100: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73   the standard is
8110: 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20   ambiguous) and 
8120: 69 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  is the interpret
8130: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
8140: 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79  y PostgreSQL, My
8150: 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61  SQL, Firebird, a
8160: 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f  nd Oracle.  Info
8170: 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f  rmix and.Microso
8180: 66 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f  ft SQL Server fo
8190: 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69  llow the other i
81a0: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
81b0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f   the standard.</
81c0: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  p>..<p>^If the o
81d0: 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45  ptional IF NOT E
81e0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
81f0: 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74  present and anot
8200: 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74  her index.with t
8210: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
8220: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
8230: 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62  n this command b
8240: 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c  ecomes a no-op.<
8250: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73  /p>..<p>^Indexes
8260: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74   are removed wit
8270: 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45  h the [DROP INDE
8280: 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
8290: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
82a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82e0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
82f0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63  CREATE TABLE} {c
8300: 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52  reatetable} {{CR
8310: 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  EATE TABLE}}..Re
8320: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8330: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
8340: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
8350: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
8360: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
8370: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
8380: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
8390: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
83a0: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
83b0: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
83c0: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
83d0: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
83e0: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
83f0: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
8400: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
8410: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
8420: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
8430: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
8440: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
8450: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
8460: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
8470: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
8480: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
8490: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
84a0: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
84b0: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
84c0: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
84d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
84e0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
84f0: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
8500: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
8510: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
8520: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8530: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
8540: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
8550: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
8560: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
8570: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
8580: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
8590: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
85a0: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
85b0: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
85c0: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
85d0: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
85e0: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
85f0: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
8600: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
8610: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
8620: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
8630: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
8640: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
8650: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
8660: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
8670: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
8680: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
8690: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
86a0: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
86b0: 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69  straints...  <li
86c0: 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65  ><p> Whether the
86d0: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
86e0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
86f0: 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65  e..</ul>..<p>Eve
8700: 72 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ry CREATE TABLE 
8710: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73  statement must s
8720: 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f  pecify a name fo
8730: 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e  r the new table.
8740: 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73  .  ^(Table names
8750: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
8760: 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72   "sqlite_" are r
8770: 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65  eserved for inte
8780: 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69  rnal use. It.  i
8790: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74  s an error to at
87a0: 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20  tempt to create 
87b0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e  a table with a n
87c0: 61 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20  ame that starts 
87d0: 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22  with.  "sqlite_"
87e0: 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26  .)^..<p> ^If a &
87f0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
8800: 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65  &gt; is specifie
8810: 64 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69  d, it must be ei
8820: 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20  ther "main", .  
8830: 22 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e  "temp", or the n
8840: 61 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43  ame of an [ATTAC
8850: 48 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63  H DATABASE|attac
8860: 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e  hed database]. ^
8870: 49 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74  In this case.  t
8880: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
8890: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e  created in the n
88a0: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  amed database. ^
88b0: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
88c0: 20 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b   "TEMPORARY".  k
88d0: 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65  eyword occurs be
88e0: 74 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54  tween the "CREAT
88f0: 45 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74  E" and "TABLE" t
8900: 68 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c  hen the new tabl
8910: 65 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69  e is.  created i
8920: 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  n the temp datab
8930: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
8940: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
8950: 62 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61  both a .  &lt;da
8960: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
8970: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20  and the TEMP or 
8980: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
8990: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20  d, unless the.  
89a0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
89b0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
89c0: 20 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65   ^If no database
89d0: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
89e0: 65 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d  ed and the.  TEM
89f0: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
8a00: 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68   present then th
8a10: 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  e table is creat
8a20: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20  ed in the main. 
8a30: 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a   database...<p>.
8a40: 20 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79    ^It is usually
8a50: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
8a60: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
8a70: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20   new table in a 
8a80: 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20  database that.  
8a90: 61 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73  already contains
8aa0: 20 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20   a table, index 
8ab0: 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73  or view of the s
8ac0: 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76  ame name. ^Howev
8ad0: 65 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46  er, if the.  "IF
8ae0: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
8af0: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
8b00: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
8b10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
8b20: 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74  tement and.  a t
8b30: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20  able or view of 
8b40: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
8b50: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
8b60: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
8b70: 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20  ommand.  simply 
8b80: 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61  has no effect (a
8b90: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  nd no error mess
8ba0: 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29  age is returned)
8bb0: 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73  . ^An error is s
8bc0: 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20  till.  returned 
8bd0: 69 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  if the table can
8be0: 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62  not be created b
8bf0: 65 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69  ecause of an exi
8c00: 73 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65  sting index, eve
8c10: 6e 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20  n .  if the "IF 
8c20: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
8c30: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  se is specified.
8c40: 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20  ..<p>^It is not 
8c50: 61 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61  an error to crea
8c60: 74 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  te a table that 
8c70: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
8c80: 65 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74  e as an .  exist
8c90: 69 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47  ing [CREATE TRIG
8ca0: 47 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c  GER|trigger]...<
8cb0: 70 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65  p>^Tables are re
8cc0: 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  moved using the 
8cd0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
8ce0: 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c  tement.  </p>..<
8cf0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
8d00: 63 72 65 61 74 65 74 61 62 61 73 20 7b 43 52 45  createtabas {CRE
8d10: 41 54 45 20 54 41 42 4c 45 20 41 53 7d 3c 2f 74  ATE TABLE AS}</t
8d20: 63 6c 3e 0a 3c 68 33 3e 43 52 45 41 54 45 20 54  cl>.<h3>CREATE T
8d30: 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45  ABLE ... AS SELE
8d40: 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68  CT Statements</h
8d50: 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52 45 41  3>..<p>^(A "CREA
8d60: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
8d70: 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
8d80: 74 20 63 72 65 61 74 65 73 20 61 6e 64 20 70 6f  t creates and po
8d90: 70 75 6c 61 74 65 73 20 61 20 64 61 74 61 62 61  pulates a databa
8da0: 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64 20 6f  se.table based o
8db0: 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
8dc0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
8dd0: 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74 61 62  ent.)^ ^(The tab
8de0: 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d 65 0a  le has the same.
8df0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
8e00: 73 20 61 73 20 74 68 65 20 72 6f 77 73 20 72 65  s as the rows re
8e10: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
8e20: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
8e30: 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61 63 68  The name of.each
8e40: 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 73   column is the s
8e50: 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ame as the name 
8e60: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
8e70: 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  ding column in t
8e80: 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20 6f 66  he result.set of
8e90: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
8ea0: 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 64  ement.)^ ^(The d
8eb0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
8ec0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 64  each column is d
8ed0: 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74 68 65  etermined.by the
8ee0: 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61 66 66   [expression aff
8ef0: 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
8f00: 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72  rresponding expr
8f10: 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
8f20: 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68 65 20  sult set.of the 
8f30: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
8f40: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f  , as follows:.</
8f50: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74 61 62  p>..<center><tab
8f60: 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20 20 3c  le border=1>.  <
8f70: 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73 69 6f  tr><th>Expressio
8f80: 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c 74 68  n Affinity   <th
8f90: 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72 65 64  >Column Declared
8fa0: 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74 64 3e   Type.  <tr><td>
8fb0: 54 45 58 54 20 20 20 20 20 20 20 20 20 20 20 20  TEXT            
8fc0: 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58 54 22        <td>"TEXT"
8fd0: 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d 45 52  .  <tr><td>NUMER
8fe0: 49 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20  IC              
8ff0: 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c 74 72   <td>"NUM".  <tr
9000: 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20 20 20  ><td>INTEGER    
9010: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
9020: 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 52  INT".  <tr><td>R
9030: 45 41 4c 20 20 20 20 20 20 20 20 20 20 20 20 20  EAL             
9040: 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c 22 0a       <td>"REAL".
9050: 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e 45 20 20    <tr><td>NONE  
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20 73 74  <td>"" (empty st
9080: 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  ring).</table></
9090: 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 28  center>)^..<p>^(
90a0: 41 20 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  A table created 
90b0: 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42  using CREATE TAB
90c0: 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50 52 49  LE AS has no PRI
90d0: 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 0a  MARY KEY and no.
90e0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66 20 61  constraints of a
90f0: 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64 65 66  ny kind. The def
9100: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 65 61  ault value of ea
9110: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c  ch column is NUL
9120: 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74 0a 63  L. The default.c
9130: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
9140: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
9150: 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  n of the new tab
9160: 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29 5e 0a  le is BINARY.)^.
9170: 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72 65 61  .<p>^Tables crea
9180: 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
9190: 20 54 41 42 4c 45 20 41 53 20 61 72 65 20 69 6e   TABLE AS are in
91a0: 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61 74 65  itially populate
91b0: 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77 73 20  d with the.rows 
91c0: 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  of data returned
91d0: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
91e0: 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77 73 20  tatement. ^Rows 
91f0: 61 72 65 20 61 73 73 69 67 6e 65 64 20 63 6f 6e  are assigned con
9200: 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65 6e 64  tiguously.ascend
9210: 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61 6c 75  ing [rowid] valu
9220: 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74  es, starting wit
9230: 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f 72 64  h 1, in the [ord
9240: 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74 68 61  er by|order] tha
9250: 74 20 74 68 65 79 0a 61 72 65 20 72 65 74 75 72  t they.are retur
9260: 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
9270: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74  T statement...<t
9280: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
9290: 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f  tablecoldef} {co
92a0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d  lumn definition}
92b0: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
92c0: 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ions}</tcl>.<h3>
92d0: 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74 69 6f  Column Definitio
92e0: 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e 6c 65  ns</h3>..<p>Unle
92f0: 73 73 20 69 74 20 69 73 20 61 20 43 52 45 41 54  ss it is a CREAT
9300: 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53  E TABLE ... AS S
9310: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
9320: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
9330: 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f 72 20  includes.one or 
9340: 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  more [column-def
9350: 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  |column definiti
9360: 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79  ons], optionally
9370: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6c   followed by a l
9380: 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d 63 6f  ist of.[table-co
9390: 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65 20 63  nstraint|table c
93a0: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20 45 61  onstraints].  Ea
93b0: 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ch column defini
93c0: 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20 6f 66  tion consists of
93d0: 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74 68 65   the.name of the
93e0: 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f 6e 61   column, optiona
93f0: 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
9400: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
9410: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
9420: 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  .then one or mor
9430: 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6c 75  e optional [colu
9440: 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 63 6f  mn-constraint|co
9450: 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73  lumn constraints
9460: 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e 0a 74  ]. Included in.t
9470: 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
9480: 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61   "column constra
9490: 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20 70 75  ints" for the pu
94a0: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20 70 72  rposes of the pr
94b0: 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65 6e 74  evious.statement
94c0: 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41 54 45   are the COLLATE
94d0: 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63 6c 61   and DEFAULT cla
94e0: 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f 75 67  uses, even thoug
94f0: 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20  h these are not 
9500: 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61 69 6e  really.constrain
9510: 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73 65 20  ts in the sense 
9520: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
9530: 20 72 65 73 74 72 69 63 74 20 74 68 65 20 64 61   restrict the da
9540: 74 61 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  ta that the tabl
9550: 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e 20 54  e may.contain. T
9560: 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74 72 61  he other constra
9570: 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c 4c 2c  ints - NOT NULL,
9580: 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45 2c 20   CHECK, UNIQUE, 
9590: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 0a  PRIMARY KEY and.
95a0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
95b0: 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f 73 65  traints - impose
95c0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e   restrictions on
95d0: 20 74 68 65 20 74 61 62 6c 65 73 20 64 61 74 61   the tables data
95e0: 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a 64 65  , and are are.de
95f0: 73 63 72 69 62 65 64 20 75 6e 64 65 72 20 5b 63  scribed under [c
9600: 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c 20 44  onstraints|SQL D
9610: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 5d  ata Constraints]
9620: 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55 6e 6c   below...<p>^Unl
9630: 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64 61 74  ike most SQL dat
9640: 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65 20 64  abases, SQLite d
9650: 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74  oes not restrict
9660: 20 74 68 65 20 74 79 70 65 20 6f 66 20 64 61 74   the type of dat
9670: 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20 69 6e  a that.may be in
9680: 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  serted into a co
9690: 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20 74 68  lumn based on th
96a0: 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c 61 72  e columns declar
96b0: 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65 61 64  ed type. Instead
96c0: 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 5b 64  ,.SQLite uses [d
96d0: 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d 2e 20  ynamic typing]. 
96e0: 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79  ^The declared ty
96f0: 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  pe of a column i
9700: 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65 72 6d  s used to.determ
9710: 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e 69 74  ine the [affinit
9720: 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  y] of the column
9730: 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 44   only...<p>The D
9740: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 73 70  EFAULT clause sp
9750: 65 63 69 66 69 65 73 20 61 20 64 65 66 61 75 6c  ecifies a defaul
9760: 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 66  t value to use f
9770: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66  or the column if
9780: 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65 78 70   no.value is exp
9790: 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64 65 64  licitly provided
97a0: 20 62 79 20 74 68 65 20 75 73 65 72 20 77 68 65   by the user whe
97b0: 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45  n doing an [INSE
97c0: 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65 0a 69  RT]. ^If there.i
97d0: 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20 44 45  s no explicit DE
97e0: 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61 74 74  FAULT clause att
97f0: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
9800: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68  n definition, th
9810: 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c 74 20  en the .default 
9820: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
9830: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41  umn is NULL. ^(A
9840: 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46 41 55  n explicit DEFAU
9850: 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70  LT clause may sp
9860: 65 63 69 66 79 0a 74 68 61 74 20 74 68 65 20 64  ecify.that the d
9870: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
9880: 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63  NULL, a string c
9890: 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20  onstant, a blob 
98a0: 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e  constant, a.sign
98b0: 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e  ed-number, or an
98c0: 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  y constant expre
98d0: 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69  ssion enclosed i
98e0: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 20 41  n parentheses. A
98f0: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d  .default value m
9900: 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f  ay also be one o
9910: 66 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61  f the special ca
9920: 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b  se-independent k
9930: 65 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f  eywords.CURRENT_
9940: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
9950: 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  TE or CURRENT_TI
9960: 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20  MESTAMP.)^ ^For 
9970: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
9980: 74 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75  the.DEFAULT clau
9990: 73 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f  se, an expressio
99a0: 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
99b0: 63 6f 6e 73 74 61 6e 74 20 69 66 20 69 74 20 64  constant if it d
99c0: 6f 65 73 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  oes.contains no 
99d0: 73 75 62 2d 71 75 65 72 69 65 73 2c 20 63 6f 6c  sub-queries, col
99e0: 75 6d 6e 20 6f 72 20 74 61 62 6c 65 20 72 65 66  umn or table ref
99f0: 65 72 65 6e 63 65 73 2c 20 5b 62 6f 75 6e 64 20  erences, [bound 
9a00: 70 61 72 61 6d 65 74 65 72 73 5d 2c 0a 6f 72 20  parameters],.or 
9a10: 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
9a20: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62  enclosed in doub
9a30: 6c 65 2d 71 75 6f 74 65 73 20 69 6e 73 74 65 61  le-quotes instea
9a40: 64 20 6f 66 20 73 69 6e 67 6c 65 2d 71 75 6f 74  d of single-quot
9a50: 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20 74  es...<p>^(Each t
9a60: 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73  ime a row is ins
9a70: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74  erted into the t
9a80: 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53 45 52  able by an INSER
9a90: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
9aa0: 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69   .does not provi
9ab0: 64 65 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75  de explicit valu
9ac0: 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65  es for all table
9ad0: 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c   columns the val
9ae0: 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68  ues stored in.th
9af0: 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65  e new row are de
9b00: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69  termined by thei
9b10: 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  r default values
9b20: 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  )^, as follows:.
9b30: 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ul>.  <li><p>^
9b40: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
9b50: 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  alue of the colu
9b60: 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  mn is a constant
9b70: 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f   NULL, text, blo
9b80: 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65 64 2d  b or.    signed-
9b90: 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68  number value, th
9ba0: 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20 69 73  en that value is
9bb0: 20 75 73 65 64 20 64 69 72 65 63 74 6c 79 20 69   used directly i
9bc0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9bd0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9be0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9bf0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  f a column is an
9c00: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70   expression in p
9c10: 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e  arentheses, then
9c20: 0a 20 20 20 20 74 68 65 20 65 78 70 72 65 73 73  .    the express
9c30: 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
9c40: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 72   once for each r
9c50: 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20  ow inserted and 
9c60: 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20  the results.    
9c70: 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20  used in the new 
9c80: 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  row...  <li><p>^
9c90: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
9ca0: 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  alue of a column
9cb0: 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   is CURRENT_TIME
9cc0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
9cd0: 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49  r.    CURRENT_TI
9ce0: 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68  MESTAMP, then th
9cf0: 65 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20  e value used in 
9d00: 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 61  the new row is a
9d10: 20 74 65 78 74 0a 20 20 20 20 72 65 70 72 65 73   text.    repres
9d20: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
9d30: 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65  current UTC date
9d40: 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 46   and/or time. ^F
9d50: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  or CURRENT_TIME,
9d60: 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20   the.    format 
9d70: 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  of the value is 
9d80: 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72  "HH:MM:SS". ^For
9d90: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22   CURRENT_DATE, "
9da0: 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68  YYYY-MM-DD". ^Th
9db0: 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66 6f 72  e.    format for
9dc0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
9dd0: 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44  MP is "YYYY-MM-D
9de0: 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75  D HH:MM:SS"..</u
9df0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  l>..<p>^The COLL
9e00: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
9e10: 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  fies the name of
9e20: 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65   a [collating se
9e30: 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65 20 61  quence] to use a
9e40: 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  s.the default co
9e50: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
9e60: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e   for the column.
9e70: 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20   ^If no COLLATE 
9e80: 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63 69 66  clause is.specif
9e90: 69 65 64 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ied, the default
9ea0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9eb0: 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59 5d 2e  nce is [BINARY].
9ec0: 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
9ed0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
9ee0: 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65   table is limite
9ef0: 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45  d by the [SQLITE
9f00: 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d  _MAX_COLUMN].com
9f10: 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65  pile-time parame
9f20: 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20 72  ter. ^A single r
9f30: 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61  ow of a table ca
9f40: 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20  nnot store more 
9f50: 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
9f60: 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f  _LENGTH] bytes o
9f70: 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f 66  f data. ^Both of
9f80: 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61   these limits ca
9f90: 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a  n be lowered at.
9fa0: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
9fb0: 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  e [sqlite3_limit
9fc0: 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
9fd0: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ace.</p>..<tcl>h
9fe0: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e 73  d_fragment {cons
9ff0: 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74 72  traints} {constr
a000: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  aints}</tcl>.<h3
a010: 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72  >SQL Data Constr
a020: 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74 63 6c  aints</h3>..<tcl
a030: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 70 72 69  >hd_fragment pri
a040: 6d 6b 65 79 63 6f 6e 73 74 20 7b 50 52 49 4d 41  mkeyconst {PRIMA
a050: 52 59 20 4b 45 59 7d 20 7b 50 52 49 4d 41 52 59  RY KEY} {PRIMARY
a060: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 7d   KEY constraint}
a070: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20  </tcl>.<p>^Each 
a080: 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  table in SQLite 
a090: 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74  may have at most
a0a0: 20 6f 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59 20   one <b>PRIMARY 
a0b0: 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68 65  KEY</b>. ^If the
a0c0: 0a 20 20 6b 65 79 77 6f 72 64 73 20 50 52 49 4d  .  keywords PRIM
a0d0: 41 52 59 20 4b 45 59 20 61 72 65 20 61 64 64 65  ARY KEY are adde
a0e0: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
a0f0: 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74  finition, then t
a100: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 20  he primary key. 
a110: 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63   for the table c
a120: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 61 74 20  onsists of that 
a130: 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e  single column. ^
a140: 4f 72 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59  Or, if a PRIMARY
a150: 20 4b 45 59 20 63 6c 61 75 73 65 20 0a 20 20 69   KEY clause .  i
a160: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61  s specified as a
a170: 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69   [table-constrai
a180: 6e 74 5d 2c 20 74 68 65 6e 20 74 68 65 20 70 72  nt], then the pr
a190: 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65  imary key of the
a1a0: 20 74 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73 74   table.  consist
a1b0: 73 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66  s of the list of
a1c0: 20 63 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69   columns specifi
a1d0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
a1e0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  e PRIMARY KEY cl
a1f0: 61 75 73 65 2e 0a 20 20 5e 41 6e 20 65 72 72 6f  ause..  ^An erro
a200: 72 20 69 73 20 72 61 69 73 65 64 20 69 66 20 6d  r is raised if m
a210: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49  ore than one PRI
a220: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
a230: 61 70 70 65 61 72 73 20 69 6e 20 61 0a 20 20 43  appears in a.  C
a240: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
a250: 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 50 52 49  ement.  ^The PRI
a260: 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 70 74 69  MARY KEY is opti
a270: 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72  onal for ordinar
a280: 79 20 74 61 62 6c 65 73 0a 20 20 62 75 74 20 69  y tables.  but i
a290: 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 5b  s required for [
a2a0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
a2b0: 61 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20  ables...<p>If a 
a2c0: 74 61 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67  table has a sing
a2d0: 6c 65 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72  le column primar
a2e0: 79 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 65  y key and the de
a2f0: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
a300: 68 61 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20  hat.  column is 
a310: 22 49 4e 54 45 47 45 52 22 20 61 6e 64 20 74 68  "INTEGER" and th
a320: 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61  e table is not a
a330: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
a340: 20 74 61 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74   table,.  then t
a350: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f  he column is kno
a360: 77 6e 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45  wn as an [INTEGE
a370: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
a380: 20 20 53 65 65 20 62 65 6c 6f 77 20 66 6f 72 20    See below for 
a390: 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  a description of
a3a0: 20 74 68 65 20 73 70 65 63 69 61 6c 20 70 72 6f   the special pro
a3b0: 70 65 72 74 69 65 73 20 61 6e 64 20 62 65 68 61  perties and beha
a3c0: 76 69 6f 72 73 0a 20 20 61 73 73 6f 63 69 61 74  viors.  associat
a3d0: 65 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45  ed with an [INTE
a3e0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
a3f0: 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20  ...<p>^Each row 
a400: 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  in a table with 
a410: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75  a primary key mu
a420: 73 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65  st have a unique
a430: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f   combination.  o
a440: 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20  f values in its 
a450: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
a460: 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  mns. ^For the pu
a470: 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d  rposes of determ
a480: 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71  ining.  the uniq
a490: 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72  ueness of primar
a4a0: 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55  y key values, NU
a4b0: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
a4c0: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
a4d0: 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68  t from.  all oth
a4e0: 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75  er values, inclu
a4f0: 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73  ding other NULLs
a500: 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54  . ^If an [INSERT
a510: 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20  ] or [UPDATE].  
a520: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
a530: 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ts to modify the
a540: 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73   table content s
a550: 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f  o that two or mo
a560: 72 65 20 72 6f 77 73 0a 20 20 68 61 76 65 20 69  re rows.  have i
a570: 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61 72 79  dentical primary
a580: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 74 68 61   key values, tha
a590: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
a5a0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70  t violation...<p
a5b0: 3e 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  > According to t
a5c0: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c  he SQL standard,
a5d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f   PRIMARY KEY sho
a5e0: 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79  uld always imply
a5f0: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66   NOT NULL..  Unf
a600: 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20  ortunately, due 
a610: 74 6f 20 61 20 62 75 67 20 69 6e 20 73 6f 6d 65  to a bug in some
a620: 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 2c   early versions,
a630: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68 65   this is not the
a640: 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69 74  .  case in SQLit
a650: 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 63  e. ^Unless the c
a660: 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e 54  olumn is an [INT
a670: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a680: 5d 20 6f 72 0a 20 20 74 68 65 20 74 61 62 6c 65  ] or.  the table
a690: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
a6a0: 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f 72 20 74  OWID] table or t
a6b0: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63  he column is dec
a6c0: 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c 4c 2c 0a  lared NOT NULL,.
a6d0: 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20    SQLite allows 
a6e0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61  NULL values in a
a6f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
a700: 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20 63 6f 75  umn.  SQLite cou
a710: 6c 64 20 62 65 20 66 69 78 65 64 20 74 6f 0a 20  ld be fixed to. 
a720: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
a730: 73 74 61 6e 64 61 72 64 2c 20 62 75 74 20 64 6f  standard, but do
a740: 69 6e 67 20 73 6f 20 6d 69 67 68 74 20 62 72 65  ing so might bre
a750: 61 6b 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63  ak legacy applic
a760: 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e 63 65 2c  ations..  Hence,
a770: 20 69 74 20 68 61 73 20 62 65 65 6e 20 64 65 63   it has been dec
a780: 69 64 65 64 20 74 6f 20 6d 65 72 65 6c 79 20 64  ided to merely d
a790: 6f 63 75 6d 65 6e 74 20 74 68 65 20 66 61 63 74  ocument the fact
a7a0: 20 74 68 61 74 20 53 51 4c 69 74 65 0a 20 20 61   that SQLite.  a
a7b0: 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20 69 6e  llowing NULLs in
a7c0: 20 6d 6f 73 74 20 50 52 49 4d 41 52 59 20 4b 45   most PRIMARY KE
a7d0: 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74 63 6c  Y columns...<tcl
a7e0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69  >hd_fragment uni
a7f0: 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51 55 45  queconst {UNIQUE
a800: 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73 74 72  } {unique constr
a810: 61 69 6e 74 7d 20 7b 55 4e 49 51 55 45 20 63 6f  aint} {UNIQUE co
a820: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
a830: 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55 45 3c  <p>^A <b>UNIQUE<
a840: 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  /b> constraint i
a850: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 50  s similar to a P
a860: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
a870: 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a 20 20  raint, except.  
a880: 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20 74 61  that a single ta
a890: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61 6e 79  ble may have any
a8a0: 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49 51 55   number of UNIQU
a8b0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 5e  E constraints. ^
a8c0: 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49 51 55  For each.  UNIQU
a8d0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20  E constraint on 
a8e0: 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63 68 20  the table, each 
a8f0: 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  row must contain
a900: 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e   a unique combin
a910: 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65  ation.  of value
a920: 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s in the columns
a930: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
a940: 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  he UNIQUE constr
a950: 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20 74 68  aint. .  ^For th
a960: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e  e purposes of UN
a970: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
a980: 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20 20  , NULL values.  
a990: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64  are considered d
a9a0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
a9b0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69   other values, i
a9c0: 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e  ncluding other N
a9d0: 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f  ULLs...<p>^In mo
a9e0: 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51 55 45  st cases, UNIQUE
a9f0: 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
aa00: 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  .  constraints a
aa10: 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  re implemented b
aa20: 79 20 63 72 65 61 74 69 6e 67 20 61 20 75 6e 69  y creating a uni
aa30: 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74 68 65  que index in the
aa40: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 28 54 68   database..  (Th
aa50: 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 72 65  e exceptions are
aa60: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
aa70: 59 20 4b 45 59 5d 20 61 6e 64 20 50 52 49 4d 41  Y KEY] and PRIMA
aa80: 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20 5b 57  RY KEYs on .  [W
aa90: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
aaa0: 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65 2c 20  bles.).  Hence, 
aab0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63  the following sc
aac0: 68 65 6d 61 73 20 61 72 65 20 6c 6f 67 69 63 61  hemas are logica
aad0: 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  lly equivalent:.
aae0: 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  .  <ol>.  <li><p
aaf0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  >CREATE TABLE t1
ab00: 28 61 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20  (a, b UNIQUE);. 
ab10: 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54   <li><p>CREATE T
ab20: 41 42 4c 45 20 74 31 28 61 2c 20 62 20 50 52 49  ABLE t1(a, b PRI
ab30: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c 6c 69  MARY KEY);.  <li
ab40: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
ab50: 20 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e 0a 20   t1(a, b);<br>. 
ab60: 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 55          CREATE U
ab70: 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31 62 20  NIQUE INDEX t1b 
ab80: 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c  ON t1(b);.  </ol
ab90: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
aba0: 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43  ent {ckconst} {C
abb0: 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e  HECK} {CHECK con
abc0: 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20  straint} {CHECK 
abd0: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63  constraints}</tc
abe0: 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45  l>.<p>^(A <b>CHE
abf0: 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  CK</b> constrain
ac00: 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  t may be attache
ac10: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
ac20: 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70  finition or.  sp
ac30: 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62  ecified as a tab
ac40: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49  le constraint. I
ac50: 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d 61  n practice it ma
ac60: 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63  kes no differenc
ac70: 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69  e.)^ ^(Each.  ti
ac80: 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20  me a new row is 
ac90: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
aca0: 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78  e table or an ex
acb0: 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70  isting row is up
acc0: 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70  dated,.  the exp
acd0: 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74  ression associat
ace0: 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48 45  ed with each CHE
acf0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  CK constraint is
ad00: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20   evaluated and. 
ad10: 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52   cast to a NUMER
ad20: 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  IC value in the 
ad30: 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43  same way as a [C
ad40: 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  AST expression].
ad50: 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c   If the .  resul
ad60: 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67  t is zero (integ
ad70: 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
ad80: 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74  al value 0.0), t
ad90: 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
ada0: 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73  .  violation has
adb0: 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66   occurred.)^ ^If
adc0: 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65   the CHECK expre
add0: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
ade0: 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e  to NULL, or.  an
adf0: 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f  y other non-zero
ae00: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f   value, it is no
ae10: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
ae20: 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65  iolation..  ^The
ae30: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61   expression of a
ae40: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
ae50: 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69  t may not contai
ae60: 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c  n a subquery...<
ae70: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
ae80: 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b  {notnullconst} {
ae90: 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e  NOT NULL} {NOT N
aea0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  ULL constraint}<
aeb0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e  /tcl>.<p>^A <b>N
aec0: 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73  OT NULL</b> cons
aed0: 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  traint may only 
aee0: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
aef0: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
af00: 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66  on,.  not specif
af10: 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63  ied as a table c
af20: 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20  onstraint.  Not 
af30: 73 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28  surprisingly, ^(
af40: 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e  a NOT NULL.  con
af50: 73 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73  straint dictates
af60: 20 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69   that the associ
af70: 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20  ated column may 
af80: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55  not contain a NU
af90: 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65  LL value..  Atte
afa0: 6d 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68  mpting to set th
afb0: 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74  e column value t
afc0: 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65  o NULL when inse
afd0: 72 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20  rting a new row 
afe0: 6f 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e  or.  updating an
aff0: 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61   existing one ca
b000: 75 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  uses a constrain
b010: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a  t violation.)^..
b020: 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61  <p>Exactly how a
b030: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
b040: 61 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77  ation is dealt w
b050: 69 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ith is determine
b060: 64 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66  d by the.  [conf
b070: 6c 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73  lict clause|cons
b080: 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
b090: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
b0a0: 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50  ithm]. Each .  P
b0b0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
b0c0: 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64  UE, NOT NULL and
b0d0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
b0e0: 74 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20  t has a default 
b0f0: 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c  conflict.  resol
b100: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
b110: 20 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55   ^PRIMARY KEY, U
b120: 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
b130: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d  LL constraints m
b140: 61 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74  ay be.  explicit
b150: 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65  ly assigned a de
b160: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
b170: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
b180: 74 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  thm by including
b190: 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  .  a [conflict-c
b1a0: 6c 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20  lause] in their 
b1b0: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72  definitions. ^Or
b1c0: 2c 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  , if a constrain
b1d0: 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64  t definition.  d
b1e0: 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  oes not include 
b1f0: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
b200: 73 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43  se] or it is a C
b210: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c  HECK constraint,
b220: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63   the default.  c
b230: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
b240: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
b250: 41 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e  ABORT. ^Differen
b260: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
b270: 74 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20  thin the.  same 
b280: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64  table may have d
b290: 69 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74  ifferent default
b2a0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
b2b0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e  tion algorithms.
b2c0: 20 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69   See.  the secti
b2d0: 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f  on titled [ON CO
b2e0: 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
b2f0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
b300: 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  on...<tcl>hd_fra
b310: 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54  gment rowid {INT
b320: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b330: 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74  } ROWID rowid</t
b340: 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61  cl>.<h3>ROWIDs a
b350: 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  nd the INTEGER P
b360: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a  RIMARY KEY</h3>.
b370: 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20  .<p>^Except for 
b380: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
b390: 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73  tables, all rows
b3a0: 20 77 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74   within SQLite t
b3b0: 61 62 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d  ables.have a 64-
b3c0: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
b3d0: 65 72 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71  er key that uniq
b3e0: 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
b3f0: 74 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69  the row within i
b400: 74 73 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69  ts table..This i
b410: 6e 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c  nteger is usuall
b420: 79 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f  y.called the "ro
b430: 77 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64  wid". ^The rowid
b440: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63   value can be ac
b450: 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65  cessed using one
b460: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a   of the special.
b470: 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74  case-independent
b480: 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20   names "rowid", 
b490: 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69  "oid", or "_rowi
b4a0: 64 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  d_" in place of 
b4b0: 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e  a column name..^
b4c0: 49 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61  If a table conta
b4d0: 69 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e  ins a user defin
b4e0: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20  ed column named 
b4f0: 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f  "rowid", "oid" o
b500: 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65  r "_rowid_",.the
b510: 6e 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61  n that name alwa
b520: 79 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78  ys refers the ex
b530: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
b540: 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e  d column and can
b550: 6e 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72  not be used.to r
b560: 65 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65  etrieve the inte
b570: 67 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e  ger rowid value.
b580: 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28  ..<p>The rowid (
b590: 61 6e 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f  and "oid" and "_
b5a0: 72 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74  rowid_") is omit
b5b0: 74 65 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20  ted in [WITHOUT 
b5c0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57  ROWID] tables..W
b5d0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
b5e0: 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61  les are only ava
b5f0: 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65  ilable in SQLite
b600: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d   [version 3.8.2]
b610: 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61   and later..A ta
b620: 62 6c 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74  ble that lacks t
b630: 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he WITHOUT ROWID
b640: 20 63 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65   clause is calle
b650: 64 20 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65  d a "rowid table
b660: 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20  "...<p>The data 
b670: 66 6f 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73  for rowid tables
b680: 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20   is stored as a 
b690: 42 2d 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B-Tree structure
b6a0: 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20   containing.one 
b6b0: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 74  entry for each t
b6c0: 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20  able row, using 
b6d0: 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
b6e0: 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73  as the key. This
b6f0: 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72   means that.retr
b700: 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e  ieving or sortin
b710: 67 20 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77  g records by row
b720: 69 64 20 69 73 20 66 61 73 74 2e 20 53 65 61 72  id is fast. Sear
b730: 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f  ching for a reco
b740: 72 64 20 77 69 74 68 20 61 0a 73 70 65 63 69 66  rd with a.specif
b750: 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72  ic rowid, or for
b760: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74   all records wit
b770: 68 20 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20  h rowids within 
b780: 61 20 73 70 65 63 69 66 69 65 64 20 72 61 6e 67  a specified rang
b790: 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63  e is.around twic
b7a0: 65 20 61 73 20 66 61 73 74 20 61 73 20 61 20 73  e as fast as a s
b7b0: 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61  imilar search ma
b7c0: 64 65 20 62 79 20 73 70 65 63 69 66 79 69 6e 67  de by specifying
b7d0: 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41   any other PRIMA
b7e0: 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65  RY.KEY or indexe
b7f0: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57  d value...<p> ^W
b800: 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f  ith one exceptio
b810: 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69  n noted below, i
b820: 66 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20  f a rowid table 
b830: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
b840: 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a  y that consists.
b850: 6f 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  of a single colu
b860: 6d 6e 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  mn and the decla
b870: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
b880: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
b890: 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74  GER" in any mixt
b8a0: 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64  ure of.upper and
b8b0: 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65   lower case, the
b8c0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63  n the column bec
b8d0: 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
b8e0: 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63  r the rowid. Suc
b8f0: 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73  h a.column is us
b900: 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74  ually referred t
b910: 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72  o as an "integer
b920: 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41   primary key". A
b930: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
b940: 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73  umn.only becomes
b950: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
b960: 61 72 79 20 6b 65 79 20 69 66 20 74 68 65 20 64  ary key if the d
b970: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d  eclared type nam
b980: 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e  e is exactly."IN
b990: 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20  TEGER".  ^Other 
b9a0: 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d  integer type nam
b9b0: 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72  es like "INT" or
b9c0: 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48   "BIGINT" or "SH
b9d0: 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20  ORT INTEGER".or 
b9e0: 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45  "UNSIGNED INTEGE
b9f0: 52 22 20 63 61 75 73 65 73 20 74 68 65 20 70 72  R" causes the pr
ba00: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
ba10: 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
ba20: 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20   ordinary.table 
ba30: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65  column with inte
ba40: 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61  ger [affinity] a
ba50: 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  nd a unique inde
ba60: 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69  x, not as an ali
ba70: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
ba80: 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70  ...<p> The excep
ba90: 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61  tion mentioned a
baa0: 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69 66  bove is that ^if
bab0: 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e   the declaration
bac0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74   of a column wit
bad0: 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  h.declared type 
bae0: 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64  "INTEGER" includ
baf0: 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b  es an "PRIMARY K
bb00: 45 59 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c  EY DESC" clause,
bb10: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63   it does not.bec
bb20: 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ome an alias for
bb30: 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69   the rowid and i
bb40: 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64  s not classified
bb50: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70   as an integer p
bb60: 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73  rimary key..This
bb70: 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79   quirk is not by
bb80: 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64   design. It is d
bb90: 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65  ue to a bug in e
bba0: 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66  arly versions of
bbb0: 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78   SQLite..But fix
bbc0: 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c  ing the bug coul
bbd0: 64 20 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b  d result in back
bbe0: 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62  wards incompatib
bbf0: 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20  ilities..Hence, 
bc00: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68  the original beh
bc10: 61 76 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72  avior has been r
bc20: 65 74 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63  etained (and doc
bc30: 75 6d 65 6e 74 65 64 29 20 62 65 63 61 75 73 65  umented) because
bc40: 20 6f 64 64 0a 62 65 68 61 76 69 6f 72 20 69 6e   odd.behavior in
bc50: 20 61 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69   a corner case i
bc60: 73 20 66 61 72 20 62 65 74 74 65 72 20 74 68 61  s far better tha
bc70: 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n a compatibilit
bc80: 79 20 62 72 65 61 6b 2e 20 20 54 68 69 73 20 6d  y break.  This m
bc90: 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20  eans.that ^(the 
bca0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
bcb0: 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
bcc0: 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65  ns all cause the
bcd0: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62   column "x" to b
bce0: 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74  e an.alias for t
bcf0: 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74  he rowid (an int
bd00: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
bd10: 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  ):..<ul>.<li><tt
bd20: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
bd30: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
bd40: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
bd50: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
bd60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
bd70: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
bd80: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
bd90: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
bda0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
bdb0: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
bdc0: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
bdd0: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
bde0: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68  >)^..<p>But ^(th
bdf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c  e following decl
be00: 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  aration does not
be10: 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62   result in "x" b
be20: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
be30: 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c  r.the rowid:.<ul
be40: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
be50: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
be60: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
be70: 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ESC, y, z);</tt>
be80: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f  .</ul>)^..<p>^Ro
be90: 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62  wid values may b
bea0: 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  e modified using
beb0: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
bec0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65  ment in the same
bed0: 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65  .way as any othe
bee0: 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  r column value c
bef0: 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67  an, either using
bf00: 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c   one of the buil
bf10: 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72  t-in aliases.("r
bf20: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
bf30: 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79  "_rowid_") or by
bf40: 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
bf50: 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
bf60: 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65  teger.primary ke
bf70: 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61  y. ^Similarly, a
bf80: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
bf90: 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61  nt may provide a
bfa0: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
bfb0: 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65   the.rowid for e
bfc0: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
bfd0: 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  . ^(Unlike norma
bfe0: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
bff0: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  , an integer pri
c000: 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69  mary.key or rowi
c010: 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f  d column must co
c020: 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61  ntain integer va
c030: 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72  lues. Integer pr
c040: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
c050: 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  id.columns are n
c060: 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20  ot able to hold 
c070: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
c080: 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20  alues, strings, 
c090: 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
c0a0: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  )^..<p>^If an UP
c0b0: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
c0c0: 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
c0d0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
c0e0: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
c0f0: 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20  olumn.to a NULL 
c100: 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
c110: 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72  r to a string or
c120: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
c130: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
c140: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
c150: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
c160: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
c170: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
c180: 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
c190: 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20  ent.is aborted. 
c1a0: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
c1b0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
c1c0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f   to insert a blo
c1d0: 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74  b value, or a st
c1e0: 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c  ring.or real val
c1f0: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
c200: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
c210: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
c220: 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74  eger into an.int
c230: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
c240: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
c250: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
c260: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
c270: 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61  curs and the.sta
c280: 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65  tement is aborte
c290: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e  d...<p>^If an IN
c2a0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
c2b0: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
c2c0: 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  t a NULL value i
c2d0: 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69  nto a rowid or.i
c2e0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
c2f0: 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73  ey column, the s
c300: 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e  ystem chooses an
c310: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
c320: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
c330: 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  id automatically
c340: 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64 65 73  . A detailed des
c350: 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20  cription of how 
c360: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20  this is done is 
c370: 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66  provided.<a href
c380: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
c390: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
c3a0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70  /p>..<p>^(The [p
c3b0: 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20  arent key] of a 
c3c0: 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
c3d0: 73 74 72 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20  straint] is not 
c3e0: 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73 65 20 74  allowed to.use t
c3f0: 68 65 20 72 6f 77 69 64 2e 20 20 54 68 65 20 70  he rowid.  The p
c400: 61 72 65 6e 74 20 6b 65 79 20 6d 75 73 74 20 75  arent key must u
c410: 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  sed named column
c420: 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c  s only.)^</p>..<
c430: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
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 23 23 23  ################
c480: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
c490: 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65  ATE TRIGGER} cre
c4a0: 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43 52 45  atetrigger {{CRE
c4b0: 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ATE TRIGGER}}..R
c4c0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
c4d0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
c4e0: 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  gger-stmt.</tcl>
c4f0: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
c500: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
c510: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  nt is used to ad
c520: 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74 68  d triggers to th
c530: 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68 65  e .database sche
c540: 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72  ma. ^Triggers ar
c550: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61  e database opera
c560: 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20  tions .that are 
c570: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65  automatically pe
c580: 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73  rformed when a s
c590: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
c5a0: 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20  e event.occurs. 
c5b0: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69   </p>..<p>^A tri
c5c0: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
c5d0: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
c5e0: 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45  enever a [DELETE
c5f0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20  ], [INSERT],.or 
c600: 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61  [UPDATE] of a.pa
c610: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
c620: 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20  e table occurs, 
c630: 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b  or whenever an [
c640: 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f  UPDATE] occurs o
c650: 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n.on one or more
c660: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
c670: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f  ns of a table.</
c680: 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20  p>..<p>^At this 
c690: 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70  time SQLite supp
c6a0: 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41  orts only FOR EA
c6b0: 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c  CH ROW triggers,
c6c0: 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54   not FOR EACH.ST
c6d0: 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73  ATEMENT triggers
c6e0: 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69  . ^Hence explici
c6f0: 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20 46  tly specifying F
c700: 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f  OR EACH ROW is o
c710: 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41  ptional..^FOR EA
c720: 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74  CH ROW implies t
c730: 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61 74  hat the SQL stat
c740: 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
c750: 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a   in the trigger.
c760: 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
c770: 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  (depending on th
c780: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66  e WHEN clause) f
c790: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
c7a0: 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72   row being.inser
c7b0: 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20  ted, updated or 
c7c0: 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 73  deleted by the s
c7d0: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
c7e0: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
c7f0: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
c800: 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c  Both the WHEN cl
c810: 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72 69  ause and the tri
c820: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79  gger actions may
c830: 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73   access elements
c840: 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69   of .the row bei
c850: 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c  ng inserted, del
c860: 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 20  eted or updated 
c870: 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73  using references
c880: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e   of the form ."N
c890: 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  EW.<i>column-nam
c8a0: 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e  e</i>" and "OLD.
c8b0: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
c8c0: 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f  i>", where.<i>co
c8d0: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  lumn-name</i> is
c8e0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
c8f0: 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74  olumn from the t
c900: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74 72  able that the tr
c910: 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61  igger.is associa
c920: 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c  ted with.)^ ^(OL
c930: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
c940: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
c950: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
c960: 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20  s on.events for 
c970: 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72  which they are r
c980: 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c  elevant, as foll
c990: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  ows:</p>..<table
c9a0: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
c9b0: 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c  dding=10>.<tr>.<
c9c0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
c9d0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
c9e0: 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52  dth=120><i>INSER
c9f0: 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  T</i></td>.<td v
ca00: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
ca10: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
ca20: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
ca30: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
ca40: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
ca50: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
ca60: 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >UPDATE</i></td>
ca70: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
ca80: 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65  ">NEW and OLD re
ca90: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
caa0: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
cab0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
cac0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
cad0: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44  " width=120><i>D
cae0: 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  ELETE</i></td>.<
caf0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
cb00: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
cb10: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
cb20: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70  tr>.</table>.</p
cb30: 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48  >)^..<p>^If a WH
cb40: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
cb50: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
cb60: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
cb70: 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65  ied.are only exe
cb80: 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66  cuted for rows f
cb90: 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45  or which the WHE
cba0: 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75 65  N.clause is true
cbb0: 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c  . ^If no WHEN cl
cbc0: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
cbd0: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
cbe0: 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65  ents.are execute
cbf0: 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c  d for all rows.<
cc00: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46  /p>..<p>^The BEF
cc10: 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79  ORE or AFTER key
cc20: 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20  word determines 
cc30: 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72  when the trigger
cc40: 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65   actions.will be
cc50: 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69   executed relati
cc60: 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74  ve to the insert
cc70: 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f  ion, modificatio
cc80: 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20  n or removal of 
cc90: 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72  the.associated r
cca0: 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20  ow.</p>..<p>^An 
ccb0: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
ccc0: 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63  ause may be spec
ccd0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
cce0: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20   an [UPDATE] or 
ccf0: 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20  [INSERT].action 
cd00: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
cd10: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a  of the trigger..
cd20: 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b  ^However if an [
cd30: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61  ON CONFLICT] cla
cd40: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
cd50: 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65   as part of .the
cd60: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
cd70: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
cd80: 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e  o fire, then con
cd90: 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70  flict handling.p
cda0: 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74  olicy of the out
cdb0: 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  er statement is 
cdc0: 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70  used instead.</p
cdd0: 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20  >..<p>^Triggers 
cde0: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
cdf0: 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20  y [DROP TRIGGER 
ce00: 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20  | dropped].when 
ce10: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
ce20: 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61  hey are .associa
ce30: 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c 69  ted with (the <i
ce40: 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  >table-name</i> 
ce50: 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50  table) is .[DROP
ce60: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
ce70: 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20  ].  ^However if 
ce80: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
ce90: 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74  ons reference.ot
cea0: 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20  her tables, the 
ceb0: 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64  trigger is not d
cec0: 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69  ropped or modifi
ced0: 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65  ed if those othe
cee0: 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52  r.tables are [DR
cef0: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
cf00: 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41  ed] or [ALTER TA
cf10: 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e  BLE | modified].
cf20: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
cf30: 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75  rs are removed u
cf40: 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54  sing the [DROP T
cf50: 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
cf60: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74  t.</p>..<h3>Synt
cf70: 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20  ax Restrictions 
cf80: 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54  On UPDATE, DELET
cf90: 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74  E, and INSERT St
cfa0: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a  atements Within.
cfb0: 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33      Triggers</h3
cfc0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41  >..<p>^The [UPDA
cfd0: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
cfe0: 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74  nd [INSERT].stat
cff0: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
d000: 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75  iggers do not su
d010: 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73  pport.the full s
d020: 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54  yntax for [UPDAT
d030: 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e  E], [DELETE], an
d040: 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65  d [INSERT] state
d050: 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c  ments.  The foll
d060: 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f  owing.restrictio
d070: 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c  ns apply:</p>..<
d080: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28  ul>.<li><p>.  ^(
d090: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
d0a0: 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69  table to be modi
d0b0: 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41  fied in an [UPDA
d0c0: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f  TE], [DELETE], o
d0d0: 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61  r [INSERT].  sta
d0e0: 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  tement must be a
d0f0: 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61  n unqualified ta
d100: 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74  ble name.  In ot
d110: 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d  her words, one m
d120: 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22  ust.  use just "
d130: 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e  <i>tablename</i>
d140: 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61  " not "<i>databa
d150: 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69  se</i><b>.</b><i
d160: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a  >tablename</i>".
d170: 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e    when specifyin
d180: 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 20  g the table.)^  
d190: 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65  ^The table to be
d1a0: 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20 65   modified must e
d1b0: 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73 61  xist in the.  sa
d1c0: 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 74  me database as t
d1d0: 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
d1e0: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
d1f0: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
d200: 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  d..  </p></li>..
d210: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22  <li><p>.  ^The "
d220: 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74  INSERT INTO <i>t
d230: 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54  able</i> DEFAULT
d240: 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66   VALUES" form of
d250: 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74   the [INSERT] st
d260: 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74  atement.  is not
d270: 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f   supported..  </
d280: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
d290: 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20  .  ^The INDEXED 
d2a0: 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
d2b0: 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
d2c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ot supported for
d2d0: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20   [UPDATE] and.  
d2e0: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
d2f0: 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  nts..  </p></li>
d300: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68  ..<li><p>.  ^(Th
d310: 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  e ORDER BY and L
d320: 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20  IMIT clauses on 
d330: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
d340: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
d350: 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f   are not.  suppo
d360: 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20  rted.  ORDER BY 
d370: 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f  and LIMIT are no
d380: 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f  t normally suppo
d390: 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45  rted for [UPDATE
d3a0: 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20  ] or.  [DELETE] 
d3b0: 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62  in any context b
d3c0: 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65  ut can be enable
d3d0: 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  d for top-level 
d3e0: 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69  statements.  usi
d3f0: 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  ng the [SQLITE_E
d400: 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
d410: 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69  ETE_LIMIT] compi
d420: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20  le-time option. 
d430: 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74   However,.  that
d440: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
d450: 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65  tion only applie
d460: 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b  s to top-level [
d470: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
d480: 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ETE].  statement
d490: 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20  s, not [UPDATE] 
d4a0: 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61  and [DELETE] sta
d4b0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
d4c0: 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70  riggers.)^.  </p
d4d0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
d4e0: 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65    ^[common-table
d4f0: 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d  -expression|Comm
d500: 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
d510: 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20 73 75 70  ion] are not sup
d520: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 73 74 61  ported for.  sta
d530: 74 65 6d 65 6e 74 73 20 69 6e 73 69 64 65 20 6f  tements inside o
d540: 66 20 74 72 69 67 67 65 72 73 2e 0a 20 20 3c 2f  f triggers..  </
d550: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
d560: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
d570: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
d580: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
d590: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
d5a0: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
d5b0: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
d5c0: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69  rs</h3>..<p>^Tri
d5d0: 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65  ggers may be cre
d5e0: 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c  ated on [views],
d5f0: 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69   as well as ordi
d600: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a  nary tables, by.
d610: 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45  specifying INSTE
d620: 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45  AD OF in the CRE
d630: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
d640: 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20  ement. .^If one 
d650: 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52  or more ON INSER
d660: 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20  T, ON DELETE.or 
d670: 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65  ON UPDATE trigge
d680: 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f  rs are defined o
d690: 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69  n a view, then i
d6a0: 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f  t is not an.erro
d6b0: 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20  r to execute an 
d6c0: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
d6d0: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
d6e0: 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20  nt on the view, 
d6f0: 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20  .respectively.  
d700: 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74  ^Instead,.execut
d710: 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ing an INSERT, D
d720: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
d730: 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73  on the view caus
d740: 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  es the associate
d750: 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69  d.triggers to fi
d760: 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61  re. ^The real ta
d770: 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20  bles underlying 
d780: 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74  the view are not
d790: 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70   modified.(excep
d7a0: 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69  t possibly expli
d7b0: 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67  citly, by a trig
d7c0: 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70  ger program).</p
d7d0: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
d7e0: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
d7f0: 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71  anges()] and [sq
d800: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
d810: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
d820: 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49  s.do not count I
d830: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
d840: 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74  r firings, but t
d850: 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65  he.[count_change
d860: 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63  s pragma] does c
d870: 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20  ount INSTEAD OF 
d880: 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c  trigger firing.<
d890: 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45 78  /p>..<h3>Some Ex
d8a0: 61 6d 70 6c 65 20 54 72 69 67 67 65 72 73 3c 2f  ample Triggers</
d8b0: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69  h3>..<p>^(Assumi
d8c0: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
d8d0: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
d8e0: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
d8f0: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
d900: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
d910: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
d920: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
d930: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
d940: 77 69 6e 67 0a 55 50 44 41 54 45 20 74 72 69 67  wing.UPDATE trig
d950: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
d960: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
d970: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
d980: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
d990: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
d9a0: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
d9b0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
d9c0: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
d9d0: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
d9e0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
d9f0: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
da00: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
da10: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
da20: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
da30: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
da40: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
da50: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
da60: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
da70: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
da80: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
da90: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
daa0: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
dab0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
dac0: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
dad0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
dae0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
daf0: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
db00: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
db10: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
db20: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
db30: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
db40: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
db50: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
db60: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
db70: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
db80: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
db90: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
dba0: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
dbb0: 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61 6d 70 6c  <p>For an exampl
dbc0: 65 20 6f 66 20 61 6e 20 49 4e 53 54 45 41 44 20  e of an INSTEAD 
dbd0: 4f 46 20 74 72 69 67 67 65 72 2c 20 63 6f 6e 73  OF trigger, cons
dbe0: 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ider the followi
dbf0: 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c  ng schema:..<tcl
dc00: 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  >Example {.CREAT
dc10: 45 20 54 41 42 4c 45 20 63 75 73 74 6f 6d 65 72  E TABLE customer
dc20: 28 0a 20 20 63 75 73 74 5f 69 64 20 49 4e 54 45  (.  cust_id INTE
dc30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
dc40: 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20 54 45 58  .  cust_name TEX
dc50: 54 2c 0a 20 20 63 75 73 74 5f 61 64 64 72 20 54  T,.  cust_addr T
dc60: 45 58 54 0a 29 3b 0a 43 52 45 41 54 45 20 56 49  EXT.);.CREATE VI
dc70: 45 57 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  EW customer_addr
dc80: 65 73 73 20 41 53 0a 20 20 20 53 45 4c 45 43 54  ess AS.   SELECT
dc90: 20 63 75 73 74 5f 69 64 2c 20 63 75 73 74 5f 61   cust_id, cust_a
dca0: 64 64 72 20 46 52 4f 4d 20 63 75 73 74 6f 6d 65  ddr FROM custome
dcb0: 72 3b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45  r;.CREATE TRIGGE
dcc0: 52 20 63 75 73 74 5f 61 64 64 72 5f 63 68 6e 67  R cust_addr_chng
dcd0: 0a 49 4e 53 54 45 41 44 20 4f 46 20 55 50 44 41  .INSTEAD OF UPDA
dce0: 54 45 20 4f 46 20 63 75 73 74 5f 61 64 64 72 20  TE OF cust_addr 
dcf0: 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  ON customer_addr
dd00: 65 73 73 0a 42 45 47 49 4e 0a 20 20 55 50 44 41  ess.BEGIN.  UPDA
dd10: 54 45 20 63 75 73 74 6f 6d 65 72 20 53 45 54 20  TE customer SET 
dd20: 63 75 73 74 5f 61 64 64 72 3d 4e 45 57 2e 63 75  cust_addr=NEW.cu
dd30: 73 74 5f 61 64 64 72 0a 20 20 20 57 48 45 52 45  st_addr.   WHERE
dd40: 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e 63 75 73   cust_id=NEW.cus
dd50: 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63  t_id;.END;.}</tc
dd60: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 65 20  l>..<p>With the 
dd70: 73 63 68 65 6d 61 20 61 62 6f 76 65 2c 20 61 20  schema above, a 
dd80: 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 65  statement of the
dd90: 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c   form:</p>..<tcl
dda0: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
ddb0: 45 20 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65  E customer_addre
ddc0: 73 73 20 53 45 54 20 63 75 73 74 5f 61 64 64 72  ss SET cust_addr
ddd0: 3d 24 6e 65 77 5f 61 64 64 72 65 73 73 20 57 48  =$new_address WH
dde0: 45 52 45 20 63 75 73 74 5f 69 64 3d 24 63 75 73  ERE cust_id=$cus
ddf0: 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c  t_id;.}</tcl>..<
de00: 70 3e 43 61 75 73 65 73 20 74 68 65 20 63 75 73  p>Causes the cus
de10: 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64 64 72 20  tomer.cust_addr 
de20: 66 69 65 6c 64 20 74 6f 20 62 65 20 75 70 64 61  field to be upda
de30: 74 65 64 20 66 6f 72 20 61 20 73 70 65 63 69 66  ted for a specif
de40: 69 63 0a 63 75 73 74 6f 6d 65 72 20 65 6e 74 72  ic.customer entr
de50: 79 20 74 68 61 74 20 68 61 73 20 63 75 73 74 6f  y that has custo
de60: 6d 65 72 2e 63 75 73 74 5f 69 64 20 65 71 75 61  mer.cust_id equa
de70: 6c 20 74 6f 20 74 68 65 20 24 63 75 73 74 5f 69  l to the $cust_i
de80: 64 20 70 61 72 61 6d 65 74 65 72 2e 0a 4e 6f 74  d parameter..Not
de90: 65 20 68 6f 77 20 74 68 65 20 76 61 6c 75 65 73  e how the values
dea0: 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
deb0: 20 76 69 65 77 20 61 72 65 20 6d 61 64 65 20 61   view are made a
dec0: 76 61 69 6c 61 62 6c 65 20 61 73 20 66 69 65 6c  vailable as fiel
ded0: 64 0a 69 6e 20 74 68 65 20 73 70 65 63 69 61 6c  d.in the special
dee0: 20 22 4e 45 57 22 20 74 61 62 6c 65 20 77 69 74   "NEW" table wit
def0: 68 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 20  hin the trigger 
df00: 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  body.</p>..<tcl>
df10: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
df20: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
df30: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
df40: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
df50: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
df60: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
df70: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
df80: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
df90: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
dfa0: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
dfb0: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
dfc0: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
dfd0: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
dfe0: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
dff0: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
e000: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
e010: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
e020: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
e030: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
e040: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
e050: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
e060: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
e070: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
e080: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
e090: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
e0a0: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
e0b0: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
e0c0: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
e0d0: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
e0e0: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
e0f0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
e100: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
e110: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
e120: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
e130: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
e140: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
e150: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
e160: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
e170: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
e180: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
e190: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
e1a0: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
e1b0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
e1c0: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
e1d0: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
e1e0: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
e1f0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e200: 74 20 72 61 69 73 65 20 7b 52 41 49 53 45 20 66  t raise {RAISE f
e210: 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  unction}</tcl>.<
e220: 68 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66  h3>The RAISE() f
e230: 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  unction</h3>..<p
e240: 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c  >^(A special SQL
e250: 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28   function RAISE(
e260: 29 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69  ) may be used wi
e270: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70  thin a trigger-p
e280: 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74  rogram,)^.with t
e290: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
e2a0: 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42  tax</p> ..<tcl>B
e2b0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69  ubbleDiagram rai
e2c0: 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c  se-function</tcl
e2d0: 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e 65  >..<p>^(When one
e2e0: 20 6f 66 20 52 41 49 53 45 28 52 4f 4c 4c 42 41   of RAISE(ROLLBA
e2f0: 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53 45 28 41  CK,...), RAISE(A
e300: 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20 52 41 49  BORT,...) or RAI
e310: 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20  SE(FAIL,...).is 
e320: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
e330: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78  igger-program.ex
e340: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
e350: 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  cified [ON CONFL
e360: 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20  ICT] processing 
e370: 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 74 68 65  is performed.the
e380: 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74   current query t
e390: 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a 41 6e 20  erminates.)^.An 
e3a0: 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53  error code of [S
e3b0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
e3c0: 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  ] is returned to
e3d0: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
e3e0: 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65  ,.along with the
e3f0: 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72   specified error
e400: 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c   message.</p>..<
e410: 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47  p>^When RAISE(IG
e420: 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c  NORE) is called,
e430: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f   the remainder o
e440: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  f the current tr
e450: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74  igger program,.t
e460: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
e470: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
e480: 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20  gger program to 
e490: 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20  execute and any 
e4a0: 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67  subsequent.trigg
e4b0: 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74  er programs that
e4c0: 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   would have been
e4d0: 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62   executed are ab
e4e0: 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74  andoned. ^No dat
e4f0: 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72  abase.changes ar
e500: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
e510: 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ^If the statemen
e520: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
e530: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
e540: 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20  m.to execute is 
e550: 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61  itself part of a
e560: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
e570: 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67  , then that trig
e580: 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75  ger program.resu
e590: 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74  mes execution at
e5a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
e5b0: 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e  f the next step.
e5c0: 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
e5d0: 72 61 67 6d 65 6e 74 20 74 65 6d 70 74 72 69 67  ragment temptrig
e5e0: 20 7b 54 45 4d 50 20 74 72 69 67 67 65 72 73 20   {TEMP triggers 
e5f0: 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c  on non-TEMP tabl
e600: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45  es}</tcl>.<h3>TE
e610: 4d 50 20 54 72 69 67 67 65 72 73 20 6f 6e 20 4e  MP Triggers on N
e620: 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65 73 3c 2f  on-TEMP Tables</
e630: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 72 69 67  h3>..<p>^(A trig
e640: 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20 65 78 69  ger normally exi
e650: 73 74 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20  sts in the same 
e660: 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20  database as the 
e670: 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61 66 74 65  table named.afte
e680: 72 20 74 68 65 20 22 4f 4e 22 20 6b 65 79 77 6f  r the "ON" keywo
e690: 72 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  rd in the CREATE
e6a0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
e6b0: 6e 74 2e 20 20 45 78 63 65 70 74 2c 20 69 74 20  nt.  Except, it 
e6c0: 69 73 0a 70 6f 73 73 69 62 6c 65 20 74 6f 20 63  is.possible to c
e6d0: 72 65 61 74 65 20 61 20 54 45 4d 50 20 54 52 49  reate a TEMP TRI
e6e0: 47 47 45 52 20 6f 6e 20 61 20 74 61 62 6c 65 20  GGER on a table 
e6f0: 69 6e 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  in another datab
e700: 61 73 65 2e 29 5e 20 20 0a 53 75 63 68 20 61 20  ase.)^  .Such a 
e710: 74 72 69 67 67 65 72 20 77 69 6c 6c 20 6f 6e 6c  trigger will onl
e720: 79 20 66 69 72 65 20 77 68 65 6e 20 63 68 61 6e  y fire when chan
e730: 67 65 73 0a 61 72 65 20 6d 61 64 65 20 74 6f 20  ges.are made to 
e740: 74 68 65 20 74 61 72 67 65 74 20 74 61 62 6c 65  the target table
e750: 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61 74   by the applicat
e760: 69 6f 6e 20 74 68 61 74 20 64 65 66 69 6e 65 64  ion that defined
e770: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 4f 74   the trigger..Ot
e780: 68 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  her applications
e790: 20 74 68 61 74 20 6d 6f 64 69 66 79 20 74 68 65   that modify the
e7a0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
e7b0: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 65  ot be able to se
e7c0: 65 20 74 68 65 0a 54 45 4d 50 20 74 72 69 67 67  e the.TEMP trigg
e7d0: 65 72 20 61 6e 64 20 68 65 6e 63 65 20 63 61 6e  er and hence can
e7e0: 6e 6f 74 20 72 75 6e 20 74 68 65 20 74 72 69 67  not run the trig
e7f0: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  ger.</p>..<p>Whe
e800: 6e 20 64 65 66 69 6e 69 6e 67 20 61 20 54 45 4d  n defining a TEM
e810: 50 20 74 72 69 67 67 65 72 20 6f 6e 20 61 20 6e  P trigger on a n
e820: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2c 20 69  on-TEMP table, i
e830: 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
e840: 6f 0a 73 70 65 63 69 66 79 20 74 68 65 20 64 61  o.specify the da
e850: 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
e860: 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c  he non-TEMP tabl
e870: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
e880: 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .in the followin
e890: 67 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 74 20  g statement, it 
e8a0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
e8b0: 73 61 79 20 22 6d 61 69 6e 2e 74 61 62 31 22 20  say "main.tab1" 
e8c0: 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75 73 74 20  instead.of just 
e8d0: 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c  "tab1":</p>..<bl
e8e0: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
e8f0: 52 45 41 54 45 20 54 45 4d 50 20 54 52 49 47 47  REATE TEMP TRIGG
e900: 45 52 20 65 78 31 20 41 46 54 45 52 20 49 4e 53  ER ex1 AFTER INS
e910: 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c  ERT ON <b>main.<
e920: 2f 62 3e 74 61 62 31 20 42 45 47 49 4e 20 2e 2e  /b>tab1 BEGIN ..
e930: 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ..</pre></blockq
e940: 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72  uote>..<p>Failur
e950: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
e960: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 6f   database name o
e970: 6e 20 74 68 65 20 74 61 72 67 65 74 20 74 61 62  n the target tab
e980: 6c 65 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 0a  le could result.
e990: 69 6e 20 74 68 65 20 54 45 4d 50 20 74 72 69 67  in the TEMP trig
e9a0: 67 65 72 20 62 65 69 6e 67 20 72 65 61 74 74 61  ger being reatta
e9b0: 63 68 65 64 20 74 6f 20 61 20 74 61 62 6c 65 20  ched to a table 
e9c0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
e9d0: 6d 65 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64 61  me in.another da
e9e0: 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
e9f0: 61 6e 79 20 73 63 68 65 6d 61 20 63 68 61 6e 67  any schema chang
ea00: 65 20 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a 3c  e occurs.</p>..<
ea10: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
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 23 23  ################
ea60: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
ea70: 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65 61  EATE VIEW} {crea
ea80: 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54 45  teview} {{CREATE
ea90: 20 56 49 45 57 7d 20 76 69 65 77 20 2a 76 69 65   VIEW} view *vie
eaa0: 77 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  ws}..RecursiveBu
eab0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
eac0: 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  te-view-stmt.</t
ead0: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
eae0: 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64  ATE VIEW command
eaf0: 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20   assigns a name 
eb00: 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65  to a pre-package
eb10: 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  d .[SELECT] stat
eb20: 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68  ement. .^Once th
eb30: 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
eb40: 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65  d, it can be use
eb50: 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  d in the FROM cl
eb60: 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20  ause.of another 
eb70: 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63  [SELECT] in plac
eb80: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
eb90: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  e..</p>..<p>^If 
eba0: 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54  the "TEMP" or "T
ebb0: 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72  EMPORARY" keywor
ebc0: 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77  d occurs in betw
ebd0: 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64  een "CREATE".and
ebe0: 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65   "VIEW" then the
ebf0: 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72   view that is cr
ec00: 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69  eated is only vi
ec10: 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 5b 64 61  sible to the.[da
ec20: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ec30: 6e 5d 20 74 68 61 74 20 63 72 65 61 74 65 64 20  n] that created 
ec40: 69 74 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  it and is automa
ec50: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
ec60: 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
ec70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
ec80: 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  closed.</p>..<p>
ec90: 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62   ^If a &lt;datab
eca0: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
ecb0: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
ecc0: 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61  the view is crea
ecd0: 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65  ted in .the name
ece0: 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20  d database. ^It 
ecf0: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73  is an error to s
ed00: 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 26 6c  pecify both a &l
ed10: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
ed20: 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d 50  gt;.and the TEMP
ed30: 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49   keyword on a VI
ed40: 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26  EW, unless the &
ed50: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
ed60: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 0a  &gt; is "temp"..
ed70: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
ed80: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
ed90: 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20  d, and the TEMP 
eda0: 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70  keyword is not p
edb0: 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57  resent,.the VIEW
edc0: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
edd0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
ede0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63  .</p>..<p>^You c
edf0: 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20  annot [DELETE], 
ee00: 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50  [INSERT], or [UP
ee10: 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e  DATE] a view.  ^
ee20: 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f  Views are read-o
ee30: 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20  nly .in SQLite. 
ee40: 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61   ^However, in ma
ee50: 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e  ny cases you can
ee60: 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44   use an.[INSTEAD
ee70: 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20   OF trigger] on 
ee80: 74 68 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f  the view to acco
ee90: 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65  mplish .the same
eea0: 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20   thing.  ^Views 
eeb0: 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74  are removed .wit
eec0: 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57  h the [DROP VIEW
eed0: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
eee0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
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 23 23  ################
ef20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef30: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
ef40: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
ef50: 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d  LE} {createvtab}
ef60: 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55 41   {{CREATE VIRTUA
ef70: 4c 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  L TABLE}}..Recur
ef80: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
ef90: 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c  m create-virtual
efa0: 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63  -table-stmt.</tc
efb0: 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61  l>..<p>A [virtua
efc0: 6c 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69  l table] is an i
efd0: 6e 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65  nterface to an e
efe0: 78 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20  xternal storage 
eff0: 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65  or computation.e
f000: 6e 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61  ngine that appea
f010: 72 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65  rs to be a table
f020: 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63   but does not ac
f030: 74 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66  tually store inf
f040: 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20  ormation.in the 
f050: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
f060: 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61  p>..<p>In genera
f070: 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e  l, you can do an
f080: 79 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76  ything with a [v
f090: 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68  irtual table] th
f0a0: 61 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77  at can be done.w
f0b0: 69 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  ith an ordinary 
f0c0: 74 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68  table, except th
f0d0: 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63  at ^you cannot c
f0e0: 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72  reate indices or
f0f0: 20 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76   triggers on a.v
f100: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e  irtual table.  ^
f110: 53 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62  Some virtual tab
f120: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f130: 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20  ns might impose 
f140: 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72  additional.restr
f150: 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78  ictions.  For ex
f160: 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74  ample, many virt
f170: 75 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72  ual tables are r
f180: 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c  ead-only.</p>..<
f190: 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65  p>The &lt;module
f1a0: 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68 65  -name&gt; is the
f1b0: 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65   name of an obje
f1c0: 63 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  ct that implemen
f1d0: 74 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74  ts.the virtual t
f1e0: 61 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c 74 3b  able.  ^The &lt;
f1f0: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20  module-name&gt; 
f200: 6d 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72  must be register
f210: 65 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69  ed with.the SQLi
f220: 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  te database conn
f230: 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71  ection using.[sq
f240: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
f250: 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74  ule()] or [sqlit
f260: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
f270: 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20  _v2()].prior to 
f280: 69 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41  issuing the CREA
f290: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
f2a0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65   statement..^The
f2b0: 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65   module takes ze
f2c0: 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61  ro or more comma
f2d0: 2d 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d  -separated argum
f2e0: 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d  ents..^The argum
f2f0: 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74  ents can be just
f300: 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20   about any text 
f310: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61  as long as it ha
f320: 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e  s balanced.paren
f330: 74 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67  theses.  The arg
f340: 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20  ument syntax is 
f350: 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e  sufficiently gen
f360: 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72  eral that the.ar
f370: 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d  guments can be m
f380: 61 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73  ade to appear as
f390: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
f3a0: 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69  ions] in a tradi
f3b0: 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54  tional.[CREATE T
f3c0: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
f3d0: 20 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65    .^SQLite passe
f3e0: 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67  s the module arg
f3f0: 75 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a  uments directly.
f400: 74 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d  to the [xCreate]
f410: 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20   and [xConnect] 
f420: 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d  methods of the m
f430: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
f440: 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79  tion.without any
f450: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e   interpretation.
f460: 20 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70    It is the resp
f470: 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68  onsibility.of th
f480: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
f490: 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65  ntation to parse
f4a0: 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69   and interpret i
f4b0: 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73  ts own arguments
f4c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72  .</p>..<p>^A vir
f4d0: 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65  tual table is de
f4e0: 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68  stroyed using th
f4f0: 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50  e ordinary.[DROP
f500: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
f510: 74 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a  t.  There is no.
f520: 44 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42  DROP VIRTUAL TAB
f530: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70  LE statement.</p
f540: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f590: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
f5a0: 44 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44  DELETE delete {D
f5b0: 45 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a  ELETE *DELETEs}.
f5c0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
f5d0: 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73  Diagram delete-s
f5e0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
f5f0: 68 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e  he DELETE comman
f600: 64 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64  d removes record
f610: 73 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65  s from the table
f620: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
f630: 68 65 0a 20 20 20 3c 69 3e 71 75 61 6c 69 66 69  he.   <i>qualifi
f640: 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  ed-table-name</i
f650: 3e 2e 20 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  >. ..<p>^If the 
f660: 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
f670: 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c  not present, all
f680: 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20   records in the 
f690: 74 61 62 6c 65 20 61 72 65 20 64 65 6c 65 74 65  table are delete
f6a0: 64 2e 0a 20 20 20 5e 49 66 20 61 20 57 48 45 52  d..   ^If a WHER
f6b0: 45 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  E clause is supp
f6c0: 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  lied, then only 
f6d0: 74 68 6f 73 65 20 72 6f 77 73 20 66 6f 72 20 77  those rows for w
f6e0: 68 69 63 68 20 74 68 65 0a 20 20 20 72 65 73 75  hich the.   resu
f6f0: 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt of evaluating
f700: 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
f710: 65 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  e as a [boolean 
f720: 65 78 70 72 65 73 73 69 6f 6e 7c 0a 20 20 20 62  expression|.   b
f730: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
f740: 6e 20 69 73 20 74 72 75 65 5d 20 61 72 65 20 64  n is true] are d
f750: 65 6c 65 74 65 64 2e 0a 0a 3c 68 33 3e 52 65 73  eleted...<h3>Res
f760: 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c  trictions on DEL
f770: 45 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ETE Statements W
f780: 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49  ithin CREATE TRI
f790: 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  GGER</h3>..<p>Th
f7a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74  e following rest
f7b0: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74  rictions apply t
f7c0: 6f 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  o DELETE stateme
f7d0: 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 77  nts that occur w
f7e0: 69 74 68 69 6e 20 74 68 65 0a 20 20 20 62 6f 64  ithin the.   bod
f7f0: 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54  y of a [CREATE T
f800: 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
f810: 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c  t:..<ul>.  <li><
f820: 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d  p>^The <i>table-
f830: 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69  name</i> specifi
f840: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20  ed as part of a 
f850: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
f860: 20 77 69 74 68 69 6e 0a 20 20 20 20 61 20 74 72   within.    a tr
f870: 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
f880: 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
f890: 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
f8a0: 73 2c 20 74 68 65 0a 20 20 20 20 3c 69 3e 64 61  s, the.    <i>da
f8b0: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
f8c0: 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f  b>.</b> prefix o
f8d0: 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
f8e0: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
f8f0: 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72 69 67  .    within trig
f900: 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68 65 20  gers.)^ ^If the 
f910: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
f920: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
f930: 74 61 63 68 65 64 20 69 73 0a 20 20 20 20 6e 6f  tached is.    no
f940: 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61  t in the temp da
f950: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44 45 4c  tabase, then DEL
f960: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ETE statements w
f970: 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67 65  ithin the trigge
f980: 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73 74 20  r.    body must 
f990: 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62 6c 65  operate on table
f9a0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
f9b0: 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
f9c0: 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
f9d0: 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68 65      to which the
f9e0: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
f9f0: 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54  ched is in the T
fa00: 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68  EMP database, th
fa10: 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71 75 61  en the.    unqua
fa20: 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74  lified name of t
fa30: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
fa40: 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f 6c 76  eleted is resolv
fa50: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
fa60: 61 79 20 61 73 0a 20 20 20 20 69 74 20 69 73 20  ay as.    it is 
fa70: 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  for a top-level 
fa80: 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65  statement (by se
fa90: 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74 68  arching first th
faa0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
fab0: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 6d 61   then.    the ma
fac0: 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
fad0: 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
fae0: 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
faf0: 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
fb00: 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20 20 20   attached)..    
fb10: 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49  .  <li><p>^The I
fb20: 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
fb30: 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
fb40: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
fb50: 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20 20 20  d on DELETE.    
fb60: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
fb70: 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
fb80: 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
fb90: 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
fba0: 59 20 63 6c 61 75 73 65 73 20 28 64 65 73 63 72  Y clauses (descr
fbb0: 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72 65 20  ibed below) are 
fbc0: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  unsupported for.
fbd0: 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
fbe0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
fbf0: 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e  ggers.</p>.</ul>
fc00: 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c  ..<h3>Optional L
fc10: 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
fc20: 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a  Y clauses</h3>..
fc30: 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69  <p>^(If SQLite i
fc40: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
fc50: 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
fc60: 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
fc70: 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
fc80: 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65  time option, the
fc90: 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
fca0: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
fcb0: 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64  ment is.extended
fcc0: 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e   by the addition
fcd0: 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44   of optional ORD
fce0: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
fcf0: 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a  clauses:)^</p>..
fd00: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
fd10: 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c  am delete-stmt-l
fd20: 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
fd30: 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20 73 74  >^If a DELETE st
fd40: 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49  atement has a LI
fd50: 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
fd60: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
fd70: 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c  f rows that.will
fd80: 20 62 65 20 64 65 6c 65 74 65 64 20 69 73 20 66   be deleted is f
fd90: 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
fda0: 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79  ng the accompany
fdb0: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ing expression a
fdc0: 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f  nd casting.it to
fdd0: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
fde0: 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73 75 6c  e. ^If the resul
fdf0: 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75 61 74  t of the evaluat
fe00: 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  ing the LIMIT cl
fe10: 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65 20 6c  ause.cannot be l
fe20: 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
fe30: 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
fe40: 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 61  r value, it is a
fe50: 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e 65 67  n error. ^A .neg
fe60: 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61 6c 75  ative LIMIT valu
fe70: 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  e is interpreted
fe80: 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 20   as "no limit". 
fe90: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
fea0: 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73 6f 20  statement .also 
feb0: 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
fec0: 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73  ause, then it is
fed0: 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75   similarly evalu
fee0: 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
fef0: 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61 6c 75   an.integer valu
ff00: 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69 73 20  e. Again, it is 
ff10: 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
ff20: 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
ff30: 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
ff40: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
ff50: 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72 65 20  er.)^ ^If there 
ff60: 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63 6c 61  is no OFFSET cla
ff70: 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61 6c 63  use, or the calc
ff80: 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72 20 76  ulated.integer v
ff90: 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69 76 65  alue is negative
ffa0: 2c 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20  , the effective 
ffb0: 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69 73 20  OFFSET value is 
ffc0: 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74  zero...<p>^(If t
ffd0: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
ffe0: 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
fff0: 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
10000 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
10010 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74 65 64  ould .be deleted
10020 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
10030 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
10040 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61  use are sorted a
10050 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
10060 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65 20 66  .ORDER BY. The f
10070 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f  irst <i>M</i> ro
10080 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d 3c 2f  ws, where <i>M</
10090 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  i> is the value 
100a0 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75 61 74  found by.evaluat
100b0 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
100c0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
100d0 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c 20 61  , are skipped, a
100e0 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  nd the following
100f0 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72   .<i>N</i>, wher
10100 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 74 68  e <i>N</i> is th
10110 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
10120 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2c  IMIT expression,
10130 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29 5e 0a   are deleted.)^.
10140 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65  ^If there are le
10150 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e  ss than <i>N</i>
10160 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e 67 20   rows remaining 
10170 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74 68 65  after taking the
10180 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 0a 69   OFFSET clause.i
10190 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f 72 20  nto account, or 
101a0 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  if the LIMIT cla
101b0 75 73 65 20 65 76 61 6c 75 61 74 65 64 20 74 6f  use evaluated to
101c0 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75   a negative valu
101d0 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65 6d 61  e, then all.rema
101e0 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65 20 64  ining rows are d
101f0 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  eleted...<p>^If 
10200 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
10210 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
10220 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
10230 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
10240 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64  would be deleted
10250 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
10260 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
10270 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
10280 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
10290 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
102a0 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
102b0 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
102c0 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
102d0 65 20 0a 74 68 65 20 73 75 62 73 65 74 20 74 68  e .the subset th
102e0 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20  at are actually 
102f0 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54  deleted...<p>^(T
10300 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
10310 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45 20 73  se on a DELETE s
10320 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
10330 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69   only to determi
10340 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61  ne which.rows fa
10350 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49  ll within the LI
10360 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69  MIT. The order i
10370 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
10380 20 64 65 6c 65 74 65 64 20 69 73 20 61 72 62 69   deleted is arbi
10390 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
103a0 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
103b0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
103c0 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  se.)^..<tcl>hd_f
103d0 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65  ragment truncate
103e0 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70  opt {truncate op
103f0 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c  timization}</tcl
10400 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61  >.<h3>The Trunca
10410 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c  te Optimization<
10420 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  /h3>..<p>^When t
10430 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74  he WHERE is omit
10440 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54  ted from a DELET
10450 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  E statement and 
10460 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20  the table.being 
10470 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74  deleted has no t
10480 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20  riggers,.SQLite 
10490 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  uses an optimiza
104a0 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68  tion to erase th
104b0 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63  e entire table c
104c0 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68  ontent.without h
104d0 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65  aving to visit e
104e0 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
104f0 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c  able individuall
10500 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74  y..This "truncat
10510 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  e" optimization 
10520 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65  makes the delete
10530 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72   run much faster
10540 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74  ..Prior to SQLit
10550 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  e [version 3.6.5
10560 5d 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ], the truncate 
10570 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73  optimization.als
10580 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65  o meant that the
10590 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
105a0 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65  s()] and.[sqlite
105b0 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
105c0 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e  )] interfaces.an
105d0 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61  d the [count_cha
105e0 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c  nges pragma].wil
105f0 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72  l not actually r
10600 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
10610 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73   of deleted rows
10620 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d  .  .That problem
10630 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64 20   has been fixed 
10640 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33  as of [version 3
10650 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20  .6.5]...<p>^The 
10660 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10670 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72  ation can be per
10680 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65  manently disable
10690 64 20 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65  d for all querie
106a0 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67  s.by recompiling
106b0 0a 53 51 4c 69 74 65 20 77 69 74 68 20 74 68 65  .SQLite with the
106c0 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52   [SQLITE_OMIT_TR
106d0 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54  UNCATE_OPTIMIZAT
106e0 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ION] compile-tim
106f0 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c  e switch.</p>..<
10700 70 3e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  p>The truncate o
10710 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
10720 61 6c 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64  also be disabled
10730 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
10740 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  g.the [sqlite3_s
10750 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d  et_authorizer()]
10760 20 69 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66   interface.  ^If
10770 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63   an authorizer c
10780 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20  allback.returns 
10790 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20  [SQLITE_IGNORE] 
107a0 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44  for an [SQLITE_D
107b0 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f  ELETE] action co
107c0 64 65 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c  de, then.the DEL
107d0 45 54 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  ETE operation wi
107e0 6c 6c 20 70 72 6f 63 65 65 64 20 62 75 74 20 74  ll proceed but t
107f0 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
10800 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65  mization will.be
10810 20 62 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f   bypassed and ro
10820 77 73 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74  ws will be delet
10830 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f  ed one by one.</
10840 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
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 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10890 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
108a0 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  n {DETACH DATABA
108b0 53 45 7d 20 64 65 74 61 63 68 20 2a 44 45 54 41  SE} detach *DETA
108c0 43 48 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  CH..RecursiveBub
108d0 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74 61 63  bleDiagram detac
108e0 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  h-stmt.</tcl>..<
108f0 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e  p>^This statemen
10900 74 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64  t detaches an ad
10910 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  ditional databas
10920 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65  e connection pre
10930 76 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65  viously .attache
10940 64 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54  d using the [ATT
10950 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  ACH] statement. 
10960 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69 6e 20 5b   .^When not in [
10970 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
10980 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f 73 73 69  e], .it is possi
10990 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68 65 20  ble to have the 
109a0 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69  same database fi
109b0 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75 6c 74  le attached mult
109c0 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69 6e 67  iple times using
109d0 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65   .different name
109e0 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69 6e 67  s, and detaching
109f0 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   one connection 
10a00 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c  to a file will l
10a10 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65 72 73  eave the .others
10a20 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 5e 49 6e   intact.</p>.^In
10a30 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d   [shared cache m
10a40 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74 69 6e 67  ode], attempting
10a50 20 74 6f 20 61 74 74 61 63 68 20 74 68 65 20 73   to attach the s
10a60 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
10a70 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f 6e 63 65  e more.than once
10a80 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 65   results in an e
10a90 72 72 6f 72 2e 0a 0a 3c 70 3e 5e 54 68 69 73 20  rror...<p>^This 
10aa0 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 66  statement will f
10ab0 61 69 6c 20 69 66 20 53 51 4c 69 74 65 20 69 73  ail if SQLite is
10ac0 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
10ad0 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  f a transaction.
10ae0 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
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 23 23 23 23 23 23 23 23 23 23 23  ################
10b30 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10b40 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45 58 7d  ion {DROP INDEX}
10b50 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44 52 4f   dropindex {{DRO
10b60 50 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72  P INDEX}}..Recur
10b70 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
10b80 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d  m drop-index-stm
10b90 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
10ba0 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61  e DROP INDEX sta
10bb0 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
10bc0 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a 77 69  n index added.wi
10bd0 74 68 20 74 68 65 20 5b 43 52 45 41 54 45 20 49  th the [CREATE I
10be0 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e  NDEX] statement.
10bf0 20 20 54 68 65 20 69 6e 64 65 78 20 69 73 20 63    The index is c
10c00 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65  ompletely remove
10c10 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e  d from.the disk.
10c20 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79 20 74    The only way t
10c30 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20 69 6e  o recover the in
10c40 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e 74 65  dex is to reente
10c50 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74  r the.appropriat
10c60 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
10c70 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
10c80 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
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 23 23 23  ################
10cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cd0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
10ce0 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62  P TABLE} droptab
10cf0 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d  le {{DROP TABLE}
10d00 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
10d10 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74  leDiagram drop-t
10d20 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  able-stmt.</tcl>
10d30 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54  ..<p>^The DROP T
10d40 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72  ABLE statement r
10d50 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61  emoves a table a
10d60 64 64 65 64 20 77 69 74 68 20 74 68 65 0a 5b 43  dded with the.[C
10d70 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
10d80 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d  tement.  The nam
10d90 65 20 73 70 65 63 69 66 69 65 64 20 69 73 20 74  e specified is t
10da0 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20  he.table name.  
10db0 5e 54 68 65 20 64 72 6f 70 70 65 64 20 74 61 62  ^The dropped tab
10dc0 6c 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79  le is completely
10dd0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
10de0 65 20 64 61 74 61 62 61 73 65 20 0a 73 63 68 65  e database .sche
10df0 6d 61 20 61 6e 64 20 74 68 65 20 64 69 73 6b 20  ma and the disk 
10e00 66 69 6c 65 2e 20 20 54 68 65 20 74 61 62 6c 65  file.  The table
10e10 20 63 61 6e 20 6e 6f 74 20 62 65 20 72 65 63 6f   can not be reco
10e20 76 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e  vered.  .^All in
10e30 64 69 63 65 73 20 61 6e 64 20 74 72 69 67 67 65  dices and trigge
10e40 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs.associated wi
10e50 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  th the table are
10e60 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f   also deleted.</
10e70 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  p>..<p>^The opti
10e80 6f 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20 63  onal IF EXISTS c
10e90 6c 61 75 73 65 20 73 75 70 70 72 65 73 73 65 73  lause suppresses
10ea0 20 74 68 65 20 65 72 72 6f 72 20 74 68 61 74 20   the error that 
10eb0 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72  would normally.r
10ec0 65 73 75 6c 74 20 69 66 20 74 68 65 20 74 61 62  esult if the tab
10ed0 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  le does not exis
10ee0 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  t.</p>..<p>^If [
10ef0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
10f00 74 72 61 69 6e 74 73 5d 20 61 72 65 20 65 6e 61  traints] are ena
10f10 62 6c 65 64 2c 20 61 20 44 52 4f 50 20 54 41 42  bled, a DROP TAB
10f20 4c 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72 66 6f  LE command perfo
10f30 72 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69 74 20  rms an.implicit 
10f40 5b 44 45 4c 45 54 45 20 7c 20 44 45 4c 45 54 45  [DELETE | DELETE
10f50 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
10f60 3b 5d 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72  ;] command befor
10f70 65 20 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74  e removing the.t
10f80 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61  able from the da
10f90 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e  tabase schema. ^
10fa0 41 6e 79 20 74 72 69 67 67 65 72 73 20 61 74 74  Any triggers att
10fb0 61 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62  ached to the tab
10fc0 6c 65 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66  le are.dropped f
10fd0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
10fe0 20 73 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74   schema before t
10ff0 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
11000 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
11010 67 74 3b 20 0a 69 73 20 65 78 65 63 75 74 65 64  gt; .is executed
11020 2c 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74  , so this cannot
11030 20 63 61 75 73 65 20 61 6e 79 20 74 72 69 67 67   cause any trigg
11040 65 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79 20  ers to fire. By 
11050 63 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d  contrast, ^an.im
11060 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
11070 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 64  OM &lt;tbl&gt; d
11080 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f  oes cause any co
11090 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67  nfigured.[foreig
110a0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74  n key actions] t
110b0 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e  o take place. .^
110c0 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  If the implicit 
110d0 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
110e0 74 62 6c 26 67 74 3b 20 65 78 65 63 75 74 65 64  tbl&gt; executed
110f0 0a 61 73 20 70 61 72 74 20 6f 66 20 61 20 44 52  .as part of a DR
11100 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
11110 20 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69 6d   violates any im
11120 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
11130 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
11140 0a 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74  .an error is ret
11150 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74 61  urned and the ta
11160 62 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70 70  ble is not dropp
11170 65 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d 70  ed. ^If .the imp
11180 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
11190 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 63 61  M &lt;tbl&gt; ca
111a0 75 73 65 73 20 61 6e 79 20 0a 64 65 66 65 72 72  uses any .deferr
111b0 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
111c0 6f 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65  onstraints to be
111d0 20 76 69 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74   violated, and t
111e0 68 65 20 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74  he violations st
111f0 69 6c 6c 0a 65 78 69 73 74 20 77 68 65 6e 20 74  ill.exist when t
11200 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
11210 73 20 63 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20  s committed, an 
11220 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
11230 64 20 61 74 20 74 68 65 20 74 69 6d 65 0a 6f 66  d at the time.of
11240 20 63 6f 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a   commit...<tcl>.
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 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
112a0 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49  ection {DROP TRI
112b0 47 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65  GGER} droptrigge
112c0 72 20 7b 7b 44 52 4f 50 20 54 52 49 47 47 45 52  r {{DROP TRIGGER
112d0 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
112e0 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
112f0 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74  trigger-stmt.</t
11300 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
11310 50 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  P TRIGGER statem
11320 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72  ent removes a tr
11330 69 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79  igger created by
11340 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52   the .[CREATE TR
11350 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
11360 2e 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c  . ^Once removed,
11370 20 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66   the trigger def
11380 69 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f  inition is no.lo
11390 6e 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  nger present in 
113a0 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
113b0 72 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d  r (or sqlite_tem
113c0 70 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20  p_master) table 
113d0 61 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64  and is.not fired
113e0 20 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65   by any subseque
113f0 6e 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  nt INSERT, UPDAT
11400 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74  E or DELETE stat
11410 65 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74  ements...<p>^Not
11420 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20  e that triggers 
11430 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
11440 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74  y dropped when t
11450 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61  he associated ta
11460 62 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a  ble is.dropped..
11470 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23  ################
114b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
114c0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
114d0 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69  ROP VIEW} dropvi
114e0 65 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d  ew {{DROP VIEW}}
114f0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
11500 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 76 69  eDiagram drop-vi
11510 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
11520 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 56 49 45  <p>^The DROP VIE
11530 57 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  W statement remo
11540 76 65 73 20 61 20 76 69 65 77 20 63 72 65 61 74  ves a view creat
11550 65 64 20 62 79 20 74 68 65 20 5b 43 52 45 41 54  ed by the [CREAT
11560 45 20 56 49 45 57 5d 20 0a 20 20 73 74 61 74 65  E VIEW] .  state
11570 6d 65 6e 74 2e 20 5e 54 68 65 20 76 69 65 77 20  ment. ^The view 
11580 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 72 65  definition is re
11590 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64  moved from the d
115a0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
115b0 62 75 74 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c  but .  no actual
115c0 20 64 61 74 61 20 69 6e 20 74 68 65 20 75 6e 64   data in the und
115d0 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62  erlying base tab
115e0 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e  les is modified.
115f0 0a 0a 3c 70 3e 5e 28 54 68 65 20 76 69 65 77 20  ..<p>^(The view 
11600 74 6f 20 64 72 6f 70 20 69 73 20 69 64 65 6e 74  to drop is ident
11610 69 66 69 65 64 20 62 79 20 74 68 65 20 76 69 65  ified by the vie
11620 77 2d 6e 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f  w-name and optio
11630 6e 61 6c 20 0a 20 20 64 61 74 61 62 61 73 65 2d  nal .  database-
11640 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 61  name specified a
11650 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 44 52  s part of the DR
11660 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
11670 74 2e 20 54 68 69 73 20 0a 20 20 72 65 66 65 72  t. This .  refer
11680 65 6e 63 65 20 69 73 20 72 65 73 6f 6c 76 65 64  ence is resolved
11690 20 75 73 69 6e 67 20 74 68 65 20 73 74 61 6e 64   using the stand
116a0 61 72 64 20 70 72 6f 63 65 64 75 72 65 20 66 6f  ard procedure fo
116b0 72 20 5b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75  r [object resolu
116c0 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20  tion].)^..<p>.  
116d0 5e 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65  ^If the specifie
116e0 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65  d view cannot be
116f0 20 66 6f 75 6e 64 20 61 6e 64 20 74 68 65 20 49   found and the I
11700 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
11710 69 73 20 6e 6f 74 20 0a 20 20 70 72 65 73 65 6e  is not .  presen
11720 74 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  t, it is an erro
11730 72 2e 20 5e 49 66 20 74 68 65 20 73 70 65 63 69  r. ^If the speci
11740 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f 74  fied view cannot
11750 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 61 6e   be found and an
11760 20 49 46 0a 20 20 45 58 49 53 54 53 20 63 6c 61   IF.  EXISTS cla
11770 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 69  use is present i
11780 6e 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  n the DROP VIEW 
11790 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
117a0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  the statement.  
117b0 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74  is a no-op....<t
117c0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
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 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 61  ##.Section {Data
11820 62 61 73 65 20 4f 62 6a 65 63 74 20 4e 61 6d 65  base Object Name
11830 20 52 65 73 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61   Resolution} {na
11840 6d 69 6e 67 7d 20 7b 7b 6f 62 6a 65 63 74 20 72  ming} {{object r
11850 65 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63  esolution}}.</tc
11860 6c 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20 53 51 4c  l>..<p>.  In SQL
11870 69 74 65 2c 20 61 20 64 61 74 61 62 61 73 65 20  ite, a database 
11880 6f 62 6a 65 63 74 20 28 61 20 74 61 62 6c 65 2c  object (a table,
11890 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20   index, trigger 
118a0 6f 72 20 76 69 65 77 29 20 69 73 20 69 64 65 6e  or view) is iden
118b0 74 69 66 69 65 64 0a 20 20 62 79 20 74 68 65 20  tified.  by the 
118c0 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65  name of the obje
118d0 63 74 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20  ct and the name 
118e0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
118f0 74 68 61 74 20 69 74 20 72 65 73 69 64 65 73 20  that it resides 
11900 69 6e 2e 20 0a 20 20 44 61 74 61 62 61 73 65 20  in. .  Database 
11910 6f 62 6a 65 63 74 73 20 6d 61 79 20 72 65 73 69  objects may resi
11920 64 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  de in the main d
11930 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d  atabase, the tem
11940 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69  p database, or i
11950 6e 0a 20 20 61 6e 20 5b 41 54 54 41 43 48 7c 61  n.  an [ATTACH|a
11960 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
11970 5d 2e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 73 79  ]...<p>.  The sy
11980 6e 74 61 78 20 6f 66 20 74 68 65 20 5b 44 52 4f  ntax of the [DRO
11990 50 20 54 41 42 4c 45 5d 2c 20 5b 44 52 4f 50 20  P TABLE], [DROP 
119a0 49 4e 44 45 58 5d 2c 20 5b 44 52 4f 50 20 56 49  INDEX], [DROP VI
119b0 45 57 5d 2c 20 5b 44 52 4f 50 20 54 52 49 47 47  EW], [DROP TRIGG
119c0 45 52 5d 2c 0a 20 20 5b 52 45 49 4e 44 45 58 5d  ER],.  [REINDEX]
119d0 2c 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20  , [ALTER TABLE] 
119e0 61 6e 64 20 6d 61 6e 79 20 6f 74 68 65 72 20 63  and many other c
119f0 6f 6d 6d 61 6e 64 73 20 61 6c 6c 20 70 65 72 6d  ommands all perm
11a00 69 74 20 74 68 65 20 75 73 65 72 20 74 6f 0a 20  it the user to. 
11a10 20 73 70 65 63 69 66 79 20 61 20 64 61 74 61 62   specify a datab
11a20 61 73 65 20 6f 62 6a 65 63 74 20 65 69 74 68 65  ase object eithe
11a30 72 20 62 79 20 69 74 73 20 6e 61 6d 65 20 61 6c  r by its name al
11a40 6f 6e 65 2c 20 6f 72 20 62 79 20 61 20 63 6f 6d  one, or by a com
11a50 62 69 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 69 74  bination of.  it
11a60 73 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 6e  s name and the n
11a70 61 6d 65 20 6f 66 20 69 74 73 20 64 61 74 61 62  ame of its datab
11a80 61 73 65 2e 20 5e 28 49 66 20 6e 6f 20 64 61 74  ase. ^(If no dat
11a90 61 62 61 73 65 20 69 73 20 73 70 65 63 69 66 69  abase is specifi
11aa0 65 64 20 61 73 20 70 61 72 74 0a 20 20 6f 66 20  ed as part.  of 
11ab0 74 68 65 20 6f 62 6a 65 63 74 20 72 65 66 65 72  the object refer
11ac0 65 6e 63 65 2c 20 74 68 65 6e 20 53 51 4c 69 74  ence, then SQLit
11ad0 65 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6d  e searches the m
11ae0 61 69 6e 2c 20 74 65 6d 70 20 61 6e 64 20 61 6c  ain, temp and al
11af0 6c 20 61 74 74 61 63 68 65 64 0a 20 20 64 61 74  l attached.  dat
11b00 61 62 61 73 65 73 20 66 6f 72 20 61 6e 20 6f 62  abases for an ob
11b10 6a 65 63 74 20 77 69 74 68 20 61 20 6d 61 74 63  ject with a matc
11b20 68 69 6e 67 20 6e 61 6d 65 2e 20 54 68 65 20 74  hing name. The t
11b30 65 6d 70 20 64 61 74 61 62 61 73 65 20 69 73 20  emp database is 
11b40 73 65 61 72 63 68 65 64 0a 20 20 66 69 72 73 74  searched.  first
11b50 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  , followed by th
11b60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
11b70 20 66 6f 6c 6c 6f 77 65 64 20 61 6c 6c 20 61 74   followed all at
11b80 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
11b90 20 69 6e 20 74 68 65 0a 20 20 6f 72 64 65 72 20   in the.  order 
11ba0 74 68 61 74 20 74 68 65 79 20 77 65 72 65 20 61  that they were a
11bb0 74 74 61 63 68 65 64 2e 20 54 68 65 20 72 65 66  ttached. The ref
11bc0 65 72 65 6e 63 65 20 72 65 73 6f 6c 76 65 73 20  erence resolves 
11bd0 74 6f 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  to the first mat
11be0 63 68 0a 20 20 66 6f 75 6e 64 2e 29 5e 20 46 6f  ch.  found.)^ Fo
11bf0 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65  r example:..<pre
11c00 3e 5e 28 0a 20 20 20 20 20 20 2f 2a 20 41 64 64  >^(.      /* Add
11c10 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 27   a table named '
11c20 74 31 27 20 74 6f 20 74 68 65 20 74 65 6d 70 2c  t1' to the temp,
11c30 20 6d 61 69 6e 20 61 6e 64 20 61 6e 20 61 74 74   main and an att
11c40 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 2a  ached database *
11c50 2f 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  /.      ATTACH '
11c60 66 69 6c 65 2e 64 62 27 20 41 53 20 61 75 78 3b  file.db' AS aux;
11c70 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
11c80 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20  BLE t1(x, y);.  
11c90 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
11ca0 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a  TABLE t1(x, y);.
11cb0 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
11cc0 4c 45 20 61 75 78 2e 74 31 28 78 2c 20 79 29 3b  LE aux.t1(x, y);
11cd0 0a 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42  ..      DROP TAB
11ce0 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f  LE t1;         /
11cf0 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20  * Drop table in 
11d00 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 2a 2f  temp database */
11d10 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
11d20 45 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  E t1;         /*
11d30 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 6d   Drop table in m
11d40 61 69 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  ain database */.
11d50 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45        DROP TABLE
11d60 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   t1;         /* 
11d70 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 61 75  Drop table in au
11d80 78 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 29 5e  x database */.)^
11d90 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49  </pre>..<p>.  ^I
11da0 66 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  f a database nam
11db0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
11dc0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 6f 62 6a  s part of an obj
11dd0 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 69  ect reference, i
11de0 74 20 6d 75 73 74 20 62 65 0a 20 20 65 69 74 68  t must be.  eith
11df0 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72 20 22 74  er "main", or "t
11e00 65 6d 70 22 20 6f 72 20 74 68 65 20 6e 61 6d 65  emp" or the name
11e10 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
11e20 64 61 74 61 62 61 73 65 2e 20 5e 4c 69 6b 65 20  database. ^Like 
11e30 6f 74 68 65 72 0a 20 20 53 51 4c 20 69 64 65 6e  other.  SQL iden
11e40 74 69 66 69 65 72 73 2c 20 64 61 74 61 62 61 73  tifiers, databas
11e50 65 20 6e 61 6d 65 73 20 61 72 65 20 63 61 73 65  e names are case
11e60 2d 69 6e 73 65 6e 73 69 74 69 76 65 2e 20 5e 49  -insensitive. ^I
11e70 66 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  f a database nam
11e80 65 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64  e.  is specified
11e90 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20  , then only the 
11ea0 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 20 69  named database i
11eb0 73 20 73 65 61 72 63 68 65 64 20 66 6f 72 20 74  s searched for t
11ec0 68 65 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e  he named object.
11ed0 0a 0a 3c 70 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a  ..<p>.  Most obj
11ee0 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 6d  ect references m
11ef0 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 20  ay only resolve 
11f00 74 6f 20 61 20 73 70 65 63 69 66 69 63 20 74 79  to a specific ty
11f10 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 28 66 6f  pe of object (fo
11f20 72 0a 20 20 65 78 61 6d 70 6c 65 20 61 20 72 65  r.  example a re
11f30 66 65 72 65 6e 63 65 20 74 68 61 74 20 69 73 20  ference that is 
11f40 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54  part of a DROP T
11f50 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 6d  ABLE statement m
11f60 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 0a  ay only resolve.
11f70 20 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 62 6a    to a table obj
11f80 65 63 74 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ect, not an inde
11f90 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
11fa0 65 77 29 2e 20 48 6f 77 65 76 65 72 20 69 6e 20  ew). However in 
11fb0 73 6f 6d 65 20 63 6f 6e 74 65 78 74 73 20 0a 20  some contexts . 
11fc0 20 28 65 2e 67 2e 20 5b 52 45 49 4e 44 45 58 5d   (e.g. [REINDEX]
11fd0 29 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65  ) an object refe
11fe0 72 65 6e 63 65 20 6d 61 79 20 62 65 20 72 65 73  rence may be res
11ff0 6f 6c 76 65 20 74 6f 20 6d 6f 72 65 20 74 68 61  olve to more tha
12000 6e 20 6f 6e 65 20 74 79 70 65 0a 20 20 6f 66 20  n one type.  of 
12010 6f 62 6a 65 63 74 2e 20 5e 57 68 65 6e 20 73 65  object. ^When se
12020 61 72 63 68 69 6e 67 20 64 61 74 61 62 61 73 65  arching database
12030 20 73 63 68 65 6d 61 73 20 66 6f 72 20 61 20 6e   schemas for a n
12040 61 6d 65 64 20 6f 62 6a 65 63 74 2c 20 6f 62 6a  amed object, obj
12050 65 63 74 73 20 6f 66 0a 20 20 74 79 70 65 73 20  ects of.  types 
12060 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 75  that cannot be u
12070 73 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  sed in the conte
12080 78 74 20 6f 66 20 74 68 65 20 72 65 66 65 72 65  xt of the refere
12090 6e 63 65 20 61 72 65 20 61 6c 77 61 79 73 20 0a  nce are always .
120a0 20 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c    ignored...<tcl
120b0 3e 0a 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 23 23 23 23 23 23  ################
120f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12100 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e  .Section EXPLAIN
12110 20 65 78 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e   explain EXPLAIN
12120 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
12130 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  sql-stmt.</tcl>.
12140 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74  .<p>^An SQL stat
12150 65 6d 65 6e 74 20 63 61 6e 20 62 65 20 70 72 65  ement can be pre
12160 63 65 64 65 64 20 62 79 20 74 68 65 20 6b 65 79  ceded by the key
12170 77 6f 72 64 20 22 45 58 50 4c 41 49 4e 22 20 6f  word "EXPLAIN" o
12180 72 0a 62 79 20 74 68 65 20 70 68 72 61 73 65 20  r.by the phrase 
12190 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
121a0 4c 41 4e 22 2e 20 20 5e 45 69 74 68 65 72 20 6d  LAN".  ^Either m
121b0 6f 64 69 66 69 63 61 74 69 6f 6e 20 63 61 75 73  odification caus
121c0 65 73 20 74 68 65 0a 53 51 4c 20 73 74 61 74 65  es the.SQL state
121d0 6d 65 6e 74 20 74 6f 20 62 65 68 61 76 65 20 61  ment to behave a
121e0 73 20 61 20 71 75 65 72 79 20 61 6e 64 20 74 6f  s a query and to
121f0 20 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74   return informat
12200 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20 74 68  ion about.how th
12210 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
12220 77 6f 75 6c 64 20 68 61 76 65 20 6f 70 65 72 61  would have opera
12230 74 65 64 20 69 66 20 74 68 65 20 45 58 50 4c 41  ted if the EXPLA
12240 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68  IN keyword or.ph
12250 72 61 73 65 20 68 61 64 20 62 65 65 6e 20 6f 6d  rase had been om
12260 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  itted.</p>..<p>T
12270 68 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 45  he output from E
12280 58 50 4c 41 49 4e 20 61 6e 64 20 45 58 50 4c 41  XPLAIN and EXPLA
12290 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 73  IN QUERY PLAN is
122a0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e   intended for.in
122b0 74 65 72 61 63 74 69 76 65 20 61 6e 61 6c 79 73  teractive analys
122c0 69 73 20 61 6e 64 20 74 72 6f 75 62 6c 65 73 68  is and troublesh
122d0 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68  ooting only.  Th
122e0 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
122f0 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61 74 20   .output format 
12300 61 72 65 20 73 75 62 6a 65 63 74 20 74 6f 20 63  are subject to c
12310 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72  hange from one r
12320 65 6c 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65  elease of SQLite
12330 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 41 70   to the next..Ap
12340 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c  plications shoul
12350 64 20 6e 6f 74 20 75 73 65 20 45 58 50 4c 41 49  d not use EXPLAI
12360 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20 51 55 45  N or EXPLAIN QUE
12370 52 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68  RY PLAN since.th
12380 65 69 72 20 65 78 61 63 74 20 62 65 68 61 76 69  eir exact behavi
12390 6f 72 20 69 73 20 76 61 72 69 61 62 6c 65 20 61  or is variable a
123a0 6e 64 20 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c  nd only partiall
123b0 79 20 64 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70  y documented.</p
123c0 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
123d0 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
123e0 61 70 70 65 61 72 73 20 62 79 20 69 74 73 65 6c  appears by itsel
123f0 66 20 69 74 20 63 61 75 73 65 73 20 74 68 65 20  f it causes the 
12400 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68  statement.to beh
12410 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20 74  ave as a query t
12420 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
12430 73 65 71 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69  sequence of .[vi
12440 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e  rtual machine in
12450 73 74 72 75 63 74 69 6f 6e 73 5d 20 69 74 20 77  structions] it w
12460 6f 75 6c 64 20 68 61 76 65 20 75 73 65 64 20 74  ould have used t
12470 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63 6f  o execute the co
12480 6d 6d 61 6e 64 20 68 61 64 0a 74 68 65 20 45 58  mmand had.the EX
12490 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f  PLAIN keyword no
124a0 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e 20  t been present. 
124b0 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  ^When the EXPLAI
124c0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70 68 72  N QUERY PLAN phr
124d0 61 73 65 0a 61 70 70 65 61 72 73 2c 20 74 68 65  ase.appears, the
124e0 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
124f0 6e 73 20 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e  ns high-level in
12500 66 6f 72 6d 61 74 69 6f 6e 20 72 65 67 61 72 64  formation regard
12510 69 6e 67 20 74 68 65 20 71 75 65 72 79 0a 70 6c  ing the query.pl
12520 61 6e 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61  an that would ha
12530 76 65 20 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54  ve been used...T
12540 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
12550 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73   PLAN command is
12560 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 0a 5b   described in .[
12570 65 78 70 6c 61 69 6e 20 71 75 65 72 79 20 70 6c  explain query pl
12580 61 6e 7c 6d 6f 72 65 20 64 65 74 61 69 6c 20 68  an|more detail h
12590 65 72 65 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ere]...<tcl>.###
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 23 23 23 23 23 23 23 23 23 23 23  ################
125e0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
125f0 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ion expression e
12600 78 70 72 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e  xpr {*expression
12610 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 73 79 6e   {expression syn
12620 74 61 78 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  tax}}..Recursive
12630 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78  BubbleDiagram ex
12640 70 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  pr.</tcl>..<p>Th
12650 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69  is section is di
12660 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
12670 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f   others.  Most o
12680 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66  ther sections of
12690 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74  .this document t
126a0 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72  alks about a par
126b0 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d  ticular SQL comm
126c0 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74 69  and.  This secti
126d0 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b  on does.not talk
126e0 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c   about a standal
126f0 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20  one command but 
12700 61 62 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f  about "expressio
12710 6e 73 22 20 77 68 69 63 68 20 61 72 65 20 0a 73  ns" which are .s
12720 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20  ubcomponents of 
12730 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61  most other comma
12740 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  nds.</p>..<tcl>h
12750 64 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e 61 72  d_fragment binar
12760 79 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65  yops {binary ope
12770 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  rators}</tcl>.<h
12780 33 3e 4f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  3>Operators</h3>
12790 0a 3c 70 3e 5e 28 53 51 4c 69 74 65 20 75 6e 64  .<p>^(SQLite und
127a0 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c  erstands the fol
127b0 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70  lowing binary op
127c0 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65  erators, in orde
127d0 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74  r from.highest t
127e0 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65  o lowest precede
127f0 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nce:</p>..<block
12800 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e  quote><pre>.<fon
12810 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30  t color="#2c2cf0
12820 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f  "><big>||.*    /
12830 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74      %.+    -.&lt
12840 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b  ;&lt;   &gt;&gt;
12850 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c     &amp;    |.&l
12860 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67  t;    &lt;=   &g
12870 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20  t;    &gt;=.=   
12880 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26   ==   !=   &lt;&
12890 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 53 20 20  gt;   </big>IS  
128a0 20 49 53 20 4e 4f 54 20 20 20 49 4e 20 20 20 4c   IS NOT   IN   L
128b0 49 4b 45 20 20 20 47 4c 4f 42 20 20 20 4d 41 54  IKE   GLOB   MAT
128c0 43 48 20 20 20 52 45 47 45 58 50 0a 41 4e 44 20  CH   REGEXP.AND 
128d0 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70    .OR</font>.</p
128e0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
128f0 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70 6f 72 74  )^..<p>^(Support
12900 65 64 20 75 6e 61 72 79 20 70 72 65 66 69 78 20  ed unary prefix 
12910 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 74 68  operators are th
12920 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ese:</p>..<block
12930 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e  quote><pre>.<fon
12940 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30  t color="#2c2cf0
12950 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20  "><big>-    +   
12960 20 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c   ~    NOT</big><
12970 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
12980 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 74  lockquote>)^..<t
12990 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
129a0 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f 4c 4c 41 54  ollateop {COLLAT
129b0 45 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  E operator}</tcl
129c0 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  >.<p>^The COLLAT
129d0 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  E operator is a 
129e0 75 6e 61 72 79 20 70 6f 73 74 66 69 78 0a 6f 70  unary postfix.op
129f0 65 72 61 74 6f 72 20 74 68 61 74 20 61 73 73 69  erator that assi
12a00 67 6e 73 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67  gns a [collating
12a10 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 61 6e   sequence] to an
12a20 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 54 68   expression..^Th
12a30 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
12a40 6f 72 20 68 61 73 20 61 20 68 69 67 68 65 72 20  or has a higher 
12a50 70 72 65 63 65 64 65 6e 63 65 20 28 62 69 6e 64  precedence (bind
12a60 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79 29 20  s more tightly) 
12a70 74 68 61 6e 20 61 6e 79 0a 62 69 6e 61 72 79 20  than any.binary 
12a80 6f 70 65 72 61 74 6f 72 20 61 6e 64 20 61 6e 79  operator and any
12a90 20 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f 70   unary prefix op
12aa0 65 72 61 74 6f 72 20 65 78 63 65 70 74 20 22 7e  erator except "~
12ab0 22 2e 0a 28 43 4f 4c 4c 41 54 45 20 61 6e 64 20  "..(COLLATE and 
12ac0 22 7e 22 20 61 72 65 20 61 73 73 6f 63 69 61 74  "~" are associat
12ad0 69 76 65 20 73 6f 20 74 68 65 69 72 20 62 69 6e  ive so their bin
12ae0 64 69 6e 67 20 6f 72 64 65 72 20 64 6f 65 73 20  ding order does 
12af0 6e 6f 74 20 6d 61 74 74 65 72 2e 29 0a 5e 54 68  not matter.).^Th
12b00 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
12b10 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20  ence set by the 
12b20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
12b30 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63   overrides the.c
12b40 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
12b50 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
12b60 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  the COLLATE clau
12b70 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63  se in a table.[c
12b80 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
12b90 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c  ]..See the [coll
12ba0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20  ating sequence| 
12bb0 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73  detailed discuss
12bc0 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67  ion on collating
12bd0 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74   sequences].in t
12be0 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44  he [datatype | D
12bf0 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74  atatype In SQLit
12c00 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  e3] document for
12c10 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
12c20 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  rmation..</p>..<
12c30 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70  tcl>hd_puts ".<p
12c40 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72  >^The unary oper
12c50 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b  ator [Operator +
12c60 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e  ] is a no-op.  ^
12c70 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65  It can be applie
12c80 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75  d.to strings, nu
12c90 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20  mbers, blobs or 
12ca0 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61  NULL and it alwa
12cb0 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73  ys returns a res
12cc0 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d  ult.with the sam
12cd0 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f  e value as the o
12ce0 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
12cf0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
12d00 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
12d10 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
12d20 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
12d30 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
12d40 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62  .  ^Equals can b
12d50 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
12d60 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
12d70 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
12d80 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e  or ==]..^The non
12d90 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72  -equals operator
12da0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b   can be either.[
12db0 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20  Operator !=] or 
12dc0 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26  [Operator {&lt;&
12dd0 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65  gt;}]..^The [Ope
12de0 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74  rator ||] operat
12df0 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e  or is \"concaten
12e00 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73  ate\" - it joins
12e10 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77   together.the tw
12e20 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73  o strings of its
12e30 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20   operands..^The 
12e40 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
12e50 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68  or %] outputs th
12e60 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  e value of its l
12e70 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
12e80 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
12e90 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  erand.</p>..<p>^
12ea0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
12eb0 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
12ec0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e 75  r is either a nu
12ed0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a  meric value or .
12ee0 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72  NULL, except for
12ef0 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
12f00 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
12f10 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
12f20 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65  always .evaluate
12f30 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c  s to either NULL
12f40 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75 65   or a text value
12f50 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d  .</p>"..hd_fragm
12f60 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49  ent {isisnot} {I
12f70 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20  S operator} {IS 
12f80 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68  NOT operator}..h
12f90 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20  d_puts "<p>^The 
12fa0 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
12fb0 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
12fc0 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20  NOT}] operators 
12fd0 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61  work.like [Opera
12fe0 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72  tor =] and [Oper
12ff0 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20  ator !=] except 
13000 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68  when one or both
13010 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73   of the.operands
13020 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74   are NULL. ^In t
13030 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74  his case, if bot
13040 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
13050 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  ULL, then the.IS
13060 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
13070 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29 20  tes to 1 (true) 
13080 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
13090 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
130a0 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20  s.to 0 (false). 
130b0 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ^If one operand 
130c0 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20  is NULL and the 
130d0 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
130e0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
130f0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
13100 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68  0 (false) and th
13110 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
13120 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e  r is 1 (true)..^
13130 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
13140 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20  le for an IS or 
13150 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f  IS NOT expressio
13160 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f  n to evaluate to
13170 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72   NULL..^Operator
13180 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20  s [Operator IS] 
13190 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49  and [Operator {I
131a0 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65  S NOT}] have the
131b0 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63   same .precedenc
131c0 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d  e as [Operator =
131d0 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ]."..<tcl>hd_fra
131e0 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b  gment litvalue {
131f0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f  literal value}</
13200 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c  tcl>.<h3>Literal
13210 20 56 61 6c 75 65 73 20 28 43 6f 6e 73 74 61 6e   Values (Constan
13220 74 73 29 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 6c  ts)</h3>.<p>.A l
13230 69 74 65 72 61 6c 20 76 61 6c 75 65 20 72 65 70  iteral value rep
13240 72 65 73 65 6e 74 73 20 61 20 63 6f 6e 73 74 61  resents a consta
13250 6e 74 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c  nt..^Literal val
13260 75 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67  ues may be integ
13270 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ers, floating po
13280 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72  int numbers, str
13290 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20  ings,.BLOBs, or 
132a0 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a 54 68 65 20 73  NULLs..<p>.The s
132b0 79 6e 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65  yntax for intege
132c0 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70  r and floating p
132d0 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63  oint literals (c
132e0 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d  ollectively."num
132f0 65 72 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20  eric literals") 
13300 69 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20  is shown by the 
13310 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61  following diagra
13320 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  m:</p>..<tcl>Bub
13330 62 6c 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72  bleDiagram numer
13340 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e  ic-literal</tcl>
13350 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d  ..<p>.^(If a num
13360 65 72 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73  eric literal has
13370 20 61 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74   a decimal point
13380 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69   or an exponenti
13390 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 72 20  ation.clause or 
133a0 69 66 20 69 74 73 20 6d 61 67 6e 69 74 75 64 65  if its magnitude
133b0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 2d 39   is less than -9
133c0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
133d0 30 38 20 6f 72 0a 67 72 65 61 74 65 72 20 74 68  08 or.greater th
133e0 61 6e 20 39 32 32 33 33 37 32 30 33 36 38 35 34  an 9223372036854
133f0 37 37 35 38 30 37 2c 20 74 68 65 6e 20 69 74 20  775807, then it 
13400 69 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  is a floating po
13410 69 6e 74 20 6c 69 74 65 72 61 6c 2e 0a 4f 74 68  int literal..Oth
13420 65 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20  erwise is it is 
13430 61 6e 20 20 69 6e 74 65 67 65 72 20 6c 69 74 65  an  integer lite
13440 72 61 6c 2e 29 5e 0a 5e 54 68 65 20 22 45 22 20  ral.)^.^The "E" 
13450 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20 62  character that b
13460 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e 65  egins the expone
13470 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20  ntiation.clause 
13480 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  of a floating po
13490 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e 20  int literal can 
134a0 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72 20  be either upper 
134b0 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a 5e  or lower case..^
134c0 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74  (The "." charact
134d0 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
134e0 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61  d .as the decima
134f0 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20  l point even if 
13500 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  the locale setti
13510 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22  ng specifies ","
13520 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d   for.this role -
13530 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20   the use of "," 
13540 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20  for the decimal 
13550 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75  point would resu
13560 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20  lt in.syntactic 
13570 61 6d 62 69 67 75 69 74 79 2e 29 5e 0a 0a 3c 74  ambiguity.)^..<t
13580 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 68  cl>hd_fragment h
13590 65 78 69 6e 74 20 7b 68 65 78 61 64 65 63 69 6d  exint {hexadecim
135a0 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72  al integer liter
135b0 61 6c 73 7d 20 7b 68 65 78 61 64 65 63 69 6d 61  als} {hexadecima
135c0 6c 20 69 6e 74 65 67 65 72 73 7d 3c 2f 74 63 6c  l integers}</tcl
135d0 3e 0a 3c 70 3e 5e 48 65 78 61 64 65 63 69 6d 61  >.<p>^Hexadecima
135e0 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61  l integer litera
135f0 6c 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20 43 2d  ls follow the C-
13600 6c 61 6e 67 75 61 67 65 20 6e 6f 74 61 74 69 6f  language notatio
13610 6e 20 6f 66 0a 22 30 78 22 20 6f 72 20 22 30 58  n of."0x" or "0X
13620 22 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 68 65  " followed by he
13630 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74 73  xadecimal digits
13640 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
13650 30 78 31 32 33 34 20 6d 65 61 6e 73 20 74 68 65  0x1234 means the
13660 20 73 61 6d 65 20 61 73 20 34 36 36 30 0a 61 6e   same as 4660.an
13670 64 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30  d 0x800000000000
13680 30 30 30 30 20 6d 65 61 6e 73 20 74 68 65 20 73  0000 means the s
13690 61 6d 65 20 61 73 20 2d 39 32 32 33 33 37 32 30  ame as -92233720
136a0 33 36 38 35 34 37 37 35 38 30 38 2e 0a 20 5e 28  36854775808.. ^(
136b0 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  Hexadecimal inte
136c0 67 65 72 20 6c 69 74 65 72 61 6c 73 20 61 72 65  ger literals are
136d0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
136e0 36 34 2d 62 69 74 0a 74 77 6f 27 73 2d 63 6f 6d  64-bit.two's-com
136f0 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73  plement integers
13700 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 6c 69   and are thus li
13710 6d 69 74 65 64 0a 74 6f 20 73 69 78 74 65 65 6e  mited.to sixteen
13720 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
13730 69 74 73 20 6f 66 20 70 72 65 63 69 73 69 6f 6e  its of precision
13740 2e 29 5e 0a 53 75 70 70 6f 72 74 20 66 6f 72 20  .)^.Support for 
13750 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
13760 67 65 72 73 20 77 61 73 20 61 64 64 65 64 20 74  gers was added t
13770 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  o SQLite version
13780 20 33 2e 38 2e 36 2e 0a 5e 46 6f 72 20 62 61 63   3.8.6..^For bac
13790 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
137a0 6c 69 74 79 2c 20 74 68 65 20 22 30 78 22 20 68  lity, the "0x" h
137b0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
137c0 65 72 0a 6e 6f 74 61 74 69 6f 6e 20 69 73 20 6f  er.notation is o
137d0 6e 6c 79 20 75 6e 64 65 72 73 74 6f 6f 64 20 62  nly understood b
137e0 79 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  y the SQL langua
137f0 67 65 20 70 61 72 73 65 72 2c 20 6e 6f 74 20 62  ge parser, not b
13800 79 20 74 68 65 0a 74 79 70 65 20 63 6f 6e 76 65  y the.type conve
13810 72 73 69 6f 6e 73 20 72 6f 75 74 69 6e 65 73 2e  rsions routines.
13820 0a 5e 28 53 74 72 69 6e 67 20 76 61 72 69 61 62  .^(String variab
13830 6c 65 73 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  les that.contain
13840 20 74 65 78 74 20 66 6f 72 6d 61 74 74 65 64 20   text formatted 
13850 6c 69 6b 65 20 68 65 78 61 64 65 63 69 6d 61 6c  like hexadecimal
13860 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6e 6f   integers are no
13870 74 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  t.interpreted as
13880 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
13890 65 67 65 72 73 20 77 68 65 6e 20 63 6f 65 72 63  egers when coerc
138a0 69 6e 67 20 74 68 65 20 73 74 72 69 6e 67 20 76  ing the string v
138b0 61 6c 75 65 0a 69 6e 74 6f 20 61 6e 20 69 6e 74  alue.into an int
138c0 65 67 65 72 20 64 75 65 20 74 6f 20 61 20 5b 43  eger due to a [C
138d0 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 20  AST expression] 
138e0 6f 72 20 66 6f 72 20 61 20 5b 63 6f 6c 75 6d 6e  or for a [column
138f0 20 61 66 66 69 6e 69 74 79 5d 0a 74 72 61 6e 73   affinity].trans
13900 66 6f 72 6d 61 74 69 6f 6e 20 6f 72 20 70 72 69  formation or pri
13910 6f 72 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67  or to performing
13920 20 61 20 6e 75 6d 65 72 69 63 20 6f 70 65 72 61   a numeric opera
13930 74 69 6f 6e 20 6f 72 20 66 6f 72 0a 61 6e 79 20  tion or for.any 
13940 6f 74 68 65 72 20 72 75 6e 2d 74 69 6d 65 20 63  other run-time c
13950 6f 6e 76 65 72 73 69 6f 6e 73 2e 29 5e 20 20 5e  onversions.)^  ^
13960 28 57 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 61  (When coercing a
13970 0a 73 74 72 69 6e 67 20 76 61 6c 75 65 20 69 6e  .string value in
13980 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61   the format of a
13990 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
139a0 65 67 65 72 20 69 6e 74 6f 20 61 6e 20 69 6e 74  eger into an int
139b0 65 67 65 72 0a 76 61 6c 75 65 2c 20 74 68 65 20  eger.value, the 
139c0 63 6f 6e 76 65 72 73 69 6f 6e 20 70 72 6f 63 65  conversion proce
139d0 73 73 20 73 74 6f 70 73 20 77 68 65 6e 20 74 68  ss stops when th
139e0 65 20 27 78 27 20 63 68 61 72 61 63 74 65 72 20  e 'x' character 
139f0 69 73 20 73 65 65 6e 0a 73 6f 20 74 68 65 20 72  is seen.so the r
13a00 65 73 75 6c 74 69 6e 67 20 69 6e 74 65 67 65 72  esulting integer
13a10 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73   value is always
13a20 20 7a 65 72 6f 2e 29 5e 0a 5e 28 53 51 4c 69 74   zero.)^.^(SQLit
13a30 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e  e only understan
13a40 64 73 20 74 68 65 20 68 65 78 61 64 65 63 69 6d  ds the hexadecim
13a50 61 6c 20 69 6e 74 65 67 65 72 20 6e 6f 74 61 74  al integer notat
13a60 69 6f 6e 20 77 68 65 6e 20 69 74 0a 61 70 70 65  ion when it.appe
13a70 61 72 73 20 69 6e 20 74 68 65 20 53 51 4c 20 73  ars in the SQL s
13a80 74 61 74 65 6d 65 6e 74 20 74 65 78 74 2c 20 6e  tatement text, n
13a90 6f 74 20 77 68 65 6e 20 69 74 20 61 70 70 65 61  ot when it appea
13aa0 72 73 20 61 73 0a 70 61 72 74 20 6f 66 20 74 68  rs as.part of th
13ab0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
13ac0 20 64 61 74 61 62 61 73 65 2e 29 5e 0a 0a 3c 70   database.)^..<p
13ad0 3e 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e 73  > ^A string cons
13ae0 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62  tant is formed b
13af0 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a  y enclosing the.
13b00 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65  string in single
13b10 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e 41   quotes (').  ^A
13b20 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69   single quote wi
13b30 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  thin the string 
13b40 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62  can.be encoded b
13b50 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69  y putting two si
13b60 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61  ngle quotes in a
13b70 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73   row - as in Pas
13b80 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63  cal..C-style esc
13b90 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62  apes using the b
13ba0 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74  ackslash charact
13bb0 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  er are not suppo
13bc0 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65  rted because.the
13bd0 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61  y are not standa
13be0 72 64 20 53 51 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c  rd SQL...<p> ^BL
13bf0 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20  OB literals are 
13c00 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
13c10 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64  containing hexad
13c20 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a  ecimal data and.
13c30 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69  preceded by a si
13c40 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20  ngle "x" or "X" 
13c50 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28 45 78  character.  ^(Ex
13c60 61 6d 70 6c 65 3a 20 58 27 35 33 35 31 34 43 36  ample: X'53514C6
13c70 39 37 34 36 35 27 29 5e 0a 0a 3c 70 3e 0a 5e 41  97465')^..<p>.^A
13c80 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63   literal value c
13c90 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74  an also be the t
13ca0 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70  oken "NULL"..</p
13cb0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
13cc0 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61 72  ent varparam par
13cd0 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65 72  ameter parameter
13ce0 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  s {bound paramet
13cf0 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d  er} {bound param
13d00 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  eters}</tcl>.<h3
13d10 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e  >Parameters</h3>
13d20 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65  .<p>.A "variable
13d30 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22  " or "parameter"
13d40 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73   token.specifies
13d50 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69   a placeholder i
13d60 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
13d70 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68   for a .value th
13d80 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20  at is filled in 
13d90 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67  at runtime using
13da0 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69   the.[sqlite3_bi
13db0 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69  nd_blob() | sqli
13dc0 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69  te3_bind()] fami
13dd0 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65  ly of C/C++ inte
13de0 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65  rfaces..Paramete
13df0 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65  rs can take seve
13e00 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a  ral forms:.</p>.
13e10 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
13e20 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  able>.<tr>.<td a
13e30 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
13e40 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f  ign="top"><b>?</
13e50 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64  b><i>NNN</i></td
13e60 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
13e70 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75  </td>.<td>^(A qu
13e80 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c  estion mark foll
13e90 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72  owed by a number
13ea0 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64   <i>NNN</i> hold
13eb0 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65  s a spot for the
13ec0 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65  .NNN-th paramete
13ed0 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20  r.  NNN must be 
13ee0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53  between 1 and [S
13ef0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13f00 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f  LE_NUMBER].)^.</
13f10 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
13f20 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
13f30 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
13f40 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77  >?</b></td><td w
13f50 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
13f60 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20  <td>^A question 
13f70 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74  mark that is not
13f80 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
13f90 75 6d 62 65 72 20 63 72 65 61 74 65 73 20 61 20  umber creates a 
13fa0 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61  parameter.with a
13fb0 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61   number one grea
13fc0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72  ter than the lar
13fd0 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e  gest parameter n
13fe0 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73  umber already as
13ff0 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73  signed..^If this
14000 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d   means the param
14010 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67  eter number is g
14020 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c  reater than.[SQL
14030 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
14040 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20  _NUMBER], it is 
14050 61 6e 20 65 72 72 6f 72 2e 0a 54 68 69 73 20 70  an error..This p
14060 61 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20  arameter format 
14070 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  is provided for 
14080 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
14090 74 68 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  th other databas
140a0 65 0a 65 6e 67 69 6e 65 73 2e 20 20 42 75 74 20  e.engines.  But 
140b0 62 65 63 61 75 73 65 20 69 74 20 69 73 20 65 61  because it is ea
140c0 73 79 20 74 6f 20 6d 69 73 63 6f 75 6e 74 20 74  sy to miscount t
140d0 68 65 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  he question mark
140e0 73 2c 20 74 68 65 0a 75 73 65 20 6f 66 20 74 68  s, the.use of th
140f0 69 73 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72  is parameter for
14100 6d 61 74 20 69 73 20 64 69 73 63 6f 75 72 61 67  mat is discourag
14110 65 64 2e 20 20 50 72 6f 67 72 61 6d 6d 65 72 73  ed.  Programmers
14120 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 0a   are encouraged.
14130 74 6f 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68  to use one of th
14140 65 20 73 79 6d 62 6f 6c 69 63 20 66 6f 72 6d 61  e symbolic forma
14150 74 73 20 62 65 6c 6f 77 20 6f 72 20 74 68 65 20  ts below or the 
14160 3f 4e 4e 4e 20 66 6f 72 6d 61 74 20 61 62 6f 76  ?NNN format abov
14170 65 20 69 6e 73 74 65 61 64 2e 0a 3c 2f 74 64 3e  e instead..</td>
14180 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
14190 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
141a0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c  lign="top"><b>:<
141b0 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
141c0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
141d0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63  "></td>.<td>^A c
141e0 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  olon followed by
141f0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
14200 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  ame holds a spot
14210 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33   for a .[sqlite3
14220 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
14230 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d  name|named param
14240 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e  eter] with the n
14250 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e  ame :AAAA.  .^(N
14260 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20  amed parameters 
14270 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65  are also numbere
14280 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73  d. The number as
14290 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72  signed is one gr
142a0 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c  eater than.the l
142b0 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
142c0 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
142d0 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20  assigned.)^ ^If 
142e0 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
142f0 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62  arameter.would b
14300 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d  e assigned a num
14310 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ber greater than
14320 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
14330 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
14340 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54  t is.an error. T
14350 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
14360 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74 6f  n, it is best to
14370 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61   avoid mixing na
14380 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64  med and numbered
14390 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64  .parameters.</td
143a0 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
143b0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
143c0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40  align="top"><b>@
143d0 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
143e0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
143f0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e  0"></td>.<td>^An
14400 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73   "at" sign works
14410 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20   exactly like a 
14420 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68  colon, except th
14430 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74  at the name of.t
14440 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72 65  he parameter cre
14450 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f  ated is @AAAA.</
14460 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
14470 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
14480 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
14490 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >$</b><i>AAAA</i
144a0 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
144b0 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
144c0 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f  A dollar-sign fo
144d0 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
144e0 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73  ntifier name als
144f0 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  o holds a spot f
14500 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
14510 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
14520 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65  me $AAAA.  ^(The
14530 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
14540 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63 61   in this case ca
14550 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72  n include.one or
14560 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65   more occurrence
14570 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20  s of "::" and a 
14580 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20  suffix enclosed 
14590 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61  in "(...)" conta
145a0 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61  ining.any text a
145b0 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73  t all.)^  This s
145c0 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72  yntax is the for
145d0 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20  m of a variable 
145e0 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74  name in the.[htt
145f0 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20  p://www.tcl.tk/ 
14600 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e  | Tcl programmin
14610 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68  g language].  Th
14620 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68  e presence.of th
14630 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74  is syntax result
14640 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20  s from the fact 
14650 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72  that SQLite is r
14660 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78  eally a .[Tcl ex
14670 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61  tension] that ha
14680 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74  s escaped into t
14690 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f  he wild.</td>.</
146a0 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
146b0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
146c0 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  Parameters that 
146d0 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64  are not assigned
146e0 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73   values using.[s
146f0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
14700 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
14710 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64  d()] are treated
14720 0a 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b  .as NULL.  The [
14730 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
14740 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 29 5d 20  ameter_index()] 
14750 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65  interface can be
14760 20 75 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61   used.to transla
14770 74 65 20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61  te a symbolic pa
14780 72 61 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e 74  rameter name int
14790 6f 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74  o its equivalent
147a0 20 6e 75 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c   numeric index.<
147b0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78  /p>..<p>^The max
147c0 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e  imum parameter n
147d0 75 6d 62 65 72 20 69 73 20 73 65 74 20 61 74 20  umber is set at 
147e0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a  compile-time by.
147f0 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  the [SQLITE_MAX_
14800 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
14810 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e   macro.  ^(An in
14820 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61  dividual [databa
14830 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44  se connection].D
14840 20 63 61 6e 20 72 65 64 75 63 65 20 69 74 73 20   can reduce its 
14850 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65  maximum paramete
14860 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74  r number below t
14870 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
14880 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68  maximum.using th
14890 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  e [sqlite3_limit
148a0 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d  ](D, [SQLITE_LIM
148b0 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  IT_VARIABLE_NUMB
148c0 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ER],...) interfa
148d0 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ce.)^.</p>..<tcl
148e0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b  >hd_fragment lik
148f0 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74  e LIKE ESCAPE</t
14900 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45  cl>.<h3>The LIKE
14910 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74   and GLOB operat
14920 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65  ors</h3>.<p>^The
14930 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64   LIKE operator d
14940 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61  oes a pattern ma
14950 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  tching compariso
14960 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a  n. ^The operand.
14970 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
14980 74 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  the LIKE operato
14990 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70  r contains the p
149a0 61 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c  attern and the l
149b0 65 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64  eft hand.operand
149c0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74   contains the st
149d0 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67  ring to match ag
149e0 61 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72  ainst the patter
149f0 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  n...<tcl>hd_puts
14a00 20 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d   "^A percent sym
14a10 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74  bol (\"%\") in t
14a20 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20  he LIKE pattern 
14a30 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75  matches any.sequ
14a40 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20  ence of zero or 
14a50 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 20  more characters 
14a60 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20  in the string.  
14a70 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28  ^An underscore.(
14a80 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49  \"_\") in the LI
14a90 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68  KE pattern match
14aa0 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68  es any single ch
14ab0 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73  aracter in the.s
14ac0 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74  tring.  ^(Any ot
14ad0 68 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61  her character ma
14ae0 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20  tches itself or 
14af0 69 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20  its lower/upper 
14b00 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20  case.equivalent 
14b10 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e  (i.e. case-insen
14b20 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29  sitive matching)
14b30 2e 29 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51  .)^  (A bug: ^SQ
14b40 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73  Lite only.unders
14b50 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65  tands upper/lowe
14b60 72 20 63 61 73 65 20 66 6f 72 20 41 53 43 49 49  r case for ASCII
14b70 20 63 68 61 72 61 63 74 65 72 73 20 62 79 20 64   characters by d
14b80 65 66 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49  efault.  ^The.LI
14b90 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  KE operator is c
14ba0 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 62 79  ase sensitive by
14bb0 20 64 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69   default for uni
14bc0 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73 20  code characters 
14bd0 74 68 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20  that are.beyond 
14be0 74 68 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e  the ASCII range.
14bf0 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e    For example,.^
14c00 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
14c10 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26  b>'a'&nbsp;LIKE&
14c20 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20  nbsp;'A'</b>.is 
14c30 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65  TRUE but <b>'&ae
14c40 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26  lig;'&nbsp;LIKE&
14c50 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f  nbsp;'&AElig;'</
14c60 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e  b> is FALSE.)<p>
14c70 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  "</tcl>..<p>^If 
14c80 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
14c90 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
14ca0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
14cb0 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f  expression.follo
14cc0 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45 20  wing the ESCAPE 
14cd0 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61  keyword must eva
14ce0 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e  luate to a strin
14cf0 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a  g consisting of.
14d00 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  a single charact
14d10 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63  er. ^This charac
14d20 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
14d30 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
14d40 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
14d50 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
14d60 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
14d70 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73  racters. ^The es
14d80 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
14d90 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
14da0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c  cent symbol (%),
14db0 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c   underscore (_),
14dc0 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73   or a second.ins
14dd0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63  tance of the esc
14de0 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69 74  ape character it
14df0 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c  self matches a.l
14e00 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73  iteral percent s
14e10 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
14e20 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65  e, or a single e
14e30 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 2c  scape character,
14e40 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a  .respectively...
14e50 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49  <p>^The infix LI
14e60 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE operator is i
14e70 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
14e80 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63  lling the.applic
14e90 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
14ea0 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b  L functions [lik
14eb0 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
14ec0 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c  /i>)] or.[like(<
14ed0 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
14ee0 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e  ,<i>Z</i>)]</a>.
14ef0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
14f00 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  KE operator can 
14f10 62 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e  be made case sen
14f20 73 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65  sitive using the
14f30 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65  .[case_sensitive
14f40 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _like pragma].</
14f50 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
14f60 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f  ment glob GLOB</
14f70 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f  tcl>.<p>^The GLO
14f80 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69  B operator is si
14f90 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75  milar to LIKE bu
14fa0 74 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a  t uses the Unix.
14fb0 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79  file globbing sy
14fc0 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c  ntax for its wil
14fd0 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20  dcards.  ^Also, 
14fe0 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e  GLOB is case.sen
14ff0 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c  sitive, unlike L
15000 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42  IKE.  ^Both GLOB
15010 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65   and LIKE may be
15020 20 70 72 65 63 65 64 65 64 20 62 79 0a 74 68 65   preceded by.the
15030 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20   NOT keyword to 
15040 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73 65  invert the sense
15050 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e   of the test.  ^
15060 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a  The infix GLOB .
15070 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
15080 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
15090 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  ng the function.
150a0 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [glob(<i>Y</i>,<
150b0 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61  i>X</i>)] and ca
150c0 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79  n be modified by
150d0 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74   overriding.that
150e0 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   function.</p>..
150f0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
15100 20 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f   regexp REGEXP</
15110 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47  tcl>.<p>^The REG
15120 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EXP operator is 
15130 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
15140 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28   for the regexp(
15150 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
15160 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75    ^No regexp() u
15170 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
15180 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
15190 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
151a0 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
151b0 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
151c0 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
151d0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
151e0 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63 61 74  ^If an [applicat
151f0 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
15200 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20  function] named 
15210 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64 65  "regexp".is adde
15220 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74  d at run-time, t
15230 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c 2f 69  hen the "<i>X</i
15240 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c 2f 69  > REGEXP <i>Y</i
15250 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  >" operator will
15260 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .be implemented 
15270 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22 72 65  as a call to "re
15280 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  gexp(<i>Y</i>,<i
15290 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c  >X</i>)".</p>..<
152a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
152b0 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
152c0 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
152d0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
152e0 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
152f0 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
15300 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
15310 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
15320 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
15330 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
15340 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
15350 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
15360 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
15370 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
15380 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
15390 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
153a0 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
153b0 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
153c0 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
153d0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
153e0 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
153f0 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
15400 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
15410 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
15420 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
15430 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
15440 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
15450 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
15460 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
15470 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
15480 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
15490 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
154a0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
154b0 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
154c0 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
154d0 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
154e0 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
154f0 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
15500 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
15510 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
15520 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
15530 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
15540 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
15550 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
15560 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
15570 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
15580 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
15590 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
155a0 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
155b0 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
155c0 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
155d0 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
155e0 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
155f0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
15600 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
15610 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
15620 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
15630 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
15640 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
15650 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
15660 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
15670 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a  ng languages.  .
15680 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
15690 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
156a0 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
156b0 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77  en the CASE keyw
156c0 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73  ord and the.firs
156d0 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69  t WHEN keyword i
156e0 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61  s called the "ba
156f0 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  se" expression. 
15700 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62  ^There are two b
15710 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68  asic forms.of th
15720 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
15730 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20  n: those with a 
15740 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
15750 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75  and those withou
15760 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  t...<p>^In a CAS
15770 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65  E without a base
15780 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63   expression, eac
15790 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  h WHEN expressio
157a0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61  n is evaluated.a
157b0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72  nd the result tr
157c0 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65  eated as a boole
157d0 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74  an, starting wit
157e0 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61  h the leftmost a
157f0 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f  nd continuing.to
15800 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65   the right. ^The
15810 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
15820 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
15830 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  s the evaluation
15840 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70   of the THEN.exp
15850 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
15860 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
15870 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65  first WHEN expre
15880 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75  ssion that evalu
15890 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f  ates to.true. ^O
158a0 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
158b0 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e WHEN expressio
158c0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ns evaluate to t
158d0 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20  rue, the result 
158e0 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
158f0 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
15900 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
15910 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
15920 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
15930 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
15940 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
15950 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f  true, then the o
15960 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
15970 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55   NULL...<p>^A NU
15980 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e  LL result is con
15990 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77  sidered untrue w
159a0 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
159b0 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e  HEN terms...<p>^
159c0 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61  In a CASE with a
159d0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
159e0 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  , the base expre
159f0 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
15a00 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64  ed just.once and
15a10 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63   the result is c
15a20 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20  ompared against 
15a30 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  the evaluation o
15a40 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70  f each WHEN .exp
15a50 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66  ression from lef
15a60 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65  t to right. ^The
15a70 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
15a80 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ASE expression i
15a90 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f  s the .evaluatio
15aa0 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78  n of the THEN ex
15ab0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
15ac0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
15ad0 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72   first WHEN.expr
15ae0 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68  ession for which
15af0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
15b00 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  is true. ^Or, if
15b10 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
15b20 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N.expressions ev
15b30 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75  aluate to a valu
15b40 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  e equal to the b
15b50 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
15b60 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76  the result.of ev
15b70 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
15b80 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
15b90 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
15ba0 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
15bb0 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
15bc0 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
15bd0 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61  ssions produce a
15be0 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f   result equal to
15bf0 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
15c00 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c  sion,.the overal
15c10 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
15c20 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70  ...<p>^When comp
15c30 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70  aring a base exp
15c40 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20  ression against 
15c50 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  a WHEN expressio
15c60 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c  n, the same.coll
15c70 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
15c80 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55  affinity, and NU
15c90 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65  LL-handling rule
15ca0 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68  s apply as if th
15cb0 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e.base expressio
15cc0 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65  n and WHEN expre
15cd0 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63  ssion are respec
15ce0 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d  tively the left-
15cf0 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
15d00 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c  operands of an <
15d10 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69  big><b>=</b></bi
15d20 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e  g> operator.</p>
15d30 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65   ^If the base .e
15d40 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
15d50 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
15d60 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73  t of the CASE is
15d70 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75   always the resu
15d80 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  lt .of evaluatin
15d90 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
15da0 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73  ssion if it exis
15db0 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69  ts, or NULL if i
15dc0 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e  t does not...<p>
15dd0 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74  ^Both forms of t
15de0 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
15df0 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20  on use lazy, or 
15e00 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a  short-circuit, .
15e10 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e  evaluation...<p>
15e20 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  ^(The only diffe
15e30 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
15e40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
15e50 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
15e60 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69   is that .the <i
15e70 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
15e80 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65  n is evaluated e
15e90 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
15ea0 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65  he first example
15eb0 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65   but .might be e
15ec0 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c  valuated multipl
15ed0 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73  e times in the s
15ee0 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65  econd:..<ul><pre
15ef0 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
15f00 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
15f10 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
15f20 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
15f30 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
15f40 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
15f50 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
15f60 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a  D.</pre></ul>)^.
15f70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15f80 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65  nt in_op {IN ope
15f90 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f  rator} {NOT IN o
15fa0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
15fb0 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  h3>The IN and NO
15fc0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f  T IN operators</
15fd0 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61  h3>.<p>^The IN a
15fe0 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
15ff0 6f 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c  ors take a singl
16000 65 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64  e scalar operand
16010 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64   on the.left and
16020 20 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e   a vector operan
16030 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66  d on the right.f
16040 6f 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c  ormed by an expl
16050 69 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72  icit list of zer
16060 6f 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72  o or more scalar
16070 73 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c  s or by a .singl
16080 65 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65  e subquery..^Whe
16090 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72  n the right oper
160a0 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  and of an IN or 
160b0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
160c0 69 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74  is a subquery, t
160d0 68 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74  he.subquery must
160e0 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72   have a single r
160f0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57  esult column..^W
16100 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70  hen the right op
16110 65 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74  erand is an empt
16120 79 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c  y set, the resul
16130 74 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65  t of IN is false
16140 20 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20   and the.result 
16150 6f 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75  of NOT IN is tru
16160 65 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  e, regardless of
16170 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e   the left operan
16180 64 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68  d and even if th
16190 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69  e.left operand i
161a0 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65  s NULL..^(The re
161b0 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72  sult of an IN or
161c0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
161d0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
161e0 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  y the following.
161f0 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72  matrix:..<center
16200 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
16210 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74  1>.<tr>.<th>Left
16220 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
16230 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
16240 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61  perand <br>conta
16250 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67  ins NULL.<th>Rig
16260 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69  ht operand <br>i
16270 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c  s an empty set.<
16280 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20  th>Left operand 
16290 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e  found <br>within
162a0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c   right operand.<
162b0 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72  th>Result of <br
162c0 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68  >IN operator.<th
162d0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e  >Result of <br>N
162e0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c  OT IN operator.<
162f0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<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 6e 6f 0a 3c 74 64 20  "center">no.<td 
16350 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
16360 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  alse.<td align="
16370 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72  center">true.<tr
16380 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
16390 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
163a0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
163b0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
163c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
163d0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
163e0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
163f0 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
16400 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16410 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
16420 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16430 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16440 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
16450 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
16460 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16470 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16480 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
16490 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20  enter">true.<td 
164a0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
164b0 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  alse.<tr>.<td al
164c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
164d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
164e0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<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 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16520 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
16530 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
16540 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  LL.<tr>.<td alig
16550 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
16560 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16570 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
16580 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
16590 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
165a0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
165b0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
165c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
165d0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
165e0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62  nter">NULL.</tab
165f0 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
16600 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53  .<p>^Note that S
16610 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
16620 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
16630 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61  ist of scalar va
16640 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68  lues on.the righ
16650 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61  t-hand side of a
16660 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
16670 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e  perator to be an
16680 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a   empty list but.
16690 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64  most other SQL d
166a0 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65  atabase database
166b0 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65   engines and the
166c0 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20   SQL92 standard 
166d0 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74  require.the list
166e0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c   to contain at l
166f0 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  east one element
16700 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
16710 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45  ragment in_op {E
16720 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20  XISTS operator} 
16730 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72  {NOT EXISTS oper
16740 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
16750 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  The EXISTS opera
16760 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  tor</h3>..<p>^Th
16770 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16780 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74  r always evaluat
16790 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  es to one of the
167a0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
167b0 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78  0 .and 1. ^If ex
167c0 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
167d0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  CT statement spe
167e0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69  cified as the ri
167f0 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e  ght-hand .operan
16800 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  d of the EXISTS 
16810 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72  operator would r
16820 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  eturn one or mor
16830 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  e rows, then the
16840 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72  .EXISTS operator
16850 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e   evaluates to 1.
16860 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74   ^If executing t
16870 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20  he SELECT would 
16880 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61  return.no rows a
16890 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20  t all, then the 
168a0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
168b0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20  evaluates to 0. 
168c0 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
168d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65   of columns in e
168e0 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64  ach row returned
168f0 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
16900 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79  tatement.(if any
16910 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66  ) and the specif
16920 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e  ic values return
16930 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63  ed have no effec
16940 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
16950 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f  .of the EXISTS o
16960 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72  perator. ^In par
16970 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f  ticular, rows co
16980 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61  ntaining NULL va
16990 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e  lues are.not han
169a0 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65  dled any differe
169b0 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77  ntly from rows w
169c0 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75  ithout NULL valu
169d0 65 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20  es...<h3>Scalar 
169e0 53 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a  Subqueries</h3>.
169f0 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20  .<p>^A [SELECT] 
16a00 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73  statement enclos
16a10 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65  ed in parenthese
16a20 73 20 6d 61 79 20 61 70 70 65 61 72 20 61 73 20  s may appear as 
16a30 61 20 73 63 61 6c 61 72 0a 71 75 61 6e 74 69 74  a scalar.quantit
16a40 79 2e 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75  y. ^A [SELECT] u
16a50 73 65 64 20 61 73 20 61 20 73 63 61 6c 61 72 20  sed as a scalar 
16a60 71 75 61 6e 74 69 74 79 20 6d 75 73 74 20 72 65  quantity must re
16a70 74 75 72 6e 20 61 20 72 65 73 75 6c 74 20 73 65  turn a result se
16a80 74 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  t.with a single 
16a90 63 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73  column. ^The res
16aa0 75 6c 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ult of the expre
16ab0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 76 61 6c  ssion is the val
16ac0 75 65 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63  ue of the.only c
16ad0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 69 72  olumn in the fir
16ae0 73 74 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20  st row returned 
16af0 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
16b00 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65  atement. ^If the
16b10 20 53 45 4c 45 43 54 20 0a 79 69 65 6c 64 73 20   SELECT .yields 
16b20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65  more than one re
16b30 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f  sult row, all ro
16b40 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69 72  ws after the fir
16b50 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20  st are ignored. 
16b60 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79  ^If.the SELECT y
16b70 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74  ields no rows, t
16b80 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  hen the value of
16b90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16ba0 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c  is NULL..^(The L
16bb0 49 4d 49 54 20 6f 66 20 61 20 73 63 61 6c 61 72  IMIT of a scalar
16bc0 20 73 75 62 71 75 65 72 79 20 69 73 20 61 6c 77   subquery is alw
16bd0 61 79 73 20 31 2e 0a 41 6e 79 20 6f 74 68 65 72  ays 1..Any other
16be0 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 67 69 76   LIMIT value giv
16bf0 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 74 65  en in the SQL te
16c00 78 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 29 5e  xt is ignored.)^
16c10 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20  ..<p>^All types 
16c20 6f 66 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  of [SELECT] stat
16c30 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
16c40 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 5b   aggregate and [
16c50 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
16c60 0a 71 75 65 72 69 65 73 20 28 71 75 65 72 69 65  .queries (querie
16c70 73 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20  s with keywords 
16c80 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58  like UNION or EX
16c90 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65  CEPT) are allowe
16ca0 64 20 61 73 20 73 63 61 6c 61 72 0a 73 75 62 71  d as scalar.subq
16cb0 75 65 72 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62  ueries...<h3>Tab
16cc0 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c  le Column Names<
16cd0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75  /h3>..<p>^A colu
16ce0 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61  mn name can be a
16cf0 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20  ny of the names 
16d00 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b  defined in the [
16d10 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74  CREATE TABLE].st
16d20 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f  atement or one o
16d30 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
16d40 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
16d50 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f  ers: "<b>ROWID</
16d60 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e  b>",."<b>OID</b>
16d70 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44  ", or "<b>_ROWID
16d80 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72  _</b>"..^The thr
16d90 65 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ee special ident
16da0 69 66 69 65 72 73 20 64 65 73 63 72 69 62 65 20  ifiers describe 
16db0 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67  the.unique integ
16dc0 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77  er key (the [row
16dd0 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20  id]) associated 
16de0 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20  with every .row 
16df0 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 20 61  of every table a
16e00 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76  nd so are not av
16e10 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48  ailable on [WITH
16e20 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
16e30 73 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20  s..^The special 
16e40 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
16e50 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
16e60 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52  w key if the [CR
16e70 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
16e80 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64  ement does not d
16e90 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c  efine a real col
16ea0 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d  umn with the sam
16eb0 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77  e name..^The row
16ec0 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  id can be used a
16ed0 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c 61  nywhere a regula
16ee0 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20  r.column can be 
16ef0 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  used.</p>..<p>^A
16f00 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
16f10 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74 68  ent used as eith
16f20 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62 71  er a scalar subq
16f30 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a  uery or as the .
16f40 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
16f50 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54  nd of an IN, NOT
16f60 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78   IN or EXISTS ex
16f70 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e  pression may con
16f80 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73  tain .references
16f90 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   to columns in t
16fa0 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20  he outer query. 
16fb0 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79 20  Such a subquery 
16fc0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f  is known as.a co
16fd0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
16fe0 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64  y. ^A correlated
16ff0 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65 65   subquery is ree
17000 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74 69  valuated each ti
17010 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73  me.its result is
17020 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75   required. ^An u
17030 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71  ncorrelated subq
17040 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74 65  uery is evaluate
17050 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20  d only once.and 
17060 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73 65  the result reuse
17070 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a  d as necessary..
17080 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
17090 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
170a0 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41   expression} {CA
170b0 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53 54  ST} {cast} {CAST
170c0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
170d0 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65 73  .<h3>CAST expres
170e0 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
170f0 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
17100 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43 41   of the form "CA
17110 53 54 28 26 6c 74 3b 65 78 70 72 26 67 74 3b 20  ST(&lt;expr&gt; 
17120 41 53 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65  AS &lt;type-name
17130 26 67 74 3b 29 22 0a 69 73 20 75 73 65 64 20 74  &gt;)".is used t
17140 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61  o convert the va
17150 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26  lue of &lt;expr&
17160 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65 72  gt; to .a differ
17170 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61  ent [storage cla
17180 73 73 5d 20 73 70 65 63 69 66 69 65 64 20 62 79  ss] specified by
17190 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67   &lt;type-name&g
171a0 74 3b 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e 76  t;..^A CAST conv
171b0 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c 61  ersion is simila
171c0 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  r to the convers
171d0 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70  ion that takes.p
171e0 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c  lace when a [col
171f0 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73  umn affinity] is
17200 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61   applied to a va
17210 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74 20  lue except that 
17220 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f 70  with.the CAST op
17230 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76 65  erator the conve
17240 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61 6b  rsion always tak
17250 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69 66  es place even if
17260 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 0a   the conversion.
17270 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76 65  lossy and irreve
17280 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73 20  rsible, whereas 
17290 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
172a0 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68 65  only changes the
172b0 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61 20   data type.of a 
172c0 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68 61  value if the cha
172d0 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73 20  nge is lossless 
172e0 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a  and reversible..
172f0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c 75  .<p>^If the valu
17300 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74  e of &lt;expr&gt
17310 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  ; is NULL, then 
17320 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
17330 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f  e CAST.expressio
17340 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20  n is also NULL. 
17350 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
17360 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66  storage class of
17370 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64   the result.is d
17380 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70  etermined by app
17390 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73  lying the [rules
173a0 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67   for determining
173b0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
173c0 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b 74 79 70  ] to.the &lt;typ
173d0 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 0a 3c 74 61  e-name&gt;...<ta
173e0 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
173f0 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69  r>.  <th> Affini
17400 74 79 20 6f 66 20 26 6c 74 3b 74 79 70 65 2d 6e  ty of &lt;type-n
17410 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68 3e 20 43  ame&gt;.  <th> C
17420 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65 73  onversion Proces
17430 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  sing.<tr>.  <td>
17440 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e 43   NONE .  <td> ^C
17450 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20 74  asting a value t
17460 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d  o a &lt;type-nam
17470 65 26 67 74 3b 20 77 69 74 68 20 6e 6f 20 61 66  e&gt; with no af
17480 66 69 6e 69 74 79 20 63 61 75 73 65 73 20 74 68  finity causes th
17490 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20  e value to.  be 
174a0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
174b0 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67   BLOB.  ^Casting
174c0 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69   to a BLOB consi
174d0 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61 73  sts of first cas
174e0 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65  ting.  the value
174f0 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20   to TEXT in the 
17500 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68  [encoding] of th
17510 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
17520 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e  ction, then.  in
17530 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 72  terpreting the r
17540 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65  esulting byte se
17550 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42  quence as a BLOB
17560 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54   instead of as T
17570 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  EXT...<tr>.  <td
17580 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54  > TEXT.  <td> ^T
17590 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61  o cast a BLOB va
175a0 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65  lue to TEXT, the
175b0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
175c0 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  es that make up 
175d0 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e  the.  BLOB is in
175e0 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
175f0 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20  t encoded using 
17600 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
17610 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20  oding..  <p>.   
17620 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45  ^Casting an INTE
17630 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75  GER or REAL valu
17640 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64  e into TEXT rend
17650 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61 73  ers the value as
17660 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71   if via .    [sq
17670 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
17680 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  ] except that th
17690 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54  e resulting TEXT
176a0 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64   uses the [encod
176b0 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20  ing] of.    the 
176c0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
176d0 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ion...<tr>.  <td
176e0 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57  > REAL.  <td> ^W
176f0 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
17700 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45  OB value to a RE
17710 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  AL, the value is
17720 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
17730 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
17740 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
17750 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
17760 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20   value to REAL, 
17770 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
17780 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
17790 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
177a0 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
177b0 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
177c0 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  al number is ext
177d0 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
177e0 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
177f0 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
17800 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
17810 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
17820 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
17830 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65 20   TEXT value are 
17840 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e  ignored when con
17850 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58  verging from TEX
17860 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20  T to REAL. ^(If 
17870 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20  there is.       
17880 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
17890 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
178a0 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
178b0 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ber, the result 
178c0 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  of the.        c
178d0 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30  onversion is 0.0
178e0 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  .)^..<tr>.  <td>
178f0 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20   INTEGER.  <td> 
17900 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
17910 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e  BLOB value to IN
17920 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65  TEGER, the value
17930 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
17940 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
17950 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
17960 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
17970 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  EXT value to INT
17980 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73  EGER, the longes
17990 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
179a0 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
179b0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
179c0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
179d0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
179e0 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
179f0 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
17a00 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
17a10 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
17a20 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
17a30 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
17a40 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
17a50 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65  value when conve
17a60 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rting from TEXT 
17a70 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69  to INTEGER are i
17a80 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72  gnored. ^If ther
17a90 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20  e.        is no 
17aa0 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
17ab0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17ac0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
17ad0 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ber, the result.
17ae0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
17af0 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 20  onversion is 0. 
17b00 20 5e 28 54 68 65 20 43 41 53 54 20 6f 70 65 72   ^(The CAST oper
17b10 61 74 6f 72 20 75 6e 64 65 72 73 74 61 6e 64 73  ator understands
17b20 20 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72   decimal integer
17b30 73 0a 20 20 20 20 20 20 20 20 6f 6e 6c 79 20 26  s.        only &
17b40 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72 73 69 6f  mdash; conversio
17b50 6e 20 6f 66 20 5b 68 65 78 61 64 65 63 69 6d 61  n of [hexadecima
17b60 6c 20 69 6e 74 65 67 65 72 73 5d 20 73 74 6f 70  l integers] stop
17b70 73 20 61 74 20 74 68 65 20 22 78 22 20 69 6e 20  s at the "x" in 
17b80 74 68 65 0a 20 20 20 20 20 20 20 20 22 30 78 22  the.        "0x"
17b90 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 68   prefix of the h
17ba0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
17bb0 65 72 20 73 74 72 69 6e 67 20 61 6e 64 20 74 68  er string and th
17bc0 75 73 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  us result of the
17bd0 20 0a 20 20 20 20 20 20 20 20 43 41 53 54 20 69   .        CAST i
17be0 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e  s always zero.)^
17bf0 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61  ..      <p>^A ca
17c00 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c  st of a REAL val
17c10 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47  ue into an INTEG
17c20 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68  ER results in th
17c30 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20 20  e integer.      
17c40 62 65 74 77 65 65 6e 20 74 68 65 20 52 45 41 4c  between the REAL
17c50 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20   value and zero 
17c60 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73 74 20  that is closest 
17c70 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75  to the REAL valu
17c80 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61 20 52  e..      ^If a R
17c90 45 41 4c 20 69 73 20 67 72 65 61 74 65 72 20 74  EAL is greater t
17ca0 68 61 6e 20 74 68 65 20 67 72 65 61 74 65 73 74  han the greatest
17cb0 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64   possible signed
17cc0 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28  .      integer (
17cd0 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
17ce0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 72  5807) then the r
17cf0 65 73 75 6c 74 20 69 73 20 74 68 65 20 67 72 65  esult is the gre
17d00 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 0a 20  atest possible. 
17d10 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65       signed inte
17d20 67 65 72 20 61 6e 64 20 69 66 20 74 68 65 20 52  ger and if the R
17d30 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68 61 6e  EAL is less than
17d40 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69   the least possi
17d50 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20  ble signed.     
17d60 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32 33 33   integer (-92233
17d70 37 32 30 33 36 38 35 34 37 37 35 38 30 38 29 20  72036854775808) 
17d80 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17d90 69 73 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  is the least pos
17da0 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e  sible.      sign
17db0 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20  ed integer...   
17dc0 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53     <p>Prior to S
17dd0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
17de0 38 2e 32 2c 20 63 61 73 74 69 6e 67 20 61 20 52  8.2, casting a R
17df0 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61 74 65  EAL value greate
17e00 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b 39 32  r than.      +92
17e10 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
17e20 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  7.0 into an inte
17e30 67 65 72 20 72 65 73 75 6c 74 65 64 20 69 6e 20  ger resulted in 
17e40 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74 69 76  the most negativ
17e50 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 2c  e.      integer,
17e60 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
17e70 37 35 38 30 38 2e 20 20 54 68 69 73 20 62 65 68  75808.  This beh
17e80 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e 74 20  avior was meant 
17e90 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65 0a 20  to emulate the. 
17ea0 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66       behavior of
17eb0 20 78 38 36 2f 78 36 34 20 68 61 72 64 77 61 72   x86/x64 hardwar
17ec0 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74 68 65  e when doing the
17ed0 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61 73 74   equivalent cast
17ee0 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e  ...<tr>.  <td> N
17ef0 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43  UMERIC.  <td> ^C
17f00 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 6f 72  asting a TEXT or
17f10 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
17f20 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74 20 64   NUMERIC first d
17f30 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20 20 20  oes a forced.   
17f40 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20  conversion into 
17f50 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20 66 75  REAL but then fu
17f60 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73 20 74  rther converts t
17f70 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49  he result into I
17f80 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61 6e 64  NTEGER if.   and
17f90 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e   only if the con
17fa0 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41  version from REA
17fb0 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73 20  L to INTEGER is 
17fc0 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
17fd0 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68 69 73  ersible..   This
17fe0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e   is the only con
17ff0 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20 77  text in SQLite w
18000 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49 43  here the NUMERIC
18010 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61 66   and INTEGER [af
18020 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62 65 68  finities].   beh
18030 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e  ave differently.
18040 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67  .   <p> ^Casting
18050 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54 45 47   a REAL or INTEG
18060 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45  ER value to NUME
18070 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20  RIC is a no-op, 
18080 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c 0a 20  even if a real. 
18090 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 62 65    value could be
180a0 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
180b0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
180c0 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74  ger...</tr>..</t
180d0 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  able>..<p>^Note 
180e0 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
180f0 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
18100 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20   non-BLOB value 
18110 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64  into a .BLOB and
18120 20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d   the result from
18130 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f   casting any BLO
18140 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  B value into a n
18150 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61  on-BLOB value.ma
18160 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 64  y be different d
18170 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
18180 68 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  her the database
18190 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55   [encoding] is U
181a0 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20  TF-8,.UTF-16be, 
181b0 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a 3c  or UTF-16le....<
181c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
181d0 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62 6f 6f  booleanexpr {boo
181e0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7d  lean expression}
181f0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c 65  </tcl>.<h3>Boole
18200 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  an Expressions</
18210 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20  h3>..<p>The SQL 
18220 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65  language feature
18230 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74 65 78  s several contex
18240 74 73 20 77 68 65 72 65 20 61 6e 20 65 78 70 72  ts where an expr
18250 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61 6c 75  ession is .evalu
18260 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  ated and the res
18270 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ult converted to
18280 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72 75 65   a boolean (true
18290 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c 75 65   or false) value
182a0 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78 74 73  . These.contexts
182b0 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20   are:..  <ul>.  
182c0 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 52 45    <li> the WHERE
182d0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
182e0 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ECT, UPDATE or D
182f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 2c  ELETE statement,
18300 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 4f 4e  .    <li> the ON
18310 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
18320 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20 61 20   of a join in a 
18330 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18340 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 48  ,.    <li> the H
18350 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  AVING clause of 
18360 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18370 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
18380 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
18390 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72 2c 20  an SQL trigger, 
183a0 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  and.    <li> the
183b0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 72 20   WHEN clause or 
183c0 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d 65 20  clauses of some 
183d0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
183e0 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  ..  </ul>..<p>^(
183f0 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 72  To convert the r
18400 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53 51 4c  esults of an SQL
18410 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 61   expression to a
18420 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 20   boolean value, 
18430 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63 61 73  SQLite.first cas
18440 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f  ts the result to
18450 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65   a NUMERIC value
18460 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
18470 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65 78 70   as a .[CAST exp
18480 72 65 73 73 69 6f 6e 5d 2e 20 41 20 6e 75 6d 65  ression]. A nume
18490 72 69 63 20 7a 65 72 6f 20 76 61 6c 75 65 20 28  ric zero value (
184a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20  integer value 0 
184b0 6f 72 20 72 65 61 6c 20 0a 76 61 6c 75 65 20 30  or real .value 0
184c0 2e 30 29 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .0) is considere
184d0 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e 20 20  d to be false.  
184e0 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
184f0 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a 41 6c 6c 20  still NULL..All 
18500 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72 65  other values are
18510 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
18520 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65 78  .)^..<p>^(For ex
18530 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c 75 65  ample, the value
18540 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c 20  s NULL, 0.0, 0, 
18550 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20 27 30  'english' and '0
18560 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 69 64  ' are all consid
18570 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c 73 65  ered.to be false
18580 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31 2c 20  .)^ ^(Values 1, 
18590 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31 20 61  1.0, 0.1, -0.1 a
185a0 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20 61 72  nd '1english' ar
185b0 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
185c0 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c 68 33  .be true.)^..<h3
185d0 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a  >Functions</h3>.
185e0 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
185f0 74 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66 75 6e  ts many [corefun
18600 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61  c|simple] and [a
18610 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65  ggfunc|aggregate
18620 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2e  ].SQL functions.
18630 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69    For presentati
18640 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
18650 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
18660 65 20 66 75 72 74 68 65 72 0a 73 75 62 64 69 76  e further.subdiv
18670 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72 65 66  ided into [coref
18680 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
18690 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
186a0 75 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66 75  unc|date-time fu
186b0 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69 63  nctions]..Applic
186c0 61 74 69 6f 6e 73 20 63 61 6e 20 61 64 64 20 6e  ations can add n
186d0 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c 20 77 72  ew functions, wr
186e0 69 74 74 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c 20  itten in C/C++, 
186f0 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
18700 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
18710 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  on()] interface.
18720 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69 73  .</p>..<p>^It is
18730 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
18740 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
18750 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
18760 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 0a   same name as a.
18770 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2c  simple function,
18780 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
18790 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
187a0 6e 74 73 20 66 6f 72 20 74 68 65 20 74 77 6f 20  nts for the two 
187b0 66 6f 72 6d 73 20 6f 66 20 74 68 65 0a 66 75 6e  forms of the.fun
187c0 63 74 69 6f 6e 20 61 72 65 20 64 69 66 66 65 72  ction are differ
187d0 65 6e 74 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70  ent.  ^For examp
187e0 6c 65 2c 20 74 68 65 20 5b 61 67 67 5f 6d 61 78  le, the [agg_max
187f0 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  |max()] function
18800 20 77 69 74 68 20 61 0a 73 69 6e 67 6c 65 20 61   with a.single a
18810 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  rgument is an ag
18820 67 72 65 67 61 74 65 20 61 6e 64 20 74 68 65 20  gregate and the 
18830 5b 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e  [max()] function
18840 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72   with two or mor
18850 65 0a 61 72 67 75 6d 65 6e 74 73 20 69 73 20 61  e.arguments is a
18860 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
18870 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188c0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
188d0 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d  {Core Functions}
188e0 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65   corefunc {*core
188f0 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64  func}.proc funcd
18900 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f  ef {syntax keywo
18910 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64  rds desc} {.  hd
18920 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72  _puts {<tr>}.  r
18930 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d  egsub -all {\s+}
18940 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73   [string trim $s
18950 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20  yntax] {<br />} 
18960 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
18970 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29  -all {\(([^*)]+)
18980 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69  \)} $syntax {(<i
18990 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78  >\1</i>)} syntax
189a0 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
189b0 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e  ,} $syntax {</i>
189c0 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  ,<i>} syntax.  r
189d0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c  egsub -all {<i>\
189e0 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74  .\.\.</i>} $synt
189f0 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a  ax {...} syntax.
18a00 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20 76    hd_puts "<td v
18a10 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c  align=\"top\" al
18a20 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77 69  ign=\"right\" wi
18a30 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20  dth=\"120\">".  
18a40 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
18a50 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
18a60 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
18a70 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
18a80 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
18a90 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
18aa0 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
18ab0 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
18ac0 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
18ad0 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
18ae0 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
18af0 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
18b00 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
18b10 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
18b20 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
18b30 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
18b40 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
18b50 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
18b60 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75  rds].  }.  hd_pu
18b70 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e  ts "$syntax</td>
18b80 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64  ".  hd_puts {<td
18b90 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a   valign="top">}.
18ba0 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65    hd_resolve $de
18bb0 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f  sc.  hd_puts {</
18bc0 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63  td></tr>}.}.</tc
18bd0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20  l>..<p>The core 
18be0 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20  functions shown 
18bf0 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61  below are availa
18c00 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
18c10 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74  .[datefunc | Dat
18c20 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e  e &amp; Time fun
18c30 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67  ctions] and.[agg
18c40 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  func | aggregate
18c50 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20   functions] are 
18c60 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
18c70 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69  ately.  An.appli
18c80 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e  cation may defin
18c90 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e  e additional.fun
18ca0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
18cb0 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
18cc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
18cd0 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  gine using.the [
18ce0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
18cf0 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c  unction()] API.<
18d00 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
18d10 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
18d20 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
18d30 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b  ef {abs(X)} {} {
18d40 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66  .  ^The abs(X) f
18d50 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18d60 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
18d70 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69  ue of the numeri
18d80 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20  c.  argument X. 
18d90 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73   ^Abs(X) returns
18da0 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55   NULL if X is NU
18db0 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20  LL. .  ^(Abs(X) 
18dc0 72 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20 58  returns 0.0 if X
18dd0 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
18de0 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e  blob.  that cann
18df0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
18e00 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  to a numeric val
18e10 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20  ue.)^  ^If X is 
18e20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d  the .  integer -
18e30 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18e40 38 30 38 20 74 68 65 6e 20 61 62 73 28 58 29 20  808 then abs(X) 
18e50 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
18e60 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72  r overflow.  err
18e70 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69  or since there i
18e80 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20  s no equivalent 
18e90 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20  positive 64-bit 
18ea0 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76  two complement v
18eb0 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  alue..}..funcdef
18ec0 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20   {changes()} {} 
18ed0 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  {.  ^The changes
18ee0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
18ef0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
18f00 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  f database rows 
18f10 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65  that were change
18f20 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20  d.  or inserted 
18f30 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
18f40 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20  e most recently 
18f50 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54  completed INSERT
18f60 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55  , DELETE,.  or U
18f70 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c  PDATE statement,
18f80 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74   exclusive of st
18f90 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65  atements in lowe
18fa0 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73  r-level triggers
18fb0 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  ..  ^The changes
18fc0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
18fd0 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
18fe0 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
18ff0 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
19000 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  C++ function and
19010 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74   hence follows t
19020 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f  he same rules fo
19030 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67  r counting chang
19040 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
19050 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58  char(X1,X2,...,X
19060 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65  N)} {} {.  ^(The
19070 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c   char(X1,X2,...,
19080 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  XN) function ret
19090 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f  urns a string co
190a0 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61 63  mposed of charac
190b0 74 65 72 73 20 68 61 76 69 6e 67 20 74 68 65 0a  ters having the.
190c0 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20     unicode code 
190d0 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66 20  point values of 
190e0 69 6e 74 65 67 65 72 73 20 58 31 20 74 68 72 6f  integers X1 thro
190f0 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74 69  ugh XN, respecti
19100 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  vely.)^.}..funcd
19110 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59  ef {coalesce(X,Y
19120 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,...)} {} {.  ^T
19130 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75  he coalesce() fu
19140 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
19150 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72   copy of its fir
19160 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
19170 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20  ment, or.  NULL 
19180 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  if all arguments
19190 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61   are NULL.  ^Coa
191a0 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68 61 76  lesce() must hav
191b0 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20  e at least .  2 
191c0 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
191d0 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29  ncdef {glob(X,Y)
191e0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c  } {} {.  ^The gl
191f0 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
19200 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
19210 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69  o the.  expressi
19220 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c  on "<b>Y GLOB X<
19230 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61  /b>"..  Note tha
19240 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72  t the X and Y ar
19250 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65  guments are reve
19260 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62  rsed in the glob
19270 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
19280 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
19290 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  fix [GLOB] opera
192a0 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b  tor..  ^If the [
192b0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
192c0 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
192d0 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a  face is used to.
192e0 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67    override the g
192f0 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
19300 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e  n with an altern
19310 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
19320 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20  tion then.  the 
19330 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20  [GLOB] operator 
19340 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
19350 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
19360 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66  ementation..}..f
19370 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58  uncdef {ifnull(X
19380 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19390 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
193a0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
193b0 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
193c0 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
193d0 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62  , or.  NULL if b
193e0 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
193f0 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c  e NULL.  ^Ifnull
19400 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61  () must have exa
19410 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73  ctly 2 arguments
19420 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  ..  ^The ifnull(
19430 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
19440 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61  uivalent to [coa
19450 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77  lesce()] with tw
19460 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  o arguments..}..
19470 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58  funcdef {instr(X
19480 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19490 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63   instr(X,Y) func
194a0 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66  tion finds the f
194b0 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  irst occurrence 
194c0 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68  of string Y with
194d0 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61  in .  string X a
194e0 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  nd returns the n
194f0 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63  umber of prior c
19500 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31  haracters plus 1
19510 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73  , or 0 if.  Y is
19520 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77   nowhere found w
19530 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20  ithin X..  ^Or, 
19540 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62  if X and Y are b
19550 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20  oth BLOBs, then 
19560 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  instr(X,Y) retur
19570 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68  ns one.  more th
19580 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79  an the number by
19590 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  tes prior to the
195a0 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
195b0 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a  e of Y, or 0 if.
195c0 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63    Y does not occ
195d0 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ur anywhere with
195e0 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68  in X..  ^If both
195f0 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64   arguments X and
19600 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29   Y to instr(X,Y)
19610 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e   are non-NULL an
19620 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a  d are not BLOBs.
19630 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20    then both are 
19640 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73  interpreted as s
19650 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69  trings..  ^If ei
19660 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20  ther X or Y are 
19670 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c  NULL in instr(X,
19680 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  Y) then the resu
19690 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66  lt is NULL..}..f
196a0 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20  uncdef {hex(X)} 
196b0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28  {} {.  ^The hex(
196c0 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72  ) function inter
196d0 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65  prets its argume
196e0 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64  nt as a BLOB and
196f0 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
19700 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
19710 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61   upper-case hexa
19720 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e  decimal renderin
19730 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  g of the content
19740 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e   of.  that blob.
19750 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73  .}..funcdef {las
19760 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
19770 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61  } {} {.  ^The la
19780 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
19790 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
197a0 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  ns the [ROWID]. 
197b0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
197c0 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65   insert from the
197d0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
197e0 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b  tion which invok
197f0 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f  ed the.  functio
19800 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69  n..  ^The last_i
19810 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51  nsert_rowid() SQ
19820 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
19830 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
19840 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61  he.  [sqlite3_la
19850 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
19860 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
19870 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a  ce function..}..
19880 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28  funcdef {length(
19890 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20  X)} {} {.  ^For 
198a0 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58  a string value X
198b0 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  , the length(X) 
198c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
198d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a   the number of .
198e0 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f    characters (no
198f0 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72  t bytes) in X pr
19900 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ior to the first
19910 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a   NUL character..
19920 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73    Since SQLite s
19930 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f  trings do not no
19940 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e  rmally contain N
19950 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74  UL characters, t
19960 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66  he length(X).  f
19970 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75  unction will usu
19980 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
19990 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
199a0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
199b0 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46  e string X..  ^F
199c0 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20  or a blob value 
199d0 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  X, length(X) ret
199e0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
199f0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
19a00 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
19a10 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
19a20 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
19a30 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
19a40 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
19a50 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
19a60 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
19a70 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
19a80 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
19a90 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
19aa0 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
19ab0 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
19ac0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19ad0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
19ae0 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
19af0 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
19b00 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
19b10 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
19b20 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
19b30 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
19b40 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
19b50 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
19b60 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
19b70 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
19b80 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
19b90 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
19ba0 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
19bb0 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
19bc0 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
19bd0 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
19be0 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
19bf0 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
19c00 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
19c10 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
19c20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
19c30 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
19c40 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
19c50 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
19c60 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
19c70 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
19c80 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
19c90 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
19ca0 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
19cb0 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
19cc0 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
19cd0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
19ce0 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
19cf0 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
19d00 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
19d10 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
19d20 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
19d30 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
19d40 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
19d50 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
19d60 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
19d70 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
19d80 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
19d90 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
19da0 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
19db0 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
19dc0 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66  specified..}...f
19dd0 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f  uncdef {likeliho
19de0 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  od(X,Y)} {} {.  
19df0 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ^The likelihood(
19e00 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
19e10 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20 58  turns argument X
19e20 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28   unchanged..  ^(
19e30 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20 6c  The value Y in l
19e40 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d  ikelihood(X,Y) m
19e50 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e  ust be a floatin
19e60 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74  g point constant
19e70 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20 61  .  between 0.0 a
19e80 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76  nd 1.0, inclusiv
19e90 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65  e.)^.  ^The like
19ea0 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74 69  lihood(X) functi
19eb0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68  on is a no-op th
19ec0 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  at the code gene
19ed0 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65  rator.  optimize
19ee0 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69  s away so that i
19ef0 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50  t consumes no CP
19f00 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67 20  U cycles during 
19f10 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61 74  run-time.  (that
19f20 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
19f30 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
19f40 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
19f50 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69  urpose of the li
19f60 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75  kelihood(X,Y) fu
19f70 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
19f80 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
19f90 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
19fa0 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
19fb0 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
19fc0 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74 72  ean that is.  tr
19fd0 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61 62  ue with a probab
19fe0 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78 69  ility of approxi
19ff0 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68  mately Y..  ^(Th
1a000 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20  e [unlikely(X)] 
1a010 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72  function is shor
1a020 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c  t-hand for likel
1a030 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e  ihood(X,0.0625).
1a040 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b 65  )^.  ^(The [like
1a050 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20  ly(X)] function 
1a060 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f  is short-hand fo
1a070 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30  r likelihood(X,0
1a080 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e  .9375).)^.}..fun
1a090 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29 7d  cdef {likely(X)}
1a0a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
1a0b0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1a0c0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1a0d0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1a0e0 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28  ..  ^The likely(
1a0f0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
1a100 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
1a110 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
1a120 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
1a130 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
1a140 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
1a150 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
1a160 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
1a170 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
1a180 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
1a190 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
1a1a0 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1a1b0 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1a1c0 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1a1d0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1a1e0 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1a1f0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1a200 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20  an value.  that 
1a210 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
1a220 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58 29   ^(The likely(X)
1a230 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
1a240 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69  ivalent.  to [li
1a250 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39 33  kelihood](X,0.93
1a260 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f 3a  75).)^ See also:
1a270 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a   [unlikely(X)]..
1a280 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64  }..funcdef {load
1a290 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f  _extension(X) lo
1a2a0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
1a2b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1a2c0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1a2d0 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64  Y) function load
1a2e0 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e 73  s [SQLite extens
1a2f0 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68 65  ions] out of the
1a300 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61 72   shared.  librar
1a310 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20 75  y file named X u
1a320 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70  sing the entry p
1a330 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72 65  oint Y.  ^The re
1a340 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74  sult of load_ext
1a350 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c  ension().  is al
1a360 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49  ways a NULL.  ^I
1a370 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20 74  f Y is omitted t
1a380 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
1a390 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d 65  entry point name
1a3a0 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68 65   is used..  ^The
1a3b0 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1a3c0 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65  ) function raise
1a3d0 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  s an exception i
1a3e0 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
1a3f0 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64 20  fails to.  load 
1a400 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f  or initialize co
1a410 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e  rrectly...  <p>^
1a420 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
1a430 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  on() function wi
1a440 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65  ll fail if the e
1a450 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74  xtension attempt
1a460 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f  s to .  modify o
1a470 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c 20  r delete an SQL 
1a480 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c  function or coll
1a490 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
1a4a0 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f   ^The.  extensio
1a4b0 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  n can add new fu
1a4c0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
1a4d0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
1a4e0 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64  but cannot.  mod
1a4f0 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78  ify or delete ex
1a500 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  isting functions
1a510 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1a520 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a  quences because.
1a530 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e    those function
1a540 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69  s and/or collati
1a550 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67  ng sequences mig
1a560 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77  ht be used elsew
1a570 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75  here.  in the cu
1a580 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
1a590 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  SQL statement.  
1a5a0 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e  To load an exten
1a5b0 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e  sion that.  chan
1a5c0 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66  ges or deletes f
1a5d0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1a5e0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1a5f0 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69   use the.  [sqli
1a600 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
1a610 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  on()] C-language
1a620 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   API.</p>..  <p>
1a630 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65 61  For security rea
1a640 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e 20  sons, extension 
1a650 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65 64  loaded is turned
1a660 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 20   off by default 
1a670 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65 6e  and must.  be en
1a680 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f 72  abled by a prior
1a690 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65   call to [sqlite
1a6a0 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
1a6b0 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a  tension()].</p>.
1a6c0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65  }..funcdef {lowe
1a6d0 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  r(X)} {} {.  ^Th
1a6e0 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74  e lower(X) funct
1a6f0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
1a700 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77  py of string X w
1a710 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68  ith all ASCII ch
1a720 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65  aracters.  conve
1a730 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61  rted to lower ca
1a740 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  se.  ^The defaul
1a750 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72  t built-in lower
1a760 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  () function work
1a770 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68  s.  for ASCII ch
1a780 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20  aracters only.  
1a790 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65  To do case conve
1a7a0 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53  rsions on non-AS
1a7b0 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73  CII.  characters
1a7c0 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65  , load the ICU e
1a7d0 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  xtension..}..fun
1a7e0 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
1a7f0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1a800 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59    ^The ltrim(X,Y
1a810 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a820 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1a830 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
1a840 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
1a850 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
1a860 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
1a870 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58  e left side of X
1a880 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1a890 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1a8a0 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, ltrim(X) remo
1a8b0 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1a8c0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20  the left side.  
1a8d0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
1a8e0 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {max(X,Y,...)} 
1a8f0 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d  {*maxCoreFunc *m
1a900 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75  ax {max() SQL fu
1a910 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1a920 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1a930 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
1a940 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1a950 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20  ment with the . 
1a960 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20   maximum value, 
1a970 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69  or return NULL i
1a980 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69  f any argument i
1a990 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20  s NULL. .  ^The 
1a9a0 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
1a9b0 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  ax() function se
1a9c0 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
1a9d0 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
1a9e0 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
1a9f0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1aa00 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1aa10 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
1aa20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
1aa30 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
1aa40 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
1aa50 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1aa60 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
1aa70 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20  ments to max(). 
1aa80 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
1aa90 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
1aaa0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
1aab0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1aac0 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f   is used..  ^(No
1aad0 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
1aae0 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
1aaf0 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
1ab00 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
1ab10 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
1ab20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20  operates as an. 
1ab30 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61   [maxAggFunc | a
1ab40 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ab50 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79  n] if given only
1ab60 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
1ab70 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  nt.)^.}..funcdef
1ab80 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {min(X,Y,...)} 
1ab90 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d  {*minCoreFunc *m
1aba0 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75  in {min() SQL fu
1abb0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1abc0 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1abd0 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
1abe0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1abf0 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20  ment with the.  
1ac00 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20  minimum value.. 
1ac10 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
1ac20 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74  ment min() funct
1ac30 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
1ac40 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1ac50 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
1ac60 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
1ac70 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
1ac80 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1ac90 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1aca0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
1acb0 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
1acc0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
1acd0 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
1ace0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
1acf0 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  in().  define a 
1ad00 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1ad10 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
1ad20 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
1ad30 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
1ad40 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62    ^(Note that <b
1ad50 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20  >min()</b> is a 
1ad60 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
1ad70 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
1ad80 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
1ad90 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
1ada0 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67 46  s an .  [minAggF
1adb0 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
1adc0 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
1add0 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
1ade0 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d  le argument.)^.}
1adf0 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69  ..funcdef {nulli
1ae00 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  f(X,Y)} {} {.  ^
1ae10 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1ae20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1ae30 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
1ae40 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d  ent if the argum
1ae50 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65  ents are.  diffe
1ae60 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66  rent and NULL if
1ae70 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
1ae80 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54  re the same.  ^T
1ae90 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
1aea0 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68  unction.  search
1aeb0 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
1aec0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1aed0 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  ght for an argum
1aee0 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
1aef0 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66   a.  collating f
1af00 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
1af10 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20   that collating 
1af20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
1af30 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72   string.  compar
1af40 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74  isons.  ^If neit
1af50 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  her argument to 
1af60 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73  nullif() defines
1af70 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1af80 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65  ction.  then the
1af90 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e   BINARY is used.
1afa0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69  .}..funcdef {pri
1afb0 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d  ntf(FORMAT,...)}
1afc0 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72   {} {.  ^(The pr
1afd0 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1afe0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f   SQL function wo
1aff0 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71  rks like the [sq
1b000 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d  lite3_mprintf()]
1b010 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75   C-language.  fu
1b020 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70  nction and the p
1b030 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
1b040 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
1b050 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a  rd C library.)^.
1b060 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75    The first argu
1b070 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74  ment is a format
1b080 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65   string that spe
1b090 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f  cifies how to co
1b0a0 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70  nstruct the outp
1b0b0 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e  ut.  string usin
1b0c0 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66  g values taken f
1b0d0 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61  rom subsequent a
1b0e0 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74  rguments.  ^If t
1b0f0 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65  he FORMAT argume
1b100 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20  nt is.  missing 
1b110 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  or NULL then the
1b120 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
1b130 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74    ^The %n format
1b140 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e   is silently ign
1b150 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20  ored and.  does 
1b160 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61  not consume an a
1b170 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25  rgument.  ^The %
1b180 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61  p format is an a
1b190 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54  lias for %X.  ^T
1b1a0 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69  he %z format.  i
1b1b0 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c  s interchangeabl
1b1c0 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66  e with %s.  ^(If
1b1d0 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66   there are too f
1b1e0 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20  ew arguments in 
1b1f0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73  the argument lis
1b200 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67  t,.  missing arg
1b210 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d  uments are assum
1b220 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c  ed to have a NUL
1b230 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69  L value, which i
1b240 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74  s translated int
1b250 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72  o.  0 or 0.0 for
1b260 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73   numeric formats
1b270 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72   or an empty str
1b280 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a  ing for %s.)^.}.
1b290 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f    ..funcdef {quo
1b2a0 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  te(X)} {} {.  ^T
1b2b0 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63  he quote(X) func
1b2c0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1b2d0 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20   text of an SQL 
1b2e0 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20  literal which.  
1b2f0 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
1b300 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69  its argument sui
1b310 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73  table for inclus
1b320 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20  ion into an SQL 
1b330 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74  statement..  ^St
1b340 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75  rings are surrou
1b350 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71  nded by single-q
1b360 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70  uotes with escap
1b370 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71  es on interior q
1b380 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65  uotes.  as neede
1b390 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65  d.  ^BLOBs are e
1b3a0 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65  ncoded as hexade
1b3b0 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a  cimal literals..
1b3c0 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20    ^Strings with 
1b3d0 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61  embedded NUL cha
1b3e0 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62  racters cannot b
1b3f0 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73  e represented as
1b400 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61   string.  litera
1b410 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65  ls in SQL and he
1b420 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e 65 64  nce the returned
1b430 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
1b440 69 73 20 74 72 75 6e 63 61 74 65 64 20 70 72 69  is truncated pri
1b450 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73  or.  to the firs
1b460 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65  t NUL..}..funcde
1b470 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20  f {random()} {} 
1b480 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28  {.  ^The random(
1b490 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b4a0 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64  ns a pseudo-rand
1b4b0 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74  om integer.  bet
1b4c0 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36  ween -9223372036
1b4d0 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39  854775808 and +9
1b4e0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1b4f0 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  07..}..funcdef {
1b500 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b  randomblob(N)} {
1b510 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f  } {.  ^The rando
1b520 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f  mblob(N) functio
1b530 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79  n return an N-by
1b540 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69  te blob containi
1b550 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d  ng pseudo-random
1b560 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20  .  bytes. ^If N 
1b570 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74  is less than 1 t
1b580 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e  hen a 1-byte ran
1b590 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75  dom blob is retu
1b5a0 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74  rned...  <p>Hint
1b5b0 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  :  applications 
1b5c0 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f  can generate glo
1b5d0 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65  bally unique ide
1b5e0 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67  ntifiers.  using
1b5f0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74   this function t
1b600 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65  ogether with [he
1b610 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c  x()] and/or.  [l
1b620 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69  ower()] like thi
1b630 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b  s:</p>..  <block
1b640 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e  quote>.  hex(ran
1b650 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e  domblob(16))<br>
1b660 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65  </br>.  lower(he
1b670 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
1b680 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74  )).  </blockquot
1b690 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  e>.}..funcdef {r
1b6a0 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b  eplace(X,Y,Z)} {
1b6b0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61  } {.  ^The repla
1b6c0 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69  ce(X,Y,Z) functi
1b6d0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1b6e0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75  ing formed by su
1b6f0 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72  bstituting.  str
1b700 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20  ing Z for every 
1b710 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74  occurrence of st
1b720 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67  ring Y in string
1b730 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52   X.  ^The [BINAR
1b740 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73  Y].  collating s
1b750 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20  equence is used 
1b760 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  for comparisons.
1b770 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d    ^If Y is an em
1b780 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65  pty.  string the
1b790 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61  n return X uncha
1b7a0 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20  nged.  ^If Z is 
1b7b0 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20  not initially.  
1b7c0 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  a string, it is 
1b7d0 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20  cast to a UTF-8 
1b7e0 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20  string prior to 
1b7f0 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66  processing..}..f
1b800 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29  uncdef {round(X)
1b810 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20   round(X,Y)} {} 
1b820 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58  {.  ^The round(X
1b830 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1b840 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d  urns a floating-
1b850 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20  point.  value X 
1b860 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67  rounded to Y dig
1b870 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  its to the right
1b880 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
1b890 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65  point..  ^If the
1b8a0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
1b8b0 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20 61 73  mitted, it is as
1b8c0 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d  sumed to be 0..}
1b8d0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d  ..funcdef {rtrim
1b8e0 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20  (X) rtrim(X,Y)} 
1b8f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69  {} {.  ^The rtri
1b900 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
1b910 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1b920 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
1b930 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
1b940 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
1b950 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
1b960 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64  om the right sid
1b970 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
1b980 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1b990 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58  omitted, rtrim(X
1b9a0 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1b9b0 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a   from the right.
1b9c0 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a    side of X..}..
1b9d0 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78  funcdef {soundex
1b9e0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1b9f0 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63   soundex(X) func
1ba00 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1ba10 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68  tring that is th
1ba20 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69  e soundex encodi
1ba30 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72  ng .  of the str
1ba40 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74  ing X..  ^The st
1ba50 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72  ring "?000" is r
1ba60 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61  eturned if the a
1ba70 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20  rgument is NULL 
1ba80 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f  or contains.  no
1ba90 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69   ASCII alphabeti
1baa0 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20  c characters..  
1bab0 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  ^(This function 
1bac0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
1bad0 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c  SQLite by defaul
1bae0 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  t..  It is only 
1baf0 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
1bb00 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58   [SQLITE_SOUNDEX
1bb10 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
1bb20 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20  ption.  is used 
1bb30 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62  when SQLite is b
1bb40 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  uilt.)^.}..funcd
1bb50 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
1bb60 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d  leoption_get(N)}
1bb70 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1bb80 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1bb90 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63  n_get() SQL func
1bba0 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
1bbb0 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b  r around the.  [
1bbc0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
1bbd0 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43  ption_get()] C/C
1bbe0 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  ++ function..  ^
1bbf0 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  This routine ret
1bc00 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f  urns the N-th co
1bc10 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1bc20 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  n used to build 
1bc30 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c  SQLite.  or NULL
1bc40 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20   if N is out of 
1bc50 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f  range.  See also
1bc60 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70   the [compile_op
1bc70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d  tions pragma]..}
1bc80 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
1bc90 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1bca0 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  used(X)} {} {.  
1bcb0 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
1bcc0 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29  ileoption_used()
1bcd0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
1bce0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
1bcf0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
1bd00 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1bd10 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  sed()] C/C++ fun
1bd20 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74  ction..  ^When t
1bd30 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f  he argument X to
1bd40 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
1bd50 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73  ption_used(X) is
1bd60 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a   a string which.
1bd70 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66    is the name of
1bd80 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20   a compile-time 
1bd90 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75  option, this rou
1bda0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75  tine returns tru
1bdb0 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65  e (1) or.  false
1bdc0 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f   (0) depending o
1bdd0 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
1bde0 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73   that option was
1bdf0 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65   used during the
1be00 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e  .  build..}..fun
1be10 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75  cdef {sqlite_sou
1be20 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  rce_id()} {} {. 
1be30 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75   ^The sqlite_sou
1be40 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f  rce_id() functio
1be50 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1be60 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69  ng that identifi
1be70 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69  es the.  specifi
1be80 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  c version of the
1be90 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61   source code tha
1bea0 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  t was used to bu
1beb0 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20  ild the SQLite. 
1bec0 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20   library.  ^The 
1bed0 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
1bee0 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  by sqlite_source
1bef0 5f 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74  _id() begins wit
1bf00 68 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64  h.  the date and
1bf10 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73   time that the s
1bf20 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63  ource code was c
1bf30 68 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73  hecked in and is
1bf40 20 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e   follows by.  an
1bf50 20 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20   SHA1 hash that 
1bf60 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66  uniquely identif
1bf70 69 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74  ies the source t
1bf80 72 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63  ree.  ^This func
1bf90 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c  tion is.  an SQL
1bfa0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
1bfb0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75  the [sqlite3_sou
1bfc0 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72  rceid()] C inter
1bfd0 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  face..}..funcdef
1bfe0 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e   {sqlite_version
1bff0 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
1c000 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
1c010 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c020 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74  s the version st
1c030 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c  ring for the SQL
1c040 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68  ite.  library th
1c050 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20  at is running.  
1c060 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
1c070 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70  s an SQL.  wrapp
1c080 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1c090 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
1c0a0 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65  n()] C-interface
1c0b0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ..}..funcdef {su
1c0c0 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73  bstr(X,Y,Z) subs
1c0d0 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  tr(X,Y)} {} {.  
1c0e0 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c  ^The substr(X,Y,
1c0f0 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
1c100 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20  rns a substring 
1c110 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  of input string 
1c120 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20  X that begins.  
1c130 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68  with the Y-th ch
1c140 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63  aracter and whic
1c150 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72  h is Z character
1c160 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20  s long..  ^If Z 
1c170 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
1c180 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75  substr(X,Y) retu
1c190 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65  rns all characte
1c1a0 72 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  rs through the e
1c1b0 6e 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69  nd.  of the stri
1c1c0 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77  ng X beginning w
1c1d0 69 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20  ith the Y-th..  
1c1e0 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  ^The left-most c
1c1f0 68 61 72 61 63 74 65 72 20 6f 66 20 58 20 69 73  haracter of X is
1c200 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20   number 1.  ^If 
1c210 59 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20  Y is negative.  
1c220 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 63  then the first c
1c230 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20  haracter of the 
1c240 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75  substring is fou
1c250 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66  nd by counting f
1c260 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20  rom the.  right 
1c270 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
1c280 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20  left.  ^If Z is 
1c290 6e 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20  negative then.  
1c2a0 74 68 65 20 61 62 73 28 5a 29 20 63 68 61 72 61  the abs(Z) chara
1c2b0 63 74 65 72 73 20 70 72 65 63 65 64 69 6e 67 20  cters preceding 
1c2c0 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74  the Y-th charact
1c2d0 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  er are returned.
1c2e0 0a 20 20 5e 49 66 20 58 20 69 73 20 61 20 73 74  .  ^If X is a st
1c2f0 72 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63  ring then charac
1c300 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65 66  ters indices ref
1c310 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46  er to actual UTF
1c320 2d 38 20 0a 20 20 63 68 61 72 61 63 74 65 72 73  -8 .  characters
1c330 2e 20 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c  .  ^If X is a BL
1c340 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69  OB then the indi
1c350 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79 74  ces refer to byt
1c360 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
1c370 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d  total_changes()}
1c380 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74   {} {.  ^The tot
1c390 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e  al_changes() fun
1c3a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1c3b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20  e number of row 
1c3c0 63 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64  changes.  caused
1c3d0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1c3e0 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73  TE or DELETE.  s
1c3f0 74 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20  tatements since 
1c400 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 61  the current data
1c410 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
1c420 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54  was opened..  ^T
1c430 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
1c440 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
1c450 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f   the [sqlite3_to
1c460 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20  tal_changes()]. 
1c470 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1c480 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72  ..}..funcdef {tr
1c490 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d  im(X) trim(X,Y)}
1c4a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69   {} {.  ^The tri
1c4b0 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
1c4c0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1c4d0 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
1c4e0 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
1c4f0 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
1c500 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
1c510 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20  om both ends of 
1c520 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1c530 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1c540 65 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f  ed, trim(X) remo
1c550 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1c560 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
1c570 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65  }..funcdef {type
1c580 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  of(X)} {} {.  ^T
1c590 68 65 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e  he typeof(X) fun
1c5a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c5b0 73 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69  string that indi
1c5c0 63 61 74 65 73 20 74 68 65 20 5b 64 61 74 61 74  cates the [datat
1c5d0 79 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78  ype] of.  the ex
1c5e0 70 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c  pression X: "nul
1c5f0 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22  l", "integer", "
1c600 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f  real", "text", o
1c610 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e  r "blob"..}..fun
1c620 63 64 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58  cdef {unlikely(X
1c630 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75  )} {} {.  ^The u
1c640 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1c650 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1c660 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61  argument X uncha
1c670 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c  nged..  ^The unl
1c680 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1c690 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
1c6a0 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
1c6b0 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
1c6c0 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
1c6d0 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
1c6e0 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e   cycles at.  run
1c6f0 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20  -time (that is, 
1c700 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20  during calls to 
1c710 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
1c720 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73  )..  ^The purpos
1c730 65 20 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c  e of the unlikel
1c740 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1c750 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69   to provide a hi
1c760 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72  nt.  to the quer
1c770 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74  y planner that t
1c780 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73  he argument X is
1c790 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
1c7a0 0a 20 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  .  that is usual
1c7b0 6c 79 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54  ly not true. ^(T
1c7c0 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1c7d0 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76  unction is equiv
1c7e0 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65  alent.  to [like
1c7f0 6c 69 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32  lihood](X, 0.062
1c800 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5).)^.}..funcdef
1c810 20 7b 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d   {unicode(X)} {}
1c820 20 7b 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64   {.  ^The unicod
1c830 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  e(X) function re
1c840 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69  turns the numeri
1c850 63 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70  c unicode code p
1c860 6f 69 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69  oint correspondi
1c870 6e 67 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73  ng to.  the firs
1c880 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  t character of t
1c890 68 65 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66  he string X.  If
1c8a0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
1c8b0 20 75 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e   unicode(X) is n
1c8c0 6f 74 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68  ot a string.  th
1c8d0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
1c8e0 20 75 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66   undefined..}..f
1c8f0 75 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29  uncdef {upper(X)
1c900 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70  } {} {.  ^The up
1c910 70 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  per(X) function 
1c920 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
1c930 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58  f input string X
1c940 20 69 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20   in which all . 
1c950 20 6c 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49   lower-case ASCI
1c960 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  I characters are
1c970 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68   converted to th
1c980 65 69 72 20 75 70 70 65 72 2d 63 61 73 65 20 65  eir upper-case e
1c990 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75  quivalent..}..fu
1c9a0 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28  ncdef {zeroblob(
1c9b0 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  N)} {} {.  ^The 
1c9c0 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63  zeroblob(N) func
1c9d0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42  tion returns a B
1c9e0 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  LOB consisting o
1c9f0 66 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30  f N bytes of 0x0
1ca00 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61  0..  SQLite mana
1ca10 67 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c  ges these zerobl
1ca20 6f 62 73 20 76 65 72 79 20 65 66 66 69 63 69 65  obs very efficie
1ca30 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73  ntly.  Zeroblobs
1ca40 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a   can be used to.
1ca50 20 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20    reserve space 
1ca60 66 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20  for a BLOB that 
1ca70 69 73 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e  is later written
1ca80 20 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74   using .  [sqlit
1ca90 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c  e3_blob_open() |
1caa0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f   incremental BLO
1cab0 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20  B I/O]..  ^This 
1cac0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1cad0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e  implemented usin
1cae0 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72  g the [sqlite3_r
1caf0 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29  esult_zeroblob()
1cb00 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d  ].  routine from
1cb10 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72   the C/C++ inter
1cb20 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  face..}.</tcl>.<
1cb30 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
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 23 23 23 23 23 23 23 23 23  ################
1cb80 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1cb90 63 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20  ction {Date And 
1cba0 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20  Time Functions} 
1cbb0 64 61 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66  datefunc {*datef
1cbc0 75 6e 63 20 7b 64 61 74 65 20 61 6e 64 20 74 69  unc {date and ti
1cbd0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68  me functions}}.h
1cbe0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
1cbf0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1cc00 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
1cc10 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
1cc20 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
1cc30 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
1cc40 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
1cc50 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
1cc60 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
1cc70 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
1cc80 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
1cc90 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
1cca0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1ccb0 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
1ccc0 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
1ccd0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1cce0 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1ccf0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1cd00 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1cd10 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1cd20 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
1cd30 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1cd40 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1cd50 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1cd60 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1cd70 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
1cd80 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1cd90 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1cda0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1cdb0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1cdc0 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
1cdd0 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
1cde0 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1cdf0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1ce00 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1ce10 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
1ce20 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
1ce30 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
1ce40 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1ce50 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1ce60 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
1ce70 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
1ce80 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1ce90 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
1cea0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
1ceb0 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
1cec0 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
1ced0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
1cee0 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
1cef0 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
1cf00 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1cf10 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
1cf20 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
1cf30 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
1cf40 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
1cf50 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1cf60 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
1cf70 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
1cf80 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1cf90 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
1cfa0 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
1cfb0 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
1cfc0 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
1cfd0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1cfe0 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
1cff0 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
1d000 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
1d010 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d020 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
1d030 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
1d040 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
1d050 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
1d060 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
1d070 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
1d080 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
1d090 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
1d0a0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1d0b0 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
1d0c0 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
1d0d0 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
1d0e0 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
1d0f0 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
1d100 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
1d110 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
1d120 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1d130 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
1d140 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
1d150 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
1d160 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
1d170 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
1d180 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
1d190 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
1d1a0 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
1d1b0 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
1d1c0 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
1d1d0 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
1d1e0 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
1d1f0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1d200 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
1d210 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
1d220 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
1d230 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
1d240 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
1d250 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
1d260 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
1d270 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
1d280 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
1d290 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1d2a0 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
1d2b0 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
1d2c0 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
1d2d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
1d2e0 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
1d2f0 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
1d300 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
1d310 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1d320 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
1d330 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
1d340 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
1d350 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
1d360 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
1d370 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
1d380 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
1d390 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
1d3a0 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
1d3b0 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
1d3c0 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
1d3d0 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
1d3e0 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
1d3f0 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
1d400 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
1d410 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
1d420 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
1d430 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1d440 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
1d450 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
1d460 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
1d470 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
1d480 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
1d490 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
1d4a0 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
1d4b0 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
1d4c0 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
1d4d0 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
1d4e0 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
1d4f0 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
1d500 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith Sunday==0.<t
1d510 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
1d520 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
1d530 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
1d540 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
1d550 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
1d560 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
1d570 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
1d580 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
1d590 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
1d5a0 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
1d5b0 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1d5c0 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
1d5d0 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
1d5e0 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
1d5f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
1d600 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
1d610 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
1d620 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
1d630 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
1d640 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
1d650 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
1d660 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
1d670 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
1d680 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
1d690 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1d6a0 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
1d6b0 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1d6c0 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
1d6d0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1d6e0 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
1d6f0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
1d700 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
1d710 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1d720 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
1d730 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
1d740 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
1d750 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
1d760 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
1d770 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
1d780 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
1d790 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
1d7a0 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
1d7b0 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
1d7c0 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
1d7d0 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
1d7e0 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
1d7f0 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
1d800 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
1d810 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
1d820 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
1d830 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
1d840 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
1d850 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
1d860 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
1d870 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1d880 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
1d890 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1d8a0 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
1d8b0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1d8c0 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1d8d0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1d8e0 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1d8f0 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
1d900 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1d910 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1d920 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
1d930 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1d940 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
1d950 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1d960 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1d970 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
1d980 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1d990 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1d9a0 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
1d9b0 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
1d9c0 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
1d9d0 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
1d9e0 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
1d9f0 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
1da00 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
1da10 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
1da20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
1da30 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
1da40 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
1da50 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
1da60 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
1da70 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
1da80 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
1da90 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
1daa0 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
1dab0 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
1dac0 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
1dad0 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
1dae0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
1daf0 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
1db00 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
1db10 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
1db20 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
1db30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
1db40 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
1db50 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75  .^The 'now' argu
1db60 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64  ment to date and
1db70 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1db80 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
1db90 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20  xactly the.same 
1dba0 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70  value for multip
1dbb0 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77  le invocations w
1dbc0 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b  ithin the same [
1dbd0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20  sqlite3_step()] 
1dbe0 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65  call..^[http://e
1dbf0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1dc00 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64  wiki/Coordinated
1dc10 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20  _Universal_Time 
1dc20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  | Universal Coor
1dc30 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1dc40 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46  C)] is used. .^F
1dc50 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20  ormat 12 is the 
1dc60 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1dc70 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a  pedia.org/wiki/J
1dc80 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69  ulian_day | Juli
1dc90 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65  an day number].e
1dca0 78 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c  xpressed as a fl
1dcb0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1dcc0 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f  ue..</p>..<p>.Fo
1dcd0 72 6d 61 74 73 20 32 20 74 68 72 6f 75 67 68 20  rmats 2 through 
1dce0 31 30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  10 may be option
1dcf0 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
1dd00 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69   a timezone indi
1dd10 63 61 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72  cator of the for
1dd20 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39  m."<i>&#91;+-&#9
1dd30 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20  3;HH:MM</i>" or 
1dd40 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e  just "<i>Z</i>".
1dd50 20 20 54 68 65 20 64 61 74 65 20 61 6e 64 20 74    The date and t
1dd60 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  ime functions us
1dd70 65 20 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a  e UTC or "zulu".
1dd80 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c  time internally,
1dd90 20 61 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20   and so the "Z" 
1dda0 73 75 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f  suffix is a no-o
1ddb0 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f  p.  Any non-zero
1ddc0 20 22 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20   "HH:MM" suffix 
1ddd0 69 73 0a 73 75 62 74 72 61 63 74 65 64 20 66 72  is.subtracted fr
1dde0 6f 6d 20 74 68 65 20 69 6e 64 69 63 61 74 65 64  om the indicated
1ddf0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69   date and time i
1de00 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75  n order to compu
1de10 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f  te zulu time..Fo
1de20 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f  r example, all o
1de30 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1de40 74 69 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65  time strings are
1de50 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70   equivalent:.</p
1de60 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1de70 32 30 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33  2013-10-07 08:23
1de80 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33  :19.120<br>.2013
1de90 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e  -10-07T08:23:19.
1dea0 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30  120Z<br>.2013-10
1deb0 2d 30 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30  -07 04:23:19.120
1dec0 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35  -04:00<br>.24565
1ded0 37 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c  72.84952685.</bl
1dee0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e  ockquote>..<p>.^
1def0 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37  (In formats 4, 7
1df00 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72  , and 10, the fr
1df10 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
1df20 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61   value SS.SSS ca
1df30 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f  n have.one or mo
1df40 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77  re digits follow
1df50 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20  ing the decimal 
1df60 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20  point.  Exactly 
1df70 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65  three digits are
1df80 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78  .shown in the ex
1df90 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f  amples because o
1dfa0 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 74 68  nly the first th
1dfb0 72 65 65 20 64 69 67 69 74 73 20 61 72 65 20 73  ree digits are s
1dfc0 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68  ignificant.to th
1dfd0 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68  e result, but th
1dfe0 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
1dff0 61 6e 20 68 61 76 65 20 66 65 77 65 72 20 6f 72  an have fewer or
1e000 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65   more than three
1e010 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20   digits.and the 
1e020 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
1e030 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f  ons will still o
1e040 70 65 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79  perate correctly
1e050 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66  .)^.Similarly, f
1e060 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77  ormat 12 is show
1e070 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e 69 66  n with 10 signif
1e080 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75  icant digits, bu
1e090 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a  t the date/time.
1e0a0 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72  functions will r
1e0b0 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20  eally accept as 
1e0c0 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64  many or as few d
1e0d0 69 67 69 74 73 20 61 73 20 61 72 65 20 6e 65 63  igits as are nec
1e0e0 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73  essary to.repres
1e0f0 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64  ent the Julian d
1e100 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a  ay number..</p>.
1e110 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f  .<h3>Modifiers</
1e120 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d  h3>..<p>^The tim
1e130 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
1e140 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
1e150 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65   or more modifie
1e160 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64  rs that .alter d
1e170 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e  ate and/or time.
1e180 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a   ^Each modifier.
1e190 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74  is a transformat
1e1a0 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c  ion that is appl
1e1b0 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20  ied to the time 
1e1c0 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66  value to its lef
1e1d0 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72  t..^Modifiers ar
1e1e0 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c  e applied from l
1e1f0 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72  eft to right; or
1e200 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  der is important
1e210 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c  ..^(The availabl
1e220 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20  e modifiers are 
1e230 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a  as follows.</p>.
1e240 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64  .<ol>.<li> NNN d
1e250 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75  ays.<li> NNN hou
1e260 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75  rs.<li> NNN minu
1e270 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e  tes.<li> NNN.NNN
1e280 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e  N seconds.<li> N
1e290 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e  NN months.<li> N
1e2a0 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74  NN years.<li> st
1e2b0 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69  art of month.<li
1e2c0 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a  > start of year.
1e2d0 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61  <li> start of da
1e2e0 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e  y.<li> weekday N
1e2f0 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a  .<li> unixepoch.
1e300 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c  <li> localtime.<
1e310 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e  li> utc .</ol>)^
1e320 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20  ..<p>^The first 
1e330 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31  six modifiers (1
1e340 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d   through 6) .sim
1e350 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63  ply add the spec
1e360 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20  ified amount of 
1e370 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65  time to the date
1e380 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69   and time .speci
1e390 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63  fied by the prec
1e3a0 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67  eding timestring
1e3b0 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a   and modifiers..
1e3c0 5e 54 68 65 20 27 73 27 20 63 68 61 72 61 63 74  ^The 's' charact
1e3d0 65 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  er at the end of
1e3e0 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20 6e 61   the modifier na
1e3f0 6d 65 73 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e  mes is optional.
1e400 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c  .^Note that "&pl
1e410 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22  usmn;NNN months"
1e420 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72   works by render
1e430 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
1e440 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59   date into.the Y
1e450 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74  YYY-MM-DD format
1e460 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c  , adding the &pl
1e470 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20  usmn;NNN to the 
1e480 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20  MM month value, 
1e490 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67  then.normalizing
1e4a0 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54   the result.  ^T
1e4b0 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  hus, for example
1e4c0 2c 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d  , the data 2001-
1e4d0 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62  03-31 modified.b
1e4e0 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69  y '+1 month' ini
1e4f0 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30  tially yields 20
1e500 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70  01-04-31, but Ap
1e510 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20  ril only has 30 
1e520 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65  days.so the date
1e530 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74   is normalized t
1e540 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e  o 2001-05-01.  ^
1e550 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74  A similar effect
1e560 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65   occurs when.the
1e570 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69   original date i
1e580 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66  s February 29 of
1e590 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20   a leapyear and 
1e5a0 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a  the modifier is.
1e5b0 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20  &plusmn;N years 
1e5c0 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61  where N is not a
1e5d0 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75   multiple of fou
1e5e0 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
1e5f0 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66  "start of" modif
1e600 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20  iers (7 through 
1e610 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74  9) shift the dat
1e620 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20  e backwards .to 
1e630 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
1e640 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
1e650 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e  th, year or day.
1e660 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77  </p>..<p>^The "w
1e670 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72  eekday" modifier
1e680 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61   advances the da
1e690 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68  te forward to th
1e6a0 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65  e next date .whe
1e6b0 72 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e  re the weekday n
1e6c0 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64  umber is N. Sund
1e6d0 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20  ay is 0, Monday 
1e6e0 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72  is 1, and so for
1e6f0 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  th.</p>..<p>^The
1e700 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1e710 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20  ifier (11) only 
1e720 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65  works if it imme
1e730 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
1e740 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e  .a timestring in
1e750 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
1e760 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d  format. .^This m
1e770 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
1e780 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
1e790 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1e7a0 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
1e7b0 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
1e7c0 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
1e7d0 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74   be, but as.[htt
1e7e0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1e7f0 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
1e800 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d  ime | Unix Time]
1e810 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f   - the .number o
1e820 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1e830 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75  1970.  If the "u
1e840 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1e850 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c  er does not.foll
1e860 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20  ow a timestring 
1e870 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44  of the form DDDD
1e880 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70  DDDDDD which exp
1e890 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65  resses the numbe
1e8a0 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r.of seconds sin
1e8b0 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74  ce 1970 or if ot
1e8c0 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65  her modifiers.se
1e8d0 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78  parate the "unix
1e8e0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1e8f0 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44  from prior DDDDD
1e900 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62  DDDDD then the.b
1e910 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
1e920 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65  ined..Due to pre
1e930 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f  cision limitatio
1e940 6e 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68  ns imposed by th
1e950 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1e960 73 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20  s use.of 64-bit 
1e970 69 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75  integers, the "u
1e980 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1e990 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  er only works fo
1e9a0 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r.dates between 
1e9b0 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
1e9c0 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d  :00 and 5352-11-
1e9d0 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69  01 10:52:47 (uni
1e9e0 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36  x times.of -6216
1e9f0 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20  7219200 through 
1ea00 31 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70  10675199167).</p
1ea10 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
1ea20 65 6e 74 20 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c  ent localtime {l
1ea30 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65  ocaltime modifie
1ea40 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  r}</tcl>.<p>^The
1ea50 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64   "localtime" mod
1ea60 69 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d  ifier (12) assum
1ea70 65 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69  es the time stri
1ea80 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng to its left i
1ea90 73 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43  s in.Universal C
1eaa0 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
1eab0 28 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74  (UTC) and adjust
1eac0 73 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e  s the time.strin
1ead0 67 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73  g so that it dis
1eae0 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e  plays localtime.
1eaf0 20 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22    If "localtime"
1eb00 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20  .follows a time 
1eb10 74 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c  that is not UTC,
1eb20 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
1eb30 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
1eb40 0a 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20  .^(The "utc" is 
1eb50 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20  the opposite of 
1eb60 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75  "localtime".  "u
1eb70 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74  tc" assumes that
1eb80 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69   the string.to i
1eb90 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68  ts left is in th
1eba0 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  e local timezone
1ebb0 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61   and adjusts tha
1ebc0 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69  t string to be i
1ebd0 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20  n UTC.)^.If the 
1ebe0 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
1ebf0 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
1ec00 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
1ec10 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
1ec20 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
1ec30 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
1ec40 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1ec50 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c  e current date.<
1ec60 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1ec70 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1ec80 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  ');</blockquote>
1ec90 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1eca0 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66   the last day of
1ecb0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
1ecc0 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  th.</p>..<blockq
1ecd0 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
1ece0 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1ecf0 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74   month','+1 mont
1ed00 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f  h','-1 day');.</
1ed10 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1ed20 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1ed30 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1ed40 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1ed50 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e  tamp 1092941466.
1ed60 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ed70 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61  e>.    SELECT da
1ed80 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
1ed90 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b  6, 'unixepoch');
1eda0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1edb0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1edc0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1edd0 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
1ede0 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
1edf0 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73  66, and .compens
1ee00 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63  ate for your loc
1ee10 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e  al timezone.</p>
1ee20 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1ee30 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
1ee40 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
1ee50 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c  ixepoch', 'local
1ee60 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  time');.</blockq
1ee70 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1ee80 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
1ee90 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  t unix timestamp
1eea0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1eeb0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
1eec0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1eed0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1eee0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1eef0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
1ef00 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69  ays since the si
1ef10 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20  gning of the US 
1ef20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49  Declaration.of I
1ef30 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e  ndependence.</p>
1ef40 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1ef50 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
1ef60 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
1ef70 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
1ef80 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1ef90 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1efa0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1efb0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
1efc0 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
1efd0 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
1efe0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1eff0 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1f000 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
1f010 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
1f020 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
1f030 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1f040 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
1f050 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
1f060 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
1f070 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
1f080 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
1f090 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1f0a0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
1f0b0 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
1f0c0 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
1f0d0 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
1f0e0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1f0f0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1f100 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
1f110 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
1f120 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
1f130 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
1f140 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
1f150 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
1f160 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
1f170 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1f180 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
1f190 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
1f1a0 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
1f1b0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
1f1c0 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
1f1d0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
1f1e0 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
1f1f0 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
1f200 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
1f210 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
1f220 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
1f230 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
1f240 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
1f250 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
1f260 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
1f270 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
1f280 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
1f290 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
1f2a0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
1f2b0 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
1f2c0 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
1f2d0 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
1f2e0 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
1f2f0 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
1f300 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
1f310 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
1f320 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
1f330 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1f340 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
1f350 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
1f360 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
1f370 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
1f380 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
1f390 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
1f3a0 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
1f3b0 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
1f3c0 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
1f3d0 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
1f3e0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
1f3f0 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1f400 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1f410 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
1f420 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61  23:59:59 (julida
1f430 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37  n day numbers 17
1f440 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20  21059.5 through 
1f450 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f  5373484.5).)^.Fo
1f460 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
1f470 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20  that range, the 
1f480 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65  results of these
1f490 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75  .functions are u
1f4a0 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
1f4b0 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
1f4c0 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
1f4d0 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
1f4e0 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
1f4f0 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
1f500 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
1f510 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
1f520 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
1f530 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
1f540 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
1f550 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
1f560 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
1f570 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
1f580 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
1f590 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
1f5a0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
1f5b0 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
1f5c0 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
1f5d0 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
1f5e0 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
1f5f0 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
1f600 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
1f610 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
1f620 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
1f630 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
1f640 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
1f650 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
1f660 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
1f670 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74   assume the .[ht
1f680 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1f690 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f  a.org/wiki/Grego
1f6a0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
1f6b0 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
1f6c0 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20  ar].system.  It 
1f6d0 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20  is also assumed 
1f6e0 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69  that every.day i
1f6f0 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20  s exactly 86400 
1f700 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74  seconds in durat
1f710 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
1f720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1f770 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74  ection {Aggregat
1f780 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e Functions} agg
1f790 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a  func {*aggfunc}.
1f7a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20  </tcl>..<p>.The 
1f7b0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1f7c0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
1f7d0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
1f7e0 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
1f7f0 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
1f800 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
1f810 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
1f820 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
1f830 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1f840 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
1f850 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
1f860 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
1f870 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
1f880 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
1f890 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
1f8a0 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
1f8b0 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
1f8c0 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
1f8d0 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
1f8e0 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
1f8f0 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
1f900 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
1f910 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
1f920 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
1f930 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
1f940 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
1f950 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
1f960 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
1f970 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
1f980 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
1f990 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
1f9a0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
1f9b0 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
1f9c0 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
1f9d0 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
1f9e0 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
1f9f0 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
1fa00 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
1fa10 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
1fa20 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1fa30 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
1fa40 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1fa50 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
1fa60 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
1fa70 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
1fa80 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
1fa90 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
1faa0 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
1fab0 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
1fac0 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
1fad0 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
1fae0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
1faf0 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
1fb00 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1fb10 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
1fb20 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
1fb30 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
1fb40 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
1fb50 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
1fb60 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
1fb70 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1fb80 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
1fb90 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
1fba0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1fbb0 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
1fbc0 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
1fbd0 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
1fbe0 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
1fbf0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
1fc00 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
1fc10 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1fc20 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
1fc30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
1fc40 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
1fc50 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
1fc60 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
1fc70 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
1fc80 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
1fc90 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
1fca0 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
1fcb0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
1fcc0 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
1fcd0 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
1fce0 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
1fcf0 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
1fd00 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
1fd10 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
1fd20 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1fd30 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
1fd40 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
1fd50 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
1fd60 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
1fd70 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
1fd80 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
1fd90 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
1fda0 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
1fdb0 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
1fdc0 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
1fdd0 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  it is used as th
1fde0 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
1fdf0 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
1fe00 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
1fe10 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
1fe20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
1fe30 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
1fe40 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
1fe50 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
1fe60 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
1fe70 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
1fe80 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
1fe90 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
1fea0 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
1feb0 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
1fec0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1fed0 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
1fee0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
1fef0 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
1ff00 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
1ff10 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
1ff20 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
1ff30 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
1ff40 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
1ff50 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
1ff60 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
1ff70 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
1ff80 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67  me column.  ^Agg
1ff90 72 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74  regate max() ret
1ffa0 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20  urns NULL .  if 
1ffb0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
1ffc0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1ffd0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
1ffe0 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1fff0 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e  f {min(X)} {*min
20000 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e  AggFunc *agg_min
20010 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74   {min() aggregat
20020 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
20030 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72   ^The min() aggr
20040 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
20050 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e   returns the min
20060 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  imum non-NULL va
20070 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
20080 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
20090 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76    ^The minimum v
200a0 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
200b0 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
200c0 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
200d0 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
200e0 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
200f0 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20  n..  ^Aggregate 
20100 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55  min() returns NU
20110 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
20120 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
20130 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73  on-NULL.  values
20140 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
20150 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
20160 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20  ) total(X)} {.  
20170 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74  *sumFunc *sum *t
20180 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67  otal.  {sum() ag
20190 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
201a0 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67  }.  {total() agg
201b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
201c0 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28  .} {.  ^The sum(
201d0 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67  ) and total() ag
201e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
201f0 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f  s.  return sum o
20200 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
20210 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20220 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
20230 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
20240 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
20250 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
20260 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
20270 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
20280 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
20290 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
202a0 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
202b0 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
202c0 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
202d0 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
202e0 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
202f0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
20300 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
20310 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
20320 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
20330 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
20340 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
20350 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
20360 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
20370 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
20380 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
20390 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
203a0 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
203b0 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
203c0 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
203d0 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
203e0 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73  >..  <p>^The res
203f0 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
20400 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
20410 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
20420 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
20430 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
20440 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
20450 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
20460 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
20470 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74  .  ^If any input
20480 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
20490 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
204a0 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
204b0 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
204c0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
204d0 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
204e0 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
204f0 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
20500 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
20510 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74  <p>^Sum() will t
20520 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72  hrow an "integer
20530 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70   overflow" excep
20540 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75  tion if all inpu
20550 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72  ts.  are integer
20560 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20  s or NULL.  and 
20570 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
20580 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
20590 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
205a0 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
205b0 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72    ^Total() never
205c0 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
205d0 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c  er overflow..}.<
205e0 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
205f0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
20600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20640 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53  ####.Section INS
20650 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45  ERT insert {INSE
20660 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65  RT *INSERTs}..Re
20670 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
20680 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74  gram insert-stmt
20690 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
206a0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
206b0 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20   comes in three 
206c0 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c  basic forms.  .<
206d0 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ul>.<li><p>^The 
206e0 66 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68  first form (with
206f0 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
20700 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f  yword) creates o
20710 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72  ne or more.new r
20720 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69  ows in.an existi
20730 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f  ng table. ^If no
20740 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20   column-list is 
20750 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74  specified then t
20760 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c  he number.of val
20770 75 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  ues inserted int
20780 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20  o each row.must 
20790 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  be the same as t
207a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
207b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
207c0 65 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  e. ^In this case
207d0 0a 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65  .the result of e
207e0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65  valuating the le
207f0 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69  ft-most expressi
20800 6f 6e 20 66 72 6f 6d 20 65 61 63 68 20 74 65 72  on from each ter
20810 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55 45 53 20  m of.the VALUES 
20820 6c 69 73 74 20 69 73 20 69 6e 73 65 72 74 65 64  list is inserted
20830 20 69 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d   into the left-m
20840 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61  ost column of ea
20850 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20  ch new row,.and 
20860 73 6f 20 66 6f 72 74 68 20 66 6f 72 20 65 61 63  so forth for eac
20870 68 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 70  h subsequent exp
20880 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20 61 0a 63  ression. ^If a.c
20890 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
208a0 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
208b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
208c0 65 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20  es in each term 
208d0 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c 69 73  of the.VALUE lis
208e0 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  t must match the
208f0 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69   number of.speci
20900 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45  fied columns. ^E
20910 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  ach of the named
20920 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
20930 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c  new row is popul
20940 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 72 65  ated.with the re
20950 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
20960 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
20970 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70  nding VALUES exp
20980 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a  ression. ^Table.
20990 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20  columns that do 
209a0 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
209b0 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e column list ar
209c0 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  e populated with
209d0 20 74 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c   the default.col
209e0 75 6d 6e 20 76 61 6c 75 65 20 28 73 70 65 63 69  umn value (speci
209f0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
20a00 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
20a10 20 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20   statement), or 
20a20 77 69 74 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20  with NULL if.no 
20a30 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
20a40 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69   specified...<li
20a50 3e 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66  ><p>The second f
20a60 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52  orm of the INSER
20a70 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74  T statement cont
20a80 61 69 6e 73 20 61 20 53 45 4c 45 43 54 20 73 74  ains a SELECT st
20a90 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20  atement.instead 
20aa0 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75  of a VALUES clau
20ab0 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72 79  se. ^A new entry
20ac0 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
20ad0 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20  o the table for 
20ae0 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61 74 61  each.row of data
20af0 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65   returned by exe
20b00 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
20b10 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66  T statement. ^If
20b20 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69   a column-list i
20b30 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
20b40 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
20b50 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
20b60 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d   of the SELECT m
20b70 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a  ust be the same.
20b80 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
20b90 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 6f   items in the co
20ba0 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65  lumn-list. ^Othe
20bb0 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c  rwise, if no col
20bc0 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
20bd0 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
20be0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
20bf0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
20c00 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
20c10 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
20c20 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
20c30 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
20c40 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73 74 61   ^Any SELECT sta
20c50 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e  tement, includin
20c60 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  g.[compound SELE
20c70 43 54 73 5d 20 61 6e 64 20 53 45 4c 45 43 54 20  CTs] and SELECT 
20c80 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
20c90 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 2f 6f  [ORDER BY] and/o
20ca0 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  r [LIMIT] clause
20cb0 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20  s, .may be used 
20cc0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
20cd0 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 66  tement of this f
20ce0 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65  orm...<li><p>The
20cf0 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61   third form of a
20d00 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
20d10 6e 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55  nt is with DEFAU
20d20 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65  LT VALUES..^(The
20d30 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41   INSERT ... DEFA
20d40 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65  ULT VALUES state
20d50 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20 73  ment inserts a s
20d60 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e  ingle new row in
20d70 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62  to the.named tab
20d80 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75  le.)^ ^Each colu
20d90 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  mn of the new ro
20da0 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 77  w is populated w
20db0 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74 20  ith its default 
20dc0 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68 20 61  value,.or with a
20dd0 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61   NULL if no defa
20de0 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65  ult value is spe
20df0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
20e00 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64 65 66  f the column.def
20e10 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 43  inition in the C
20e20 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
20e30 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c  ement...</ul>..<
20e40 70 3e 5e 54 68 65 20 22 52 45 50 4c 41 43 45 22  p>^The "REPLACE"
20e50 20 61 6e 64 20 22 49 4e 53 45 52 54 20 4f 52 20   and "INSERT OR 
20e60 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 66  <i>action</i>" f
20e70 6f 72 6d 73 20 73 70 65 63 69 66 79 20 61 6e 20  orms specify an 
20e80 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
20e90 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
20ea0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
20eb0 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
20ec0 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45  ng this one INSE
20ed0 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  RT command..See 
20ee0 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
20ef0 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
20f00 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
20f10 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
20f20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
20f30 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20  ith MySQL, ^the 
20f40 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68  parser allows th
20f50 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e  e use of the.sin
20f60 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68  gle keyword <a h
20f70 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63  ref="lang_replac
20f80 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c  e.html">REPLACE<
20f90 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73  /a> as an .alias
20fa0 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
20fb0 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28  REPLACE"...<p>^(
20fc0 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69  The optional "<i
20fd0 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
20fe0 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66  i><b>.</b>" pref
20ff0 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62  ix on the <i>tab
21000 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73  le-name</i>.is s
21010 75 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c  upport for top-l
21020 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
21030 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20  ements only.)^  
21040 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  ^The table name 
21050 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66  must be.unqualif
21060 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73  ied for INSERT s
21070 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
21080 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45  ccur within [CRE
21090 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
210a0 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61  tements..^Simila
210b0 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c  rly, the "DEFAUL
210c0 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
210d0 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
210e0 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72  tement is suppor
210f0 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65  ted for.top-leve
21100 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
21110 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74  nts only and not
21120 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
21130 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72  ements within.tr
21140 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63  iggers..<p>..<tc
21150 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
21160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
211a0 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  #.Section {ON CO
211b0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
211c0 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69  onflict {{confli
211d0 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43  ct clause} {ON C
211e0 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65 63 75 72  ONFLICT}}..Recur
211f0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
21200 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  m conflict-claus
21210 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
21220 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
21230 75 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70  use is not a sep
21240 61 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e  arate SQL comman
21250 64 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d  d.  It is a.non-
21260 73 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20  standard clause 
21270 74 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20  that can appear 
21280 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51  in many other SQ
21290 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69  L commands..It i
212a0 73 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20  s given its own 
212b0 73 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20  section in this 
212c0 64 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65  document because
212d0 20 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20   it is not.part 
212e0 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20  of standard SQL 
212f0 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69  and therefore mi
21300 67 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c  ght not be famil
21310 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  iar.</p>..<p>^Th
21320 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  e syntax for the
21330 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
21340 75 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20  use is as shown 
21350 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52  above for.the CR
21360 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61  EATE TABLE comma
21370 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e  nd.  ^For the IN
21380 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20  SERT and.UPDATE 
21390 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65  commands, the ke
213a0 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c  ywords "ON CONFL
213b0 49 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65  ICT" are replace
213c0 64 20 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61  d by "OR" so tha
213d0 74 0a 74 68 65 20 73 79 6e 74 61 78 20 72 65 61  t.the syntax rea
213e0 64 73 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c  ds more naturall
213f0 79 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  y.  For example,
21400 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53   instead of."INS
21410 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ERT ON CONFLICT 
21420 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20  IGNORE" we have 
21430 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
21440 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73  E"..The keywords
21450 20 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20   change but the 
21460 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  meaning of the c
21470 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
21480 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70  e.either way.</p
21490 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
214a0 46 4c 49 43 54 20 63 6c 61 75 73 65 20 61 70 70  FLICT clause app
214b0 6c 69 65 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d  lies to [UNIQUE]
214c0 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43  , [NOT NULL],.[C
214d0 48 45 43 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d  HECK], and [PRIM
214e0 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
214f0 69 6e 74 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e  ints..The ON CON
21500 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20  FLICT algorithm 
21510 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74  does not.apply t
21520 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  o [FOREIGN KEY c
21530 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65  onstraints]..The
21540 72 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66  re are five conf
21550 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
21560 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65  algorithm choice
21570 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s:.ROLLBACK, ABO
21580 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT, FAIL, IGNORE
21590 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e  , and REPLACE..^
215a0 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  The default conf
215b0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
215c0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
215d0 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61  RT.  This.is wha
215e0 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e  t they mean:</p>
215f0 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f  ..<dl>.<dt><b>RO
21600 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a  LLBACK</b></dt>.
21610 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
21620 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
21630 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21640 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c   occurs, the ROL
21650 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e  LBACK.resolution
21660 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
21670 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
21680 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
21690 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  .an SQLITE_CONST
216a0 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
216b0 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63  rolls back the c
216c0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
216d0 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73  on..^If no trans
216e0 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65  action is.active
216f0 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65   (other than the
21700 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63   implied transac
21710 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65  tion that is cre
21720 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f  ated on every.co
21730 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20  mmand) then the 
21740 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74  ROLLBACK resolut
21750 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f  ion algorithm wo
21760 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
21770 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69  the.ABORT algori
21780 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  thm.</p></dd>..<
21790 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
217a0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
217b0 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
217c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
217d0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
217e0 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69  e ABORT.resoluti
217f0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
21800 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
21810 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69  SQL statement.wi
21820 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th an SQLITE_CON
21830 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
21840 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20  d backs out any 
21850 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20  changes.made by 
21860 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
21870 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63  statement; but c
21880 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79  hanges caused.by
21890 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65   prior SQL state
218a0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
218b0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
218c0 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n are preserved 
218d0 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74  and the.transact
218e0 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
218f0 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20  ve..This is the 
21900 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
21910 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f   and the behavio
21920 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
21930 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e  he SQL.standard.
21940 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
21950 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a  b>FAIL</b></dt>.
21960 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
21970 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
21980 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21990 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49   occurs, the FAI
219a0 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  L.resolution alg
219b0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
219c0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
219d0 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a  atement with an.
219e0 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
219f0 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74  T error.  ^But t
21a00 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69  he FAIL resoluti
21a10 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b  on does not.back
21a20 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67   out prior chang
21a30 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  es of the SQL st
21a40 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69  atement that fai
21a50 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20  led nor does.it 
21a60 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  end the transact
21a70 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
21a80 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a  e, if an UPDATE.
21a90 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e  statement encoun
21aa0 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69  tered a constrai
21ab0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20  nt violation on 
21ac0 74 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68  the 100th row th
21ad0 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74  at.it attempts t
21ae0 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74  o update, then t
21af0 68 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20  he first 99 row 
21b00 63 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73  changes are pres
21b10 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65  erved.but change
21b20 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e  s to rows 100 an
21b30 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f  d beyond never o
21b40 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ccur.</p></dd>..
21b50 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62  <dt><b>IGNORE</b
21b60 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
21b70 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
21b80 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
21b90 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
21ba0 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f  .the IGNORE reso
21bb0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21bc0 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72   skips the one r
21bd0 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
21be0 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
21bf0 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f  violation and co
21c00 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69  ntinues processi
21c10 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f  ng subsequent ro
21c20 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74  ws.of the SQL st
21c30 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f  atement as if no
21c40 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67  thing went wrong
21c50 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66  ..Other rows bef
21c60 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68  ore and after th
21c70 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61  e row that.conta
21c80 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  ined the constra
21c90 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
21ca0 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
21cb0 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
21cc0 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74  ^No error is ret
21cd0 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49  urned when the I
21ce0 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
21cf0 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
21d00 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
21d10 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45  </dd>..<dt><b>RE
21d20 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  PLACE</b></dt>.<
21d30 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 5b  dd><p> ^When a [
21d40 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d  UNIQUE] or [PRIM
21d50 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
21d60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
21d70 63 75 72 73 2c 20 0a 74 68 65 20 52 45 50 4c 41  curs, .the REPLA
21d80 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c  CE algorithm.del
21d90 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e  etes pre-existin
21da0 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65 20  g rows that are 
21db0 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73  causing the cons
21dc0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21dd0 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74  .prior to insert
21de0 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20  ing or updating 
21df0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
21e00 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  and the command 
21e10 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75  continues .execu
21e20 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e  ting normally..^
21e30 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20  If a [NOT NULL] 
21e40 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21e50 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
21e60 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
21e70 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70  t.resolution rep
21e80 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76  laces the NULL v
21e90 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20 64 65  alue with.the de
21ea0 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
21eb0 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  that column, or 
21ec0 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61  if the column ha
21ed0 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c  s no default.val
21ee0 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f  ue, then the ABO
21ef0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
21f00 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b 43 48 45  used..^If a [CHE
21f10 43 4b 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  CK] constraint v
21f20 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
21f30 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
21f40 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
21f50 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79  .algorithm alway
21f60 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f  s works like ABO
21f70 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  RT.</p>..<p>^Whe
21f80 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  n the REPLACE co
21f90 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
21fa0 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74  n strategy delet
21fb0 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72  es rows in order
21fc0 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f   to.satisfy a co
21fd0 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54  nstraint, [CREAT
21fe0 45 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65  E TRIGGER | dele
21ff0 74 65 20 74 72 69 67 67 65 72 73 5d 20 66 69 72  te triggers] fir
22000 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  e if and only if
22010 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  .[recursive_trig
22020 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65  gers pragma | re
22030 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
22040 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f  ] are enabled.</
22050 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c  p>..<p>^The [sql
22060 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
22070 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20   | update hook] 
22080 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66  is not invoked f
22090 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65  or rows that.are
220a0 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
220b0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
220c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
220d0 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73  tegy.  ^Nor does
220e0 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65  .REPLACE increme
220f0 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nt the [sqlite3_
22100 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65  changes | change
22110 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65   counter]..The e
22120 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76  xceptional behav
22130 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20  iors defined in 
22140 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d  this paragraph m
22150 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20  ight change .in 
22160 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
22170 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  .</p>.</dl>..<p>
22180 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  ^The algorithm s
22190 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
221a0 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20  OR clause of an 
221b0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
221c0 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
221d0 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
221e0 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
221f0 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
22200 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
22210 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
22220 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
22230 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
22240 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
22250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22290 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
222a0 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
222b0 4e 44 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42  NDEX..RecursiveB
222c0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
222d0 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
222e0 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45  ..<p>^The REINDE
222f0 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
22300 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
22310 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
22320 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
22330 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
22340 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
22350 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
22360 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
22370 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
22380 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
22390 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66  keyword is not f
223a0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
223b0 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
223c0 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a  or database .obj
223d0 65 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ect identifier, 
223e0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
223f0 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
22400 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
22410 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20  ebuilt...<p>^If 
22420 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
22430 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ord is followed 
22440 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
22450 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68  equence name, th
22460 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en.all indices i
22470 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
22480 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
22490 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
224a0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a  ation sequences.
224b0 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a  are recreated. .
224c0 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20  .<p>^Or, if the 
224d0 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65  argument attache
224e0 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58  d to the REINDEX
224f0 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
22500 65 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65  ecific .database
22510 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
22520 20 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65   indices attache
22530 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
22540 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
22550 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65  ilt. .^If it ide
22560 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
22570 69 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  ic database inde
22580 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61  x, then just tha
22590 74 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65  t index is recre
225a0 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f  ated...<p>^If no
225b0 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
225c0 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
225d0 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
225e0 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
225f0 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
22600 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
22610 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
22620 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65  ied name, SQLite
22630 20 69 6e 74 65 72 70 72 65 74 73 0a 74 68 69 73   interprets.this
22640 20 61 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   as a request to
22650 20 72 65 62 75 69 6c 64 20 74 68 65 20 69 6e 64   rebuild the ind
22660 69 63 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ices that use th
22670 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e named collatio
22680 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54 68 69 73  n sequence..This
22690 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
226a0 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
226b0 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
226c0 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
226d0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
226e0 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78  /i> when reindex
226f0 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20 74  ing a specific t
22700 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a  able or index...
22710 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
22720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22760 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45  #####.Section RE
22770 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45  PLACE replace RE
22780 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c  PLACE..</tcl>..<
22790 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63  p>^The REPLACE c
227a0 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69  ommand is an ali
227b0 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20  as for the "[ON 
227c0 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52  CONFLICT | INSER
227d0 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76  T OR REPLACE]".v
227e0 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49  ariant of the [I
227f0 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20  NSERT] command. 
22800 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
22810 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
22820 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72  patibility other
22830 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
22840 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20  gines.  See the 
22850 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e  .[INSERT] comman
22860 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
22870 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
22880 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
22890 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
228a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228e0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
228f0 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20 77   {WITH clause} w
22900 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62  ith {{common tab
22910 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20  le expressions} 
22920 57 49 54 48 7d 0a 0a 52 65 63 75 72 73 69 76 65  WITH}..Recursive
22930 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 77 69  BubbleDiagram wi
22940 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  th-clause.</tcl>
22950 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62 6c  ..<p>Common Tabl
22960 65 20 45 78 70 72 65 73 73 69 6f 6e 73 20 6f 72  e Expressions or
22970 20 43 54 45 73 20 61 63 74 20 6c 69 6b 65 20 74   CTEs act like t
22980 65 6d 70 6f 72 61 72 79 20 5b 76 69 65 77 73 5d  emporary [views]
22990 20 74 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79   that exist.only
229a0 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f   for the duratio
229b0 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 53 51  n of a single SQ
229c0 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  L statement.  Th
229d0 65 72 65 20 61 72 65 20 74 77 6f 20 6b 69 6e 64  ere are two kind
229e0 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  s of.common tabl
229f0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 3a 20 22  e expressions: "
22a00 6f 72 64 69 6e 61 72 79 22 20 61 6e 64 20 22 72  ordinary" and "r
22a10 65 63 75 72 73 69 76 65 22 2e 20 4f 72 64 69 6e  ecursive". Ordin
22a20 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  ary .common tabl
22a30 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  e expressions ar
22a40 65 20 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d 61  e helpful for ma
22a50 6b 69 6e 67 0a 71 75 65 72 69 65 73 20 65 61 73  king.queries eas
22a60 69 65 72 20 74 6f 20 75 6e 64 65 72 73 74 61 6e  ier to understan
22a70 64 20 62 79 20 66 61 63 74 6f 72 69 6e 67 0a 73  d by factoring.s
22a80 75 62 71 75 65 72 69 65 73 20 6f 75 74 20 6f 66  ubqueries out of
22a90 20 74 68 65 20 6d 61 69 6e 20 53 51 4c 20 73 74   the main SQL st
22aa0 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73 69  atement..Recursi
22ab0 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
22ac0 65 78 70 72 65 73 73 69 6f 6e 73 0a 70 72 6f 76  expressions.prov
22ad0 69 64 65 20 74 68 65 20 61 62 69 6c 69 74 79 20  ide the ability 
22ae0 74 6f 20 64 6f 20 68 69 65 72 61 72 63 68 69 63  to do hierarchic
22af0 61 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65 20  al or.recursive 
22b00 71 75 65 72 69 65 73 20 6f 66 20 74 72 65 65 73  queries of trees
22b10 20 61 6e 64 20 67 72 61 70 68 73 2c 20 61 20 63   and graphs, a c
22b20 61 70 61 62 69 6c 69 74 79 0a 74 68 61 74 20 69  apability.that i
22b30 73 20 6e 6f 74 20 6f 74 68 65 72 77 69 73 65 20  s not otherwise 
22b40 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
22b50 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 0a   SQL language...
22b60 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61  <p>All common ta
22b70 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
22b80 28 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 72 65  (ordinary and re
22b90 63 75 72 73 69 76 65 29 20 61 72 65 20 0a 63 72  cursive) are .cr
22ba0 65 61 74 65 64 20 62 79 20 70 72 65 70 65 6e 64  eated by prepend
22bb0 69 6e 67 20 61 20 57 49 54 48 20 63 6c 61 75 73  ing a WITH claus
22bc0 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 61 20  e in front of a 
22bd0 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e 53 45 52  [SELECT], [INSER
22be0 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72  T], [DELETE],.or
22bf0 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
22c00 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c 65 20 57  ent.  A single W
22c10 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 73  ITH clause can s
22c20 70 65 63 69 66 79 20 6f 6e 65 20 6f 72 20 6d 6f  pecify one or mo
22c30 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  re.common table 
22c40 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73 6f 6d  expressions, som
22c50 65 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 6f  e of which are o
22c60 72 64 69 6e 61 72 79 20 61 6e 64 20 73 6f 6d 65  rdinary and some
22c70 20 6f 66 20 77 68 69 63 68 0a 61 72 65 20 72 65   of which.are re
22c80 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 68  cursive...<tcl>h
22c90 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 69 6e  d_fragment ordin
22ca0 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61 72 79  arycte {ordinary
22cb0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22cc0 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  pressions}</tcl>
22cd0 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20 43 6f  .<h3>Ordinary Co
22ce0 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65  mmon Table Expre
22cf0 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
22d00 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
22d10 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22d20 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69 66 20  ion works as if 
22d30 69 74 20 77 65 72 65 20 61 20 5b 76 69 65 77 5d  it were a [view]
22d40 20 74 68 61 74 0a 65 78 69 73 74 73 20 66 6f 72   that.exists for
22d50 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66   the duration of
22d60 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74 65 6d   a single statem
22d70 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79 20 63  ent.  Ordinary c
22d80 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70 72  ommon table.expr
22d90 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73 65 66  essions are usef
22da0 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69 6e 67  ul for factoring
22db0 20 6f 75 74 20 73 75 62 71 75 65 72 69 65 73 20   out subqueries 
22dc0 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65 20 6f  and making the o
22dd0 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74 65  verall.SQL state
22de0 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f 20 72  ment easier to r
22df0 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73 74 61  ead and understa
22e00 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54 48 20 63  nd...<p>A WITH c
22e10 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e 74 61 69  lause can contai
22e20 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f  n ordinary commo
22e30 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22e40 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69 74 20 69  ons even if.it i
22e50 6e 63 6c 75 64 65 73 20 74 68 65 20 52 45 43 55  ncludes the RECU
22e60 52 53 49 56 45 20 6b 65 79 77 6f 72 64 2e 20 20  RSIVE keyword.  
22e70 54 68 65 20 75 73 65 20 6f 66 20 52 45 43 55 52  The use of RECUR
22e80 53 49 56 45 20 64 6f 65 73 20 6e 6f 74 20 66 6f  SIVE does not fo
22e90 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  rce.common table
22ea0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
22eb0 62 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c  be recursive...<
22ec0 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74  tcl>.hd_fragment
22ed0 20 72 65 63 75 72 73 69 76 65 63 74 65 20 7b 72   recursivecte {r
22ee0 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
22ef0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22f00 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76 65 20  s} \.{recursive 
22f10 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68  query}.</tcl>.<h
22f20 33 3e 52 65 63 75 72 73 69 76 65 20 43 6f 6d 6d  3>Recursive Comm
22f30 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73  on Table Express
22f40 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  ions</h3>..<p>A 
22f50 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
22f60 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22f70 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  n can be used to
22f80 20 77 72 69 74 65 20 61 20 71 75 65 72 79 20 74   write a query t
22f90 68 61 74 0a 77 61 6c 6b 73 20 61 20 74 72 65 65  hat.walks a tree
22fa0 20 6f 72 20 67 72 61 70 68 2e 20 20 41 20 72 65   or graph.  A re
22fb0 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
22fc0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
22fd0 68 61 73 20 74 68 65 20 73 61 6d 65 0a 62 61 73  has the same.bas
22fe0 69 63 20 73 79 6e 74 61 78 20 61 73 20 61 6e 20  ic syntax as an 
22ff0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
23000 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23010 2c 20 62 75 74 20 77 69 74 68 20 74 68 65 20 66  , but with the f
23020 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f  ollowing.additio
23030 6e 61 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a 3c  nal features:..<
23040 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b 73  ol>.<li> The "[s
23050 65 6c 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20 20  elect-stmt]".   
23060 20 20 6d 75 73 74 20 62 65 20 61 20 5b 63 6f 6d    must be a [com
23070 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 20 77 68  pound select] wh
23080 65 72 65 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ere the right-mo
23090 73 74 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65  st [compound-ope
230a0 72 61 74 6f 72 5d 20 69 73 0a 20 20 20 20 20 65  rator] is.     e
230b0 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20 55  ither UNION or U
230c0 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54  NION ALL..<li> T
230d0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 6f  he table named o
230e0 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  n the left-hand 
230f0 73 69 64 65 20 6f 66 20 74 68 65 20 41 53 20 6b  side of the AS k
23100 65 79 77 6f 72 64 20 6d 75 73 74 20 61 70 70 65  eyword must appe
23110 61 72 0a 20 20 20 20 20 65 78 61 63 74 6c 79 20  ar.     exactly 
23120 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
23130 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72   clause of the r
23140 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54  ight-most SELECT
23150 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20   statement.     
23160 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
23170 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77 68  select, and nowh
23180 65 72 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a  ere else..</ol>.
23190 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74 20 61 6e  .<p>To put it an
231a0 6f 74 68 65 72 20 77 61 79 2c 20 61 20 72 65 63  other way, a rec
231b0 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
231c0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ble expression m
231d0 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68  ust.look like th
231e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74  e following:..<t
231f0 63 6c 3e 52 65 63 75 72 73 69 76 65 42 75 62 62  cl>RecursiveBubb
23200 6c 65 44 69 61 67 72 61 6d 20 72 65 63 75 72 73  leDiagram recurs
23210 69 76 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c  ive-cte</tcl>..<
23220 70 3e 57 65 20 72 65 66 65 72 20 74 6f 20 74 68  p>We refer to th
23230 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 62 79  e table named by
23240 20 74 68 65 20 63 74 65 2d 74 61 62 6c 65 2d 6e   the cte-table-n
23250 61 6d 65 20 69 6e 20 61 20 72 65 63 75 72 73 69  ame in a recursi
23260 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve.common table 
23270 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 74 68  expression as th
23280 65 20 22 72 65 63 75 72 73 69 76 65 20 74 61 62  e "recursive tab
23290 6c 65 22 2e 0a 49 6e 20 74 68 65 20 72 65 63 75  le"..In the recu
232a0 72 73 69 76 65 2d 63 74 65 20 62 75 62 62 6c 65  rsive-cte bubble
232b0 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20   diagram above, 
232c0 74 68 65 20 72 65 63 75 72 73 69 76 65 0a 74 61  the recursive.ta
232d0 62 6c 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  ble must appear 
232e0 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
232f0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
23300 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
23310 2d 73 65 6c 65 63 74 0a 61 6e 64 20 6d 75 73 74  -select.and must
23320 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77   not appear anyw
23330 68 65 72 65 20 65 6c 73 65 20 69 6e 20 65 69 74  here else in eit
23340 68 65 72 20 74 68 65 20 69 6e 69 74 69 61 6c 2d  her the initial-
23350 73 65 6c 65 63 74 20 6f 72 20 74 68 65 0a 72 65  select or the.re
23360 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
23370 69 6e 63 6c 75 64 69 6e 67 20 73 75 62 71 75 65  including subque
23380 72 69 65 73 2e 20 20 54 68 65 20 69 6e 69 74 69  ries.  The initi
23390 61 6c 2d 73 65 6c 65 63 74 20 6d 61 79 20 62 65  al-select may be
233a0 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  .a [compound sel
233b0 65 63 74 5d 2c 20 62 75 74 20 69 74 20 6d 61 79  ect], but it may
233c0 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e 20   not include an 
233d0 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c  ORDER BY, LIMIT,
233e0 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54 68 65 20   or OFFSET..The 
233f0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
23400 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
23410 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74 20 61 20  e select, not a 
23420 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68 65 0a 72  compound.  The.r
23430 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
23440 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 69 6e  is allowed to in
23450 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42  clude an ORDER B
23460 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64 2f 6f 72  Y, LIMIT, and/or
23470 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e 54 68 65   OFFSET...<p>The
23480 20 62 61 73 69 63 20 61 6c 67 6f 72 69 74 68 6d   basic algorithm
23490 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 74   for computing t
234a0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
234b0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
234c0 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e.is as follows:
234d0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20  ..<ol>.<li> Run 
234e0 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  the initial-sele
234f0 63 74 20 61 6e 64 20 61 64 64 20 74 68 65 20 72  ct and add the r
23500 65 73 75 6c 74 73 20 74 6f 20 61 20 71 75 65 75  esults to a queu
23510 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68  e..<li> While th
23520 65 20 71 75 65 75 65 20 69 73 20 6e 6f 74 20 65  e queue is not e
23530 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22  mpty:.<ol type="
23540 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74  a">.<li> Extract
23550 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 72   a single row fr
23560 6f 6d 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c  om the queue..<l
23570 69 3e 20 49 6e 73 65 72 74 20 74 68 61 74 20 73  i> Insert that s
23580 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74  ingle row into t
23590 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
235a0 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20  le.<li> Pretend 
235b0 74 68 61 74 20 74 68 65 20 73 69 6e 67 6c 65 20  that the single 
235c0 72 6f 77 20 6a 75 73 74 20 65 78 74 72 61 63 74  row just extract
235d0 65 64 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20  ed is the only. 
235e0 20 20 20 20 72 6f 77 20 69 6e 20 74 68 65 20 72      row in the r
235f0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61  ecursive table a
23600 6e 64 20 72 75 6e 20 74 68 65 20 72 65 63 75 72  nd run the recur
23610 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20  sive-select,.   
23620 20 20 61 64 64 69 6e 67 20 61 6c 6c 20 72 65 73    adding all res
23630 75 6c 74 73 20 74 6f 20 74 68 65 20 71 75 65 75  ults to the queu
23640 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a  e..</ol>.</ol>..
23650 3c 70 3e 54 68 65 20 62 61 73 69 63 20 70 72 6f  <p>The basic pro
23660 63 65 64 75 72 65 20 61 62 6f 76 65 20 6d 61 79  cedure above may
23670 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65   modified by the
23680 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
23690 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75  ional rules:..<u
236a0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  l>.<li><p>.  If 
236b0 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72  a UNION operator
236c0 20 63 6f 6e 6e 65 63 74 73 20 74 68 65 20 69 6e   connects the in
236d0 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 77 69 74  itial-select wit
236e0 68 20 74 68 65 0a 20 20 72 65 63 75 72 73 69 76  h the.  recursiv
236f0 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 6e 20 6f  e-select, then o
23700 6e 6c 79 20 61 64 64 20 72 6f 77 73 20 74 6f 20  nly add rows to 
23710 74 68 65 20 71 75 65 75 65 20 69 66 20 6e 6f 20  the queue if no 
23720 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20 68 61  identical row ha
23730 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69 6f 75  s.  been previou
23740 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74 68 65  sly added to the
23750 20 71 75 65 75 65 2e 20 20 52 65 70 65 61 74 65   queue.  Repeate
23760 64 20 72 6f 77 73 20 61 72 65 20 64 69 73 63 61  d rows are disca
23770 72 64 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  rded before bein
23780 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74 68 65  g.  added to the
23790 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20 74   queue even if t
237a0 68 65 20 72 65 70 65 61 74 65 64 20 72 6f 77 73  he repeated rows
237b0 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65   have already be
237c0 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20 20 66  en extracted.  f
237d0 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 62 79  rom the queue by
237e0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
237f0 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f 70 65  tep.  If the ope
23800 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e 20 41  rator is UNION A
23810 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c 20 72  LL,.  then all r
23820 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  ows generated by
23830 20 62 6f 74 68 20 74 68 65 20 69 6e 69 74 69 61   both the initia
23840 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 74 68 65  l-select and the
23850 0a 20 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  .  recursive-sel
23860 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 61  ect are always a
23870 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
23880 65 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61  e even if they a
23890 72 65 20 72 65 70 65 61 74 73 2e 0a 20 20 57 68  re repeats..  Wh
238a0 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
238b0 66 20 61 20 72 6f 77 20 69 73 20 72 65 70 65 61  f a row is repea
238c0 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ted, NULL values
238d0 20 63 6f 6d 70 61 72 65 0a 20 20 65 71 75 61 6c   compare.  equal
238e0 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20   to one another 
238f0 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f  and not equal to
23900 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65   any other value
23910 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20  ..<li><p>.  The 
23920 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 69 66  LIMIT clause, if
23930 20 70 72 65 73 65 6e 74 2c 20 64 65 74 65 72 6d   present, determ
23940 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
23950 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
23960 74 68 61 74 0a 20 20 77 69 6c 6c 20 65 76 65 72  that.  will ever
23970 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
23980 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
23990 20 69 6e 20 73 74 65 70 20 32 62 2e 0a 20 20 4f   in step 2b..  O
239a0 6e 63 65 20 74 68 65 20 6c 69 6d 69 74 20 69 73  nce the limit is
239b0 20 72 65 61 63 68 65 64 2c 20 74 68 65 20 72 65   reached, the re
239c0 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20  cursion stops.. 
239d0 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f   A limit of zero
239e0 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72   means that no r
239f0 6f 77 73 20 61 72 65 20 65 76 65 72 20 61 64 64  ows are ever add
23a00 65 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75  ed to the.  recu
23a10 72 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64  rsive table, and
23a20 20 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69   a negative limi
23a30 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d  t means an unlim
23a40 69 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ited number of r
23a50 6f 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64  ows.  may be add
23a60 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
23a70 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c  ive table..<li><
23a80 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20  p>.  The OFFSET 
23a90 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69 73  clause, if it is
23aa0 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61 73   present and has
23ab0 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75   a positive valu
23ac0 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74 68  e N, prevents th
23ad0 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77 73  e.  first N rows
23ae0 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64 65   from being adde
23af0 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
23b00 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65 20  ve table..  The 
23b10 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72 65  first N rows are
23b20 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65 64   still processed
23b30 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69 76   by the recursiv
23b40 65 2d 73 65 6c 65 63 74 3b 20 74 68 65 79 0a 20  e-select; they. 
23b50 20 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64   just are not ad
23b60 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
23b70 73 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77  sive table.  Row
23b80 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65  s are not counte
23b90 64 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69  d toward.  fulfi
23ba0 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lling the LIMIT 
23bb0 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54  until all OFFSET
23bc0 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
23bd0 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e  skipped..<li><p>
23be0 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
23bf0 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
23c00 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
23c10 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
23c20 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
23c30 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
23c40 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
23c50 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
23c60 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
23c70 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
23c80 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
23c90 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
23ca0 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
23cb0 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
23cc0 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
23cd0 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
23ce0 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
23cf0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
23d00 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
23d10 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
23d20 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
23d30 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
23d40 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
23d50 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
23d60 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
23d70 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c  nt rcex1</tcl>.<
23d80 68 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65  h4>Recursive Que
23d90 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
23da0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
23db0 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
23dc0 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65   all integers be
23dd0 74 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30  tween 1 and 1000
23de0 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  000:..<blockquot
23df0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
23e00 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
23e10 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e  AS (VALUES(1) UN
23e20 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78  ION ALL SELECT x
23e30 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52  +1 FROM cnt WHER
23e40 45 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c  E x<1000000).SEL
23e50 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
23e60 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
23e70 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  te>..<p>Consider
23e80 20 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20   how this query 
23e90 77 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74  works.  The init
23ea0 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20  ial-select.runs 
23eb0 66 69 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e  first and return
23ec0 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77  s a single row.w
23ed0 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ith a single col
23ee0 75 6d 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f  umn "1".  This o
23ef0 6e 65 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  ne row is added 
23f00 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 49  to the queue.  I
23f10 6e 0a 73 74 65 70 20 32 61 2c 20 74 68 61 74 20  n.step 2a, that 
23f20 6f 6e 65 20 72 6f 77 20 69 73 20 65 78 74 72 61  one row is extra
23f30 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
23f40 65 75 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f  eue and added to
23f50 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65   "cnt"..Then the
23f60 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
23f70 74 20 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f  t is run in acco
23f80 72 64 61 6e 63 65 20 77 69 74 68 20 73 74 65 70  rdance with step
23f90 20 32 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61   2c generating.a
23fa0 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
23fb0 77 69 74 68 20 76 61 6c 75 65 20 22 32 22 20 74  with value "2" t
23fc0 6f 20 61 64 64 20 74 6f 20 74 68 65 20 71 75 65  o add to the que
23fd0 75 65 2e 20 20 54 68 65 20 71 75 65 75 65 20 73  ue.  The queue s
23fe0 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77  till.has one row
23ff0 2c 20 73 6f 20 73 74 65 70 20 32 20 72 65 70 65  , so step 2 repe
24000 61 74 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f  ats.  The "2" ro
24010 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 61  w is extracted a
24020 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  nd added to the.
24030 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
24040 62 79 20 73 74 65 70 73 20 32 61 20 61 6e 64 20  by steps 2a and 
24050 32 62 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f  2b.  Then the ro
24060 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69  w containing 2 i
24070 73 20 75 73 65 64 20 0a 61 73 20 69 66 20 69 74  s used .as if it
24080 20 77 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65   were the comple
24090 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  te content of th
240a0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
240b0 65 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72  e and the .recur
240c0 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
240d0 75 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74  un again, result
240e0 69 6e 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74  ing in a row wit
240f0 68 20 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e  h value "3" bein
24100 67 20 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71  g added.to the q
24110 75 65 75 65 2e 20 20 54 68 69 73 20 72 65 70 65  ueue.  This repe
24120 61 74 73 20 39 39 39 39 39 39 20 74 69 6d 65 73  ats 999999 times
24130 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61   until finally a
24140 74 20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e  t step 2a the.on
24150 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  ly value on the 
24160 71 75 65 75 65 20 69 73 20 61 20 72 6f 77 20 63  queue is a row c
24170 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30  ontaining 100000
24180 30 2e 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a  0.  That row is.
24190 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
241a0 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
241b0 73 69 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74  sive table.  But
241c0 20 74 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a   this time, the.
241d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
241e0 73 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ses the recursiv
241f0 65 2d 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75  e-select to retu
24200 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74  rn no rows, so t
24210 68 65 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73  he.queue remains
24220 20 65 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72   empty and the r
24230 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
24240 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74  .<p><b>Optimizat
24250 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e  ion note:</b>.In
24260 20 74 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20   the discussion 
24270 61 62 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74  above, statement
24280 73 20 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74  s like "insert t
24290 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20  he row into.the 
242a0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
242b0 20 73 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72   should be under
242c0 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c  stood conceptual
242d0 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c  ly, not literall
242e0 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20  y..It sounds as 
242f0 69 66 20 53 51 4c 69 74 65 20 69 73 20 61 63 63  if SQLite is acc
24300 75 6d 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65  umulating a huge
24310 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e   table.containin
24320 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f  g one million ro
24330 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62  ws, then going b
24340 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67  ack and scanning
24350 20 74 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d   that table.from
24360 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74   top to bottom t
24370 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72  o generate the r
24380 65 73 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61  esult.  What rea
24390 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74  lly happens.is t
243a0 68 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70  hat the query op
243b0 74 69 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61  timizer sees tha
243c0 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a  t values in the.
243d0 22 63 6e 74 22 20 72 65 63 75 72 73 69 76 65 20  "cnt" recursive 
243e0 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75  table are only u
243f0 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73  sed once.  So as
24400 20 65 61 63 68 20 72 6f 77 20 69 73 20 61 64 64   each row is add
24410 65 64 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73  ed to.the recurs
24420 69 76 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20  ive table, that 
24430 72 6f 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65  row is immediate
24440 6c 79 20 72 65 74 75 72 6e 65 64 20 61 73 20 61  ly returned as a
24450 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d   result of the m
24460 61 69 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ain.SELECT state
24470 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69  ment and then di
24480 73 63 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65  scarded.  SQLite
24490 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65   does <em>not</e
244a0 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20  m> accumulate.a 
244b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
244c0 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c  containing a mil
244d0 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79  lion rows.  Very
244e0 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69   little memory i
244f0 73 0a 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20  s.needed to run 
24500 74 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c  the above exampl
24510 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  e.  However, if 
24520 74 68 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20  the example had 
24530 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65  used.UNION inste
24540 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c  ad of UNION ALL,
24550 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75   then SQLite wou
24560 6c 64 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b  ld have had to k
24570 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70  eep around.all p
24580 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
24590 74 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f  ted content in o
245a0 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f  rder to check fo
245b0 72 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f  r duplicates..Fo
245c0 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70  r this reason, p
245d0 72 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c  rogrammers shoul
245e0 64 20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20  d strive to use 
245f0 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61  UNION ALL instea
24600 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20  d.of UNION when 
24610 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65  feasible...<p>He
24620 72 65 20 69 73 20 61 20 76 61 72 69 61 74 69 6f  re is a variatio
24630 6e 20 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75  n on the previou
24640 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f  s example:..<blo
24650 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
24660 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
24670 6e 74 28 78 29 20 41 53 20 28 0a 20 20 20 20 20  nt(x) AS (.     
24680 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e  SELECT 1.     UN
24690 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c  ION ALL.     SEL
246a0 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74  ECT x+1 FROM cnt
246b0 0a 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30  .      LIMIT 100
246c0 30 30 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20  0000.  ).SELECT 
246d0 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72  x FROM cnt;.</pr
246e0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
246f0 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
24700 6f 20 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e  o differences in
24710 20 74 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e   this variation.
24720 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
24730 6c 65 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20  lect is."SELECT 
24740 31 22 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56  1" instead of "V
24750 41 4c 55 45 53 28 31 29 22 2e 20 20 42 75 74 20  ALUES(1)".  But 
24760 74 68 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64  those are just d
24770 69 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65  ifferent.syntaxe
24780 73 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61  s for saying exa
24790 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
247a0 69 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20  ing.  The other 
247b0 63 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74  change is that t
247c0 68 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20  he.recursion is 
247d0 73 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d  stopped by a LIM
247e0 49 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  IT rather than a
247f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20   WHERE clause.  
24800 54 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54  The use of.LIMIT
24810 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
24820 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e   the one-million
24830 74 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  th row is added 
24840 74 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62  to the "cnt" tab
24850 6c 65 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64  le.(and returned
24860 20 62 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c   by the main SEL
24870 45 43 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74  ECT, thanks to t
24880 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
24890 65 72 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63  er).then the rec
248a0 75 72 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d  ursion stops imm
248b0 65 64 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c  ediately regardl
248c0 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20  ess of how many 
248d0 72 6f 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65  rows might be.le
248e0 66 74 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e  ft in the queue.
248f0 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65    On more comple
24900 78 20 71 75 65 72 69 65 73 2c 20 69 74 20 63 61  x queries, it ca
24910 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64  n sometimes be.d
24920 69 66 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75  ifficult to ensu
24930 72 65 20 74 68 61 74 20 74 68 65 20 57 48 45 52  re that the WHER
24940 45 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76  E clause will ev
24950 65 6e 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74  entually cause t
24960 68 65 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69  he.queue to drai
24970 6e 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  n and the recurs
24980 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  ion to terminate
24990 2e 20 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54  .  But the LIMIT
249a0 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77   clause will.alw
249b0 61 79 73 20 73 74 6f 70 20 74 68 65 20 72 65 63  ays stop the rec
249c0 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69  ursion.  So it i
249d0 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20  s good practice 
249e0 74 6f 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64  to always includ
249f0 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a.LIMIT clause
24a00 20 61 73 20 61 20 73 61 66 65 74 79 20 69 66 20   as a safety if 
24a10 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
24a20 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  n the size of th
24a30 65 20 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20  e recursion .is 
24a40 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  known...<tcl>hd_
24a50 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
24a60 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63  tcl>.<h4>Hierarc
24a70 68 69 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d  hical Query Exam
24a80 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f  ples</h4>..<p>Co
24a90 6e 73 69 64 65 72 20 61 20 74 61 62 6c 65 20 74  nsider a table t
24aa0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
24ab0 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20  e members of an 
24ac0 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a  organization as.
24ad0 77 65 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69  well as the chai
24ae0 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74  n-of-command wit
24af0 68 69 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a  hin that organiz
24b00 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ation:..<blockqu
24b10 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
24b20 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61   TABLE org(.  na
24b30 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
24b40 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54  KEY,.  boss TEXT
24b50 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c   REFERENCES org,
24b60 0a 20 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20  .  height INT,. 
24b70 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e   -- other conten
24b80 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70  t omitted.);.</p
24b90 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
24ba0 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65  ..<p>Every membe
24bb0 72 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  r in the organiz
24bc0 61 74 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65  ation has a name
24bd0 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65  , and most membe
24be0 72 73 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65  rs have.a single
24bf0 20 62 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61   boss.  (The hea
24c00 64 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f  d of the whole o
24c10 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
24c20 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69  a NULL."boss" fi
24c30 65 6c 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f  eld.) The rows o
24c40 66 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c  f the "org" tabl
24c50 65 20 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a  e form a tree...
24c60 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65  <p>Here is a que
24c70 72 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ry that computes
24c80 20 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69   the average hei
24c90 67 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e  ght over everyon
24ca0 65 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67  e.in Alice's org
24cb0 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75  anization, inclu
24cc0 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c  ding Alice:..<bl
24cd0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
24ce0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
24cf0 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28  works_for_alice(
24d00 6e 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  n) AS (.    VALU
24d10 45 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20  ES('Alice').    
24d20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54  UNION.    SELECT
24d30 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20   name FROM org, 
24d40 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a  works_for_alice.
24d50 20 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62       WHERE org.b
24d60 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  oss=works_for_al
24d70 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54  ice.n.  ).SELECT
24d80 20 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f   avg(height) FRO
24d90 4d 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67  M org. WHERE org
24da0 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66  .name IN works_f
24db0 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e  or_alice;.</pre>
24dc0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
24dd0 70 3e 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70  p>The next examp
24de0 6c 65 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d  le uses two .com
24df0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
24e00 73 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  sions in a singl
24e10 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20  e WITH clause.  
24e20 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .The following t
24e30 61 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66  able records a f
24e40 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c  amily tree:..<bl
24e50 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
24e60 52 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69  REATE TABLE fami
24e70 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  ly(.  name TEXT 
24e80 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
24e90 6f 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  om TEXT REFERENC
24ea0 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64  ES family,.  dad
24eb0 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
24ec0 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20   family,.  born 
24ed0 44 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64  DATETIME,.  died
24ee0 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55   DATETIME, -- NU
24ef0 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76  LL if still aliv
24f00 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  e.  -- other con
24f10 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tent.);.</pre></
24f20 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
24f30 54 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62  The "family" tab
24f40 6c 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  le is similar to
24f50 20 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72   the earlier "or
24f60 67 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20  g" table except 
24f70 74 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20  that .now there 
24f80 61 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20  are two parents 
24f90 74 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a  to each member..
24fa0 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
24fb0 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73  all living ances
24fc0 74 6f 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66  tors of Alice, f
24fd0 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f  rom oldest to yo
24fe0 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e  ungest..An ordin
24ff0 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
25000 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61   expression, "pa
25010 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66  rent_of", is def
25020 69 6e 65 64 20 66 69 72 73 74 2e 20 20 54 68 61  ined first.  Tha
25030 74 0a 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t.ordinary CTE i
25040 73 20 61 20 76 69 65 77 20 74 68 61 74 20 63 61  s a view that ca
25050 6e 20 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e  n be used to fin
25060 64 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66  d all parents of
25070 20 61 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e   any.individual.
25080 20 20 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20    That ordinary 
25090 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
250a0 20 69 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f   in the "ancesto
250b0 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75  r_of_alice".recu
250c0 72 73 69 76 65 20 43 54 45 2e 20 20 54 68 65 20  rsive CTE.  The 
250d0 72 65 63 75 72 73 69 76 65 20 43 54 45 20 69 73  recursive CTE is
250e0 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
250f0 65 20 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a  e final query:..
25100 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
25110 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
25120 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d  .  parent_of(nam
25130 65 2c 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20  e, parent) AS.  
25140 20 20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    (SELECT name, 
25150 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20  mom FROM family 
25160 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d  UNION SELECT nam
25170 65 2c 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69  e, dad FROM fami
25180 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f  ly),.  ancestor_
25190 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41  of_alice(name) A
251a0 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 70 61  S.    (SELECT pa
251b0 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74  rent FROM parent
251c0 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  _of WHERE name='
251d0 41 6c 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f  Alice'.     UNIO
251e0 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
251f0 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61  T parent FROM pa
25200 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63  rent_of JOIN anc
25210 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55  estor_of_alice U
25220 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45  SING(name)).SELE
25230 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46  CT family.name F
25240 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  ROM ancestor_of_
25250 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57  alice, family. W
25260 48 45 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66  HERE ancestor_of
25270 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69  _alice.name=fami
25280 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64  ly.name.   AND d
25290 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44  ied IS NULL. ORD
252a0 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72  ER BY born;.</pr
252b0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
252c0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
252d0 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68  t rcex2</tcl>.<h
252e0 34 3e 51 75 65 72 69 65 73 20 41 67 61 69 6e 73  4>Queries Agains
252f0 74 20 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a  t A Graph</h4>..
25300 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e  <p>A version con
25310 74 72 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53  trol system (VCS
25320 29 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79  ) will typically
25330 20 73 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76   store the evolv
25340 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ing.versions of 
25350 61 20 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64  a project as a d
25360 69 72 65 63 74 65 64 20 61 63 79 63 6c 69 63 20  irected acyclic 
25370 67 72 61 70 68 20 28 44 41 47 29 2e 20 20 43 61  graph (DAG).  Ca
25380 6c 6c 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20  ll each.version 
25390 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61  of the project a
253a0 20 22 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73   "checkin".  A s
253b0 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61  ingle.checkin ca
253c0 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d  n have zero or m
253d0 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f  ore parents.  Mo
253e0 73 74 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63  st checkins (exc
253f0 65 70 74 20 74 68 65 0a 66 69 72 73 74 29 20 68  ept the.first) h
25400 61 76 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72  ave a single par
25410 65 6e 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20  ent, but in the 
25420 63 61 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c  case of a merge,
25430 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74   a checkin.might
25440 20 68 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72   have two or thr
25450 65 65 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ee or more paren
25460 74 73 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f  ts.  A schema to
25470 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63   keep track of.c
25480 68 65 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20  heckins and the 
25490 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
254a0 68 65 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20  hey occur might 
254b0 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c  look something l
254c0 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63  ike.this:..<bloc
254d0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
254e0 41 54 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69  ATE TABLE checki
254f0 6e 28 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20  n(.  id INTEGER 
25500 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
25510 74 69 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20  time INTEGER -- 
25520 74 69 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74  timestamp when t
25530 68 69 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75  his checkin occu
25540 72 72 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54  rred.);.CREATE T
25550 41 42 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d  ABLE derivedfrom
25560 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45  (.  xfrom INTEGE
25570 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
25580 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d  ENCES checkin, -
25590 2d 20 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e  - parent checkin
255a0 0a 20 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e  .  xto INTEGER N
255b0 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43  OT NULL REFERENC
255c0 45 53 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d  ES checkin,   --
255d0 20 64 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e   derived checkin
255e0 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  .  PRIMARY KEY(x
255f0 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45  from,xto).);.CRE
25600 41 54 45 20 49 4e 44 45 58 20 64 65 72 69 76 65  ATE INDEX derive
25610 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65  dfrom_back ON de
25620 72 69 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66  rivedfrom(xto,xf
25630 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  rom);.</pre></bl
25640 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
25650 69 73 20 67 72 61 70 68 20 69 73 20 61 63 79 63  is graph is acyc
25660 6c 69 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73  lic.  And we ass
25670 75 6d 65 20 74 68 61 74 20 74 68 65 20 6d 74 69  ume that the mti
25680 6d 65 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c  me of every.chil
25690 64 20 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20  d checkin is no 
256a0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74  less than the mt
256b0 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70  ime of all its p
256c0 61 72 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c  arents.  But.unl
256d0 69 6b 65 20 74 68 65 20 65 61 72 6c 69 65 72 20  ike the earlier 
256e0 65 78 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67  examples, this g
256f0 72 61 70 68 20 6d 69 67 68 74 20 68 61 76 65 20  raph might have 
25700 6d 75 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f  multiple paths o
25710 66 0a 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67  f.differing leng
25720 74 68 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20  ths between any 
25730 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c  two checkins...<
25740 70 3e 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f  p>We want to kno
25750 77 20 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73  w the twenty mos
25760 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
25770 72 73 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20  rs in time (out 
25780 6f 66 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73  of.the thousands
25790 20 61 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f   and thousands o
257a0 66 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74  f ancestors in t
257b0 68 65 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f  he whole DAG) fo
257c0 72 0a 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45  r.checkin "@BASE
257d0 4c 49 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79  LINE".  (A query
257e0 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73   similar to this
257f0 20 69 73 20 75 73 65 64 0a 62 79 20 74 68 65 20   is used.by the 
25800 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
25810 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f  www.fossil-scm.o
25820 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20  rg/">Fossil</a> 
25830 56 43 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20  VCS to.show the 
25840 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  N most recent an
25850 63 65 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65  cestors of a che
25860 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ck.  For example
25870 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  :.<a href="http:
25880 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
25890 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d  /src/timeline?p=
258a0 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70  trunk&n=30">http
258b0 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
258c0 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70  g/src/timeline?p
258d0 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e  =trunk&n=30</a>.
258e0 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  )..<blockquote><
258f0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
25900 49 56 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69  IVE.  ancestor(i
25910 64 2c 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20  d,mtime) AS (.  
25920 20 20 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69    SELECT id, mti
25930 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20  me FROM checkin 
25940 57 48 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49  WHERE id=@BASELI
25950 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  NE.    UNION.   
25960 20 53 45 4c 45 43 54 20 64 65 72 69 76 65 64 66   SELECT derivedf
25970 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b  rom.xfrom, check
25980 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46  in.mtime.      F
25990 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65  ROM ancestor, de
259a0 72 69 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b  rivedfrom, check
259b0 69 6e 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e  in.     WHERE an
259c0 63 65 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65  cestor.id=derive
259d0 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20  dfrom.xto.      
259e0 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d   AND checkin.id=
259f0 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
25a00 6d 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  m.     ORDER BY 
25a10 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45  checkin.mtime DE
25a20 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30  SC.     LIMIT 20
25a30 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52  .  ).SELECT * FR
25a40 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20  OM checkin JOIN 
25a50 61 6e 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69  ancestor USING(i
25a60 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  d);.</pre></bloc
25a70 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65  kquote>..<p>.The
25a80 20 22 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b   "ORDER BY check
25a90 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74  in.mtime DESC" t
25aa0 65 72 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72  erm in the recur
25ab0 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65  sive-select make
25ac0 73 0a 74 68 65 20 71 75 65 72 79 20 72 75 6e 20  s.the query run 
25ad0 6d 75 63 68 20 66 61 73 74 65 72 20 62 79 20 70  much faster by p
25ae0 72 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f  reventing it fro
25af0 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e  m following.bran
25b00 63 68 65 73 20 74 68 61 74 20 6d 65 72 67 65 20  ches that merge 
25b10 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f  checkins.from lo
25b20 6e 67 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44  ng ago.  The ORD
25b30 45 52 20 42 59 20 66 6f 72 63 65 73 20 74 68 65  ER BY forces the
25b40 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
25b50 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68  t to focus.on th
25b60 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68  e most recent ch
25b70 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73  eckins, the ones
25b80 20 77 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f   we want.  Witho
25b90 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a  ut the ORDER BY.
25ba0 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
25bb0 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75  -select, one wou
25bc0 6c 64 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20  ld be forced to 
25bd0 63 6f 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70  compute the comp
25be0 6c 65 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75  lete set of.thou
25bf0 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
25c00 72 73 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c  rs, sort them al
25c10 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e  l by mtime, then
25c20 20 74 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77   take the top tw
25c30 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20  enty..The ORDER 
25c40 42 59 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73  BY essentially s
25c50 65 74 73 20 75 70 20 61 20 70 72 69 6f 72 69 74  ets up a priorit
25c60 79 20 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72  y queue that.for
25c70 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
25c80 65 20 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20  e query to look 
25c90 61 74 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  at the most rece
25ca0 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72  nt ancestors fir
25cb0 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65  st,.allowing the
25cc0 20 75 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20   use of a LIMIT 
25cd0 63 6c 61 75 73 65 20 74 6f 20 72 65 73 74 72 69  clause to restri
25ce0 63 74 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20  ct the scope of 
25cf0 74 68 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73  the.query to jus
25d00 74 20 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f  t the checkins o
25d10 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63  f interest...<tc
25d20 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69  l>hd_fragment wi
25d30 74 68 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a  thorderby</tcl>.
25d40 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20  <h4>Controlling 
25d50 44 65 70 74 68 2d 46 69 72 73 74 20 56 65 72 73  Depth-First Vers
25d60 75 73 20 42 72 65 61 64 74 68 2d 46 69 72 73 74  us Breadth-First
25d70 20 53 65 61 72 63 68 20 4f 66 20 61 20 54 72 65   Search Of a Tre
25d80 65 0a 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59  e.Using ORDER BY
25d90 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44  </h4>..<p>An ORD
25da0 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
25db0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
25dc0 6c 65 63 74 20 63 61 6e 20 62 65 20 75 73 65 64  lect can be used
25dd0 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74   to control.whet
25de0 68 65 72 20 74 68 65 20 73 65 61 72 63 68 20 6f  her the search o
25df0 66 20 61 20 74 72 65 65 20 69 73 20 64 65 70 74  f a tree is dept
25e00 68 2d 66 69 72 73 74 20 6f 72 20 62 72 65 61 64  h-first or bread
25e10 74 68 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c  th-first.  To.il
25e20 6c 75 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c  lustrate, we wil
25e30 6c 20 75 73 65 20 61 20 76 61 72 69 61 74 69 6f  l use a variatio
25e40 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74  n on the "org" t
25e50 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61  able from an exa
25e60 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68  mple.above, with
25e70 6f 75 74 20 74 68 65 20 22 68 65 69 67 68 74 22  out the "height"
25e80 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74   column, and wit
25e90 68 20 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61  h some real data
25ea0 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f   inserted:..<blo
25eb0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
25ec0 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a  EATE TABLE org(.
25ed0 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
25ee0 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20  ARY KEY,.  boss 
25ef0 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
25f00 6f 72 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f  org.) WITHOUT RO
25f10 57 49 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  WID;.INSERT INTO
25f20 20 6f 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69   org VALUES('Ali
25f30 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52  ce',NULL);.INSER
25f40 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
25f50 53 28 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29  S('Bob','Alice')
25f60 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
25f70 67 20 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27  g VALUES('Cindy'
25f80 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52  ,'Alice');.INSER
25f90 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
25fa0 53 28 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b  S('Dave','Bob');
25fb0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
25fc0 20 56 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27   VALUES('Emma','
25fd0 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
25fe0 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46  TO org VALUES('F
25ff0 72 65 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49  red','Cindy');.I
26000 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
26010 41 4c 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69  ALUES('Gail','Ci
26020 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ndy');.</pre></b
26030 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48  lockquote>..<p>H
26040 65 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74  ere is a query t
26050 6f 20 73 68 6f 77 20 74 68 65 20 74 72 65 65 20  o show the tree 
26060 73 74 72 75 63 74 75 72 65 20 69 6e 20 61 20 62  structure in a b
26070 72 65 61 64 74 68 2d 66 69 72 73 74 20 70 61 74  readth-first pat
26080 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tern:..<blockquo
26090 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
260a0 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
260b0 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
260c0 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
260d0 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
260e0 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
260f0 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
26100 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
26110 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
26120 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
26130 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
26140 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
26150 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
26160 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73  .  ).SELECT subs
26170 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c  tr('..........',
26180 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61  1,level*3) || na
26190 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c  me FROM under_al
261a0 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
261b0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
261c0 20 22 4f 52 44 45 52 20 42 59 20 32 22 20 28 77   "ORDER BY 2" (w
261d0 68 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73  hich means the s
261e0 61 6d 65 20 61 73 20 22 4f 52 44 45 52 20 42 59  ame as "ORDER BY
261f0 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76   under_alice.lev
26200 65 6c 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69  el+1").causes hi
26210 67 68 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74  gher levels in t
26220 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
26230 63 68 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c  chart (with smal
26240 6c 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ler "level" valu
26250 65 73 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73  es).to be proces
26260 73 65 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c  sed first, resul
26270 74 69 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74  ting in a breadt
26280 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20  h-first search. 
26290 20 54 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a   The output is:.
262a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
262b0 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
262c0 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44  ...Cindy.......D
262d0 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
262e0 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
262f0 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
26300 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74  ckquote>..<p>But
26310 20 69 66 20 77 65 20 63 68 61 6e 67 65 20 74 68   if we change th
26320 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
26330 65 20 74 6f 20 61 64 64 20 74 68 65 20 22 44 45  e to add the "DE
26340 53 43 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68  SC" modifier, th
26350 61 74 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f  at will.cause lo
26360 77 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68  wer levels in th
26370 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28  e organization (
26380 77 69 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76  with larger "lev
26390 65 6c 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62  el" values) to b
263a0 65 0a 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e.processed firs
263b0 74 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69  t by the recursi
263c0 76 65 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c  ve-select, resul
263d0 74 69 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d  ting in a depth-
263e0 66 69 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c  first search:..<
263f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26400 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
26410 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
26420 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
26430 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
26440 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
26450 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
26460 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
26470 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
26480 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
26490 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
264a0 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
264b0 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
264c0 44 45 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43  DER BY 2 <b>DESC
264d0 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20  </b>.  ).SELECT 
264e0 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e  substr('........
264f0 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c  ..',1,level*3) |
26500 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65  | name FROM unde
26510 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
26520 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
26530 3e 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74  >The output of t
26540 68 69 73 20 72 65 76 69 73 65 64 20 71 75 65 72  his revised quer
26550 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  y is:..<blockquo
26560 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
26570 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65  ..Bob.......Dave
26580 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43  .......Emma....C
26590 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  indy.......Fred.
265a0 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
265b0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
265c0 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45  <p>When the ORDE
265d0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
265e0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
265f0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
26600 2c 20 74 68 65 0a 71 75 65 75 65 20 62 65 68 61  , the.queue beha
26610 76 65 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77  ves as a FIFO, w
26620 68 69 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20  hich results in 
26630 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
26640 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68  search....<tcl>h
26650 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65  d_fragment mande
26660 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74  lbrot {compute t
26670 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65  he Mandelbrot se
26680 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74  t}</tcl>.<h4>Out
26690 6c 61 6e 64 69 73 68 20 52 65 63 75 72 73 69 76  landish Recursiv
266a0 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  e Query Examples
266b0 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h4>..<p>The fo
266c0 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f  llowing query co
266d0 6d 70 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78  mputes an approx
266e0 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d  imation of the M
266f0 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e  andelbrot Set.an
26700 64 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65  d outputs the re
26710 73 75 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72  sult as ASCII-ar
26720 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
26730 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
26740 53 49 56 45 0a 20 20 78 61 78 69 73 28 78 29 20  SIVE.  xaxis(x) 
26750 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29  AS (VALUES(-2.0)
26760 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
26770 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61  T x+0.05 FROM xa
26780 78 69 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31  xis WHERE x&lt;1
26790 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20  .2),.  yaxis(y) 
267a0 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29  AS (VALUES(-1.0)
267b0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
267c0 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78  T y+0.1 FROM yax
267d0 69 73 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e  is WHERE y&lt;1.
267e0 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
267f0 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
26800 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
26810 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
26820 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
26830 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26840 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
26850 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
26860 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
26870 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
26880 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
26890 79 29 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20  y) &lt; 4.0 AND 
268a0 69 74 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a  iter&lt;28.  ),.
268b0 20 20 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63    m2(iter, cx, c
268c0 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
268d0 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78  CT max(iter), cx
268e0 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55  , cy FROM m GROU
268f0 50 20 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c  P BY cx, cy.  ),
26900 0a 20 20 61 28 74 29 20 41 53 20 28 0a 20 20 20  .  a(t) AS (.   
26910 20 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f   SELECT group_co
26920 6e 63 61 74 28 20 73 75 62 73 74 72 28 27 20 2e  ncat( substr(' .
26930 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72  +*#', 1+min(iter
26940 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a  /7,4), 1), '') .
26950 20 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55      FROM m2 GROU
26960 50 20 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45  P BY cy.  ).SELE
26970 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
26980 72 74 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20  rtrim(t),x'0a') 
26990 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  FROM a;.</pre></
269a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
269b0 49 6e 20 74 68 69 73 20 71 75 65 72 79 2c 20 74  In this query, t
269c0 68 65 20 22 78 61 78 69 73 22 20 61 6e 64 20 22  he "xaxis" and "
269d0 79 61 78 69 73 22 20 43 54 45 73 20 64 65 66 69  yaxis" CTEs defi
269e0 6e 65 20 74 68 65 20 67 72 69 64 20 6f 66 20 70  ne the grid of p
269f0 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20  oints for.which 
26a00 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53  the Mandelbrot S
26a10 65 74 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f  et will be appro
26a20 78 69 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72  ximated.  Each r
26a30 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65  ow in the."m(ite
26a40 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54  r,cx,cy,x,y)" CT
26a50 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74  E means that aft
26a60 65 72 20 22 69 74 65 72 22 20 69 74 65 72 61 74  er "iter" iterat
26a70 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c  ions, the Mandel
26a80 62 72 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73  brot.iteration s
26a90 74 61 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79  tarting at cx,cy
26aa0 20 68 61 73 20 72 65 61 63 68 65 64 20 70 6f 69   has reached poi
26ab0 6e 74 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d  nt x,y.  The num
26ac0 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
26ad0 73 0a 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c  s.in this exampl
26ae0 65 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  e is limited to 
26af0 32 38 20 28 77 68 69 63 68 20 73 65 76 65 72 65  28 (which severe
26b00 6c 79 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65  ly limits the re
26b10 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20  solution of.the 
26b20 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74  computation, but
26b30 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 66   is sufficient f
26b40 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f  or low-resolutio
26b50 6e 20 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70  n ASCII-art outp
26b60 75 74 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65  ut)..The "m2(ite
26b70 72 2c 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f  r,cx,cy)" CTE ho
26b80 6c 64 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  lds the maximum 
26b90 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
26ba0 69 6f 6e 73 20 72 65 61 63 68 65 64 20 77 68 65  ions reached whe
26bb0 6e 0a 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f  n.starting at po
26bc0 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c  int cx,cy..Final
26bd0 6c 79 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20  ly, each row in 
26be0 74 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68  the "a(t)" CTE h
26bf0 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77  olds a string .w
26c00 68 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65  hich is a single
26c10 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74   line of the out
26c20 70 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54  put ASCII-art..T
26c30 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
26c40 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a  ent at the end j
26c50 75 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20  ust queries the 
26c60 22 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69  "a" CTE to.retri
26c70 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66  eve all lines of
26c80 20 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20   ASCII-art, one 
26c90 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e  by one...<p>Runn
26ca0 69 6e 67 20 74 68 65 20 71 75 65 72 79 20 61 62  ing the query ab
26cb0 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65  ove in an SQLite
26cc0 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73   [command-line s
26cd0 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e  hell] results.in
26ce0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
26cf0 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  utput:..<blockqu
26d00 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20  ote><pre>.      
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
26d30 2e 2e 23 0a 20 20 20 20 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 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26d80 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
26db0 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dd0 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23       ..##+*#####
26de0 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20  #####+.++++.    
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e00 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23        .+.#######
26e10 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
26e20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
26e30 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
26e40 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
26e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
26e60 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23  .++..#.....*####
26e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e80 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
26e90 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
26ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26eb0 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
26ec0 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
26ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ee0 23 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23  #######.. ######
26ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f10 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20  #######....     
26f20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23       ....+*#####
26f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f40 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20  ###########..   
26f50 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23            ...+##
26f60 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23  #####++#########
26f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
26f90 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
26fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fb0 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
26fc0 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23   .............+#
26fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fe0 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20  ##+.+.          
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
27010 23 23 23 23 23 2b 2e 0a 20 20 20 20 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 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
27040 23 23 23 2b 2e 2b 2b 2b 2b 0a 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 2e 2e 2e 2e 2e 2e 2e 2b 23 23        .......+##
27070 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20  ##....   +.     
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23              ..+#
270a0 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a           ..#*...
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20      ....#.      
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e                +.
27120 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
27130 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ote>..<tcl>hd_fr
27140 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73  agment sudoku {s
27150 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a  olve Sudoku puzz
27160 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  les} </tcl>.<p>T
27170 68 69 73 20 6e 65 78 74 20 71 75 65 72 79 20 73  his next query s
27180 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70  olves a Sudoku p
27190 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74  uzzle.  The stat
271a0 65 20 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20  e of the puzzle 
271b0 69 73 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is.defined by an
271c0 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
271d0 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
271e0 65 61 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66  eading entries f
271f0 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62  rom the.puzzle b
27200 6f 78 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72  ox row by row fr
27210 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
27220 20 61 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74   and then from t
27230 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c  op to bottom..Bl
27240 61 6e 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74  ank squares in t
27250 68 65 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65  he puzzle are de
27260 6e 6f 74 65 64 20 62 79 20 61 20 22 2e 22 20 63  noted by a "." c
27270 68 61 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73  haracter.  .Thus
27280 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
27290 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  g:..<blockquote>
272a0 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35  .53..7....6..195
272b0 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e  ....98....6.8...
272c0 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e  6...34..8.3..17.
272d0 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e  ..2...6.6....28.
272e0 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e  ...419..5....8..
272f0 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  79.</blockquote>
27300 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73  ..<p>Corresponds
27310 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b   to a puzzle lik
27320 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e this:..<blockq
27330 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
27340 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
27350 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64  ing="5">.<tr><td
27360 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  >5<td>3<td> <td>
27370 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20   <td>7<td> <td> 
27380 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td> <td>.<tr><t
27390 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
273a0 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e  >1<td>9<td>5<td>
273b0 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c   <td> <td>.<tr><
273c0 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74  td> <td>9<td>8<t
273d0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
273e0 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e  > <td>6<td>.<tr>
273f0 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
27400 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74  td> <td>6<td> <t
27410 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74  d> <td> <td>3.<t
27420 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e  r><td>4<td> <td>
27430 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33   <td>8<td> <td>3
27440 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a  <td> <td> <td>1.
27450 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  <tr><td>7<td> <t
27460 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64  d> <td> <td>2<td
27470 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27480 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36  6.<tr><td> <td>6
27490 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
274a0 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74  td> <td>2<td>8<t
274b0 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
274c0 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31   <td> <td>4<td>1
274d0 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>9<td> <td> <
274e0 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>5.<tr><td> <t
274f0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27500 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >8<td> <td> <td>
27510 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a  7<td>9.</table>.
27520 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
27530 70 3e 54 68 69 73 20 69 73 20 74 68 65 20 71 75  p>This is the qu
27540 65 72 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20  ery that solves 
27550 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c  the puzzle:..<bl
27560 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
27570 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
27580 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 0a  input(sud) AS (.
27590 20 20 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e      VALUES('53..
275a0 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
275b0 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
275c0 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
275d0 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
275e0 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a  9..5....8..79').
275f0 20 20 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c    ),.  digits(z,
27600 20 6c 70 29 20 41 53 20 28 0a 20 20 20 20 56 41   lp) AS (.    VA
27610 4c 55 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20  LUES('1', 1).   
27620 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
27630 54 0a 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20  T.    CAST(lp+1 
27640 41 53 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46  AS TEXT), lp+1 F
27650 52 4f 4d 20 64 69 67 69 74 73 20 57 48 45 52 45  ROM digits WHERE
27660 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20   lp&lt;9.  ),.  
27670 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20  x(s, ind) AS (. 
27680 20 20 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69     SELECT sud, i
27690 6e 73 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46  nstr(sud, '.') F
276a0 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e  ROM input.    UN
276b0 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
276c0 43 54 0a 20 20 20 20 20 20 73 75 62 73 74 72 28  CT.      substr(
276d0 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
276e0 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
276f0 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73  nd+1),.      ins
27700 74 72 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c  tr( substr(s, 1,
27710 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
27720 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
27730 2c 20 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f  , '.' ).     FRO
27740 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a  M x, digits AS z
27750 0a 20 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30  .    WHERE ind>0
27760 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45  .      AND NOT E
27770 58 49 53 54 53 20 28 0a 20 20 20 20 20 20 20 20  XISTS (.        
27780 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
27790 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20             FROM 
277a0 64 69 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20  digits AS lp.   
277b0 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
277c0 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
277d0 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20  ((ind-1)/9)*9 + 
277e0 6c 70 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20  lp, 1).         
277f0 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
27800 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
27810 31 29 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39  1)%9) + (lp-1)*9
27820 20 2b 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20   + 1, 1).       
27830 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20           OR z.z 
27840 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 28 69  = substr(s, (((i
27850 6e 64 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20  nd-1)/3) % 3) * 
27860 33 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3.              
27870 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e            + ((in
27880 64 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20  d-1)/27) * 27 + 
27890 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  lp.             
278a0 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c             + ((l
278b0 70 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31  p-1) / 3) * 6, 1
278c0 29 0a 20 20 20 20 20 20 20 20 20 29 0a 20 20 29  ).         ).  )
278d0 0a 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78  .SELECT s FROM x
278e0 20 57 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f   WHERE ind=0;.</
278f0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
27900 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74  >..<p>The "input
27910 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 74 68  " CTE defines th
27920 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a  e input puzzle..
27930 54 68 65 20 22 64 69 67 69 74 73 22 20 43 54 45  The "digits" CTE
27940 20 64 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65   defines a table
27950 20 74 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20   that holds all 
27960 64 69 67 69 74 73 20 62 65 74 77 65 65 6e 20 31  digits between 1
27970 20 61 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b   and 9..The work
27980 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20   of solving the 
27990 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74  puzzle is undert
279a0 61 6b 65 6e 20 62 79 20 74 68 65 20 22 78 22 20  aken by the "x" 
279b0 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e  CTE..An entry in
279c0 20 78 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20   x(s,ind) means 
279d0 74 68 61 74 20 74 68 65 20 38 31 2d 63 68 61 72  that the 81-char
279e0 61 63 74 65 72 20 73 74 72 69 6e 67 20 22 73 22  acter string "s"
279f0 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
27a00 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61  ku puzzle (it ha
27a10 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20  s no conflicts) 
27a20 61 6e 64 20 74 68 61 74 20 74 68 65 20 66 69 72  and that the fir
27a30 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61  st unknown chara
27a40 63 74 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74  cter.is at posit
27a50 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e  ion "ind", or in
27a60 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72  d==0 if all char
27a70 61 63 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20  acter positions 
27a80 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54  are filled in..T
27a90 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69  he goal, then, i
27aa0 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74  s to compute ent
27ab0 72 69 65 73 20 66 6f 72 20 22 78 22 20 77 69 74  ries for "x" wit
27ac0 68 20 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e  h an "ind" of 0.
27ad0 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20  ..<p>The solver 
27ae0 77 6f 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20  works by adding 
27af0 6e 65 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74  new entries to t
27b00 68 65 20 22 78 22 20 72 65 63 75 72 73 69 76 65  he "x" recursive
27b10 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72   table..Given pr
27b20 69 6f 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65  ior entries, the
27b30 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
27b40 74 20 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20  t tries to fill 
27b50 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  in a single new.
27b60 70 6f 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c  position with al
27b70 6c 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e  l values between
27b80 20 31 20 61 6e 64 20 39 20 74 68 61 74 20 61 63   1 and 9 that ac
27b90 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74  tually work in t
27ba0 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54  hat.position.  T
27bb0 68 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22  he complicated "
27bc0 4e 4f 54 20 45 58 49 53 54 53 22 20 73 75 62 71  NOT EXISTS" subq
27bd0 75 65 72 79 20 69 73 20 74 68 65 20 6d 61 67 69  uery is the magi
27be0 63 20 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f  c that.figures o
27bf0 75 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ut whether or no
27c00 74 20 65 61 63 68 20 63 61 6e 64 69 64 61 74 65  t each candidate
27c10 20 22 73 22 20 73 74 72 69 6e 67 20 69 73 20 61   "s" string is a
27c20 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
27c30 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70  zzle or not...<p
27c40 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65  >The final answe
27c50 72 20 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f  r is found by lo
27c60 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69  oking for a stri
27c70 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a  ng with ind==0..
27c80 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  If the original 
27c90 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64  sudoku problem d
27ca0 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e  id not have a un
27cb0 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74  ique solution, t
27cc0 68 65 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69  hen.the query wi
27cd0 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f  ll return all po
27ce0 73 73 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73  ssible solutions
27cf0 2e 20 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e  .  If the origin
27d00 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75  al problem.was u
27d10 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20  nsolvable, then 
27d20 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  no rows will be 
27d30 72 65 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68  returned.  In th
27d40 69 73 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69  is case, the uni
27d50 71 75 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a  que.answer is:..
27d60 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34  <blockquote>.534
27d70 36 37 38 39 31 32 36 37 32 31 39 35 33 34 38 31  6789126721953481
27d80 39 38 33 34 32 35 36 37 38 35 39 37 36 31 34 32  9834256785976142
27d90 33 34 32 36 38 35 33 37 39 31 37 31 33 39 32 34  3426853791713924
27da0 38 35 36 39 36 31 35 33 37 32 38 34 32 38 37 34  8569615372842874
27db0 31 39 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c  19635345286179.<
27dc0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
27dd0 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61  >The solution wa
27de0 73 20 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65  s computed in le
27df0 73 73 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c  ss than 300 mill
27e00 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f  iseconds on a mo
27e10 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e  dern.workstation
27e20 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f  ...<h3>Limitatio
27e30 6e 73 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f  ns And Caveats</
27e40 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  h3>..<ul>.<li><p
27e50 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
27e60 65 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  e cannot be used
27e70 20 77 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54   within a [CREAT
27e80 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e  E TRIGGER]..<li>
27e90 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61  <p>.The WITH cla
27ea0 75 73 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  use must appear 
27eb0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
27ec0 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20   of a top-level 
27ed0 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
27ee0 6e 74 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67  nt.or at the beg
27ef0 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71  inning of a subq
27f00 75 65 72 79 2e 20 20 54 68 65 20 57 49 54 48 20  uery.  The WITH 
27f10 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
27f20 20 70 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68   prepended to.th
27f30 65 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73  e second or subs
27f40 65 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74  equent SELECT st
27f50 61 74 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f  atement of a [co
27f60 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a  mpound select]..
27f70 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a  <li><p>.The SQL:
27f80 31 39 39 39 20 73 70 65 63 20 72 65 71 75 69 72  1999 spec requir
27f90 65 73 20 74 68 61 74 20 74 68 65 20 52 45 43 55  es that the RECU
27fa0 52 53 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f  RSIVE keyword fo
27fb0 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79  llow WITH in any
27fc0 0a 57 49 54 48 20 63 6c 61 75 73 65 20 74 68 61  .WITH clause tha
27fd0 74 20 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63  t includes a rec
27fe0 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
27ff0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ble expression. 
28000 20 48 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f   However, for.co
28010 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
28020 20 53 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f   SqlServer and O
28030 72 61 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f  racle, SQLite do
28040 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74  es not enforce t
28050 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a  his rule..</ul>.
28060 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
28070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
280a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
280b0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53  ######.Section S
280c0 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45  ELECT select {SE
280d0 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63  LECT query}..Rec
280e0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
280f0 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a  ram select-stmt.
28100 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20  </tcl>...<p>The 
28110 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28120 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72   is used to quer
28130 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  y the database. 
28140 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61   The.result of a
28150 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20   SELECT is zero 
28160 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
28170 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20  data where each 
28180 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20  row.has a fixed 
28190 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
281a0 73 2e 20 20 41 20 53 45 4c 45 43 54 20 73 74 61  s.  A SELECT sta
281b0 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
281c0 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73  make.any changes
281d0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
281e0 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65  ...<p>The "[sele
281f0 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78  ct-stmt]" syntax
28200 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61   diagram above a
28210 74 74 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20  ttempts to show 
28220 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53  as much of the.S
28230 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28240 73 79 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62  syntax as possib
28250 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64  le in a single d
28260 69 61 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20  iagram, because 
28270 73 6f 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e  some readers.fin
28280 64 20 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20  d that helpful. 
28290 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22   The following "
282a0 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74  [factored-select
282b0 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c  -stmt]" is an al
282c0 74 65 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78  ternative.syntax
282d0 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 65   diagrams that e
282e0 78 70 72 65 73 73 65 73 20 74 68 65 20 73 61 6d  xpresses the sam
282f0 65 20 73 79 6e 74 61 78 20 62 75 74 20 74 72 69  e syntax but tri
28300 65 73 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20  es to break the 
28310 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74  syntax .down int
28320 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73  o smaller chunks
28330 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  ...<tcl>.Recursi
28340 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
28350 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64  --initially-hidd
28360 65 6e 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65  en factored-sele
28370 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
28380 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  ore.</tcl>..<p>N
28390 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
283a0 72 65 20 70 61 74 68 73 20 74 68 72 6f 75 67 68  re paths through
283b0 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
283c0 72 61 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f  rams that.are no
283d0 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61  t allowed in pra
283e0 63 74 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61  ctice.  Some exa
283f0 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  mples:.<ul>.<li>
28400 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73  A [VALUES] claus
28410 65 20 63 61 6e 20 62 65 20 74 68 65 20 66 69 72  e can be the fir
28420 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20  st element in a 
28430 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
28440 5d 0a 20 20 20 20 74 68 61 74 20 75 73 65 73 20  ].    that uses 
28450 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c  a [WITH] clause,
28460 20 62 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53   but a [simple S
28470 45 4c 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73  ELECT] that cons
28480 69 73 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74  ists of.    just
28490 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
284a0 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65  se cannot be pre
284b0 63 65 64 65 64 20 62 79 20 61 20 5b 57 49 54 48  ceded by a [WITH
284c0 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68  ] clause..<li>Th
284d0 65 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20  e [WITH] clause 
284e0 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68  must occur on th
284f0 65 20 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f  e first SELECT o
28500 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  f a [compound SE
28510 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61  LECT]..    It ca
28520 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63  nnot follow a [c
28530 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
28540 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61  ]..</ul>.These a
28550 6e 64 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72  nd other similar
28560 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
28570 69 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62  ions are describ
28580 65 64 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a  ed in the text..
28590 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
285a0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
285b0 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
285c0 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
285d0 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
285e0 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
285f0 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
28600 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
28610 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
28620 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
28630 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
28640 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
28650 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
28660 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
28670 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
28680 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
28690 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
286a0 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
286b0 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
286c0 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
286d0 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
286e0 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
286f0 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
28700 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
28710 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
28720 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
28730 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
28740 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74  ent simpleselect
28750 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d   {simple SELECT}
28760 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c  </tcl>.<h3>Simpl
28770 65 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73  e Select Process
28780 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ing</h3>..<p>The
28790 20 63 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43   core of a SELEC
287a0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
287b0 20 22 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22   "simple SELECT"
287c0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73   shown by the.[s
287d0 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20  elect-core] and 
287e0 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73  [simple-select-s
287f0 74 6d 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67  tmt] syntax diag
28800 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e  rams below.  .In
28810 20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20   practice, most 
28820 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28830 73 20 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c  s are simple SEL
28840 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
28850 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
28860 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
28870 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74  mple-select-stmt
28880 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
28890 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69  cl>..<p>Generati
288a0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ng the results o
288b0 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
288c0 54 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  T.statement is p
288d0 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f  resented as a fo
288e0 75 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20  ur step process 
288f0 69 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69  in the descripti
28900 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a  on below:..<ol>.
28910 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20    <li> <p>[FROM 
28920 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
28930 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
28940 74 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ta for the simpl
28950 65 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20  e SELECT is.    
28960 20 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54     determined. T
28970 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
28980 20 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74   either implicit
28990 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
289a0 77 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f  with 0.       co
289b0 6c 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20  lumns (if there 
289c0 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73  is no FROM claus
289d0 65 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69  e) or is determi
289e0 6e 65 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a  ned by the FROM.
289f0 20 20 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20         clause.. 
28a00 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20   <li> <p>[WHERE 
28a10 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
28a20 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
28a30 74 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75  ta is filtered u
28a40 73 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20  sing the WHERE. 
28a50 20 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70        clause exp
28a60 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69  ression.  .  <li
28a70 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47  > <p>[GROUP BY|G
28a80 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20  ROUP BY, HAVING 
28a90 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  and result-colum
28aa0 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72  n expression] pr
28ab0 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20  ocessing: .     
28ac0 20 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73    The set of res
28ad0 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70  ult rows is comp
28ae0 75 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74  uted by aggregat
28af0 69 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63  ing the data acc
28b00 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20  ording to.      
28b10 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c   any GROUP BY cl
28b20 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61  ause and calcula
28b30 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d  ting the result-
28b40 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  set expressions 
28b50 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72  for the.       r
28b60 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65  ows of the filte
28b70 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
28b80 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  t.  .  <li> <p>[
28b90 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43  DISTINCT|DISTINC
28ba0 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70  T/ALL keyword] p
28bb0 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68  rocessing: If th
28bc0 65 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45  e query is a "SE
28bd0 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54  LECT.       DIST
28be0 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70  INCT" query, dup
28bf0 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
28c00 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
28c10 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
28c20 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  ows..</ol>..<p>T
28c30 68 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70  here are two typ
28c40 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c  es of simple SEL
28c50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20  ECT statement - 
28c60 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e  aggregate and .n
28c70 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
28c80 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20  ries. ^A simple 
28c90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28ca0 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
28cb0 20 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e   query if.it con
28cc0 74 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47  tains either a G
28cd0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f  ROUP BY clause o
28ce0 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  r one or more ag
28cf0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
28d00 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  s.in the result-
28d10 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  set. ^Otherwise,
28d20 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   if a simple SEL
28d30 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ECT contains no 
28d40 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69  aggregate.functi
28d50 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
28d60 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20  Y clause, it is 
28d70 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
28d80 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e  query...<p><b>1.
28d90 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f   Determination o
28da0 66 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52  f input data (FR
28db0 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  OM clause proces
28dc0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
28dd0 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d  hd_fragment from
28de0 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
28df0 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46  l>hd_keywords {F
28e00 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ROM clause}</tcl
28e10 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20  >..<p>The input 
28e20 64 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73  data used by a s
28e30 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65  imple SELECT que
28e40 72 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c  ry is a set of <
28e50 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61  i>N</i> rows .ea
28e60 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75  ch <i>M</i> colu
28e70 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28  mns wide...<p>^(
28e80 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  If the FROM clau
28e90 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
28ea0 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  om a simple SELE
28eb0 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  CT statement, th
28ec0 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61  en the .input da
28ed0 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79  ta is implicitly
28ee0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65   a single row ze
28ef0 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29  ro columns wide)
28f00 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e  ^ (i.e. <i>N</i>
28f10 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d  =1 and.<i>M</i>=
28f20 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f  0)...<p>If a FRO
28f30 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  M clause is spec
28f40 69 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20  ified, the data 
28f50 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c  on which a simpl
28f60 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f  e SELECT query.o
28f70 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72  perates comes fr
28f80 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f  om the one or mo
28f90 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  re tables or sub
28fa0 71 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20  queries (SELECT 
28fb0 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61  statements.in pa
28fc0 72 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69  renthesis) speci
28fd0 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  fied following t
28fe0 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e  he FROM keyword.
28ff0 20 5e 41 20 73 75 62 71 75 65 72 79 20 73 70 65   ^A subquery spe
29000 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 74 61  cified.in the ta
29010 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72 79 20  ble-or-subquery 
29020 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
29030 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20 0a  OM clause in a .
29040 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
29050 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c  atement is.handl
29060 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73 20  ed as if it was 
29070 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  a table containi
29080 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74 75  ng the data retu
29090 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
290a0 67 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 73  g the.subquery s
290b0 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20  tatement. ^Each 
290c0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75  column of the su
290d0 62 71 75 65 72 79 20 68 61 73 20 74 68 65 0a 5b  bquery has the.[
290e0 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74  collation|collat
290f0 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e  ion sequence] an
29100 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  d [affinity] of 
29110 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
29120 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20  g expression.in 
29130 74 68 65 20 73 75 62 71 75 65 72 79 20 73 74 61  the subquery sta
29140 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
29150 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20  there is only a 
29160 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
29170 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
29180 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65  FROM.clause, the
29190 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  n the input data
291a0 20 75 73 65 64 20 62 79 20 74 68 65 20 53 45 4c   used by the SEL
291b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
291c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
291d0 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65   the.named table
291e0 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d  . ^If there is m
291f0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62  ore than one tab
29200 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
29210 6e 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68  n FROM clause.th
29220 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  en the contents 
29230 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e  of all tables an
29240 64 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73 0a  d/or subqueries.
29250 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20  are joined into 
29260 61 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74  a single dataset
29270 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
29280 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29290 20 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a   to operate on..
292a0 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20  Exactly how the 
292b0 64 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64  data is combined
292c0 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
292d0 73 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f  specific [join-o
292e0 70 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f  perator] and.[jo
292f0 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75  in-constraint] u
29300 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74  sed to connect t
29310 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  he tables or sub
29320 71 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72  queries together
29330 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20  ...<p>All joins 
29340 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61  in SQLite are ba
29350 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65  sed on the carte
29360 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
29370 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67  the left and.rig
29380 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
29390 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  . ^The columns o
293a0 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  f the cartesian 
293b0 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20  product dataset 
293c0 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20  are, in .order, 
293d0 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  all the columns 
293e0 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  of the left-hand
293f0 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65   dataset followe
29400 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c  d by all the col
29410 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68  umns.of the righ
29420 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20  t-hand dataset. 
29430 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20  ^There is a row 
29440 69 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  in the cartesian
29450 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74   product dataset
29460 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69  .formed by combi
29470 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65  ning each unique
29480 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
29490 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c  a row from the l
294a0 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69  eft-hand .and ri
294b0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
294c0 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  s. ^(In other wo
294d0 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74  rds, if the left
294e0 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f  -hand dataset co
294f0 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73  nsists of.<i>N<s
29500 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29510 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
29520 20 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73   rows of .<i>M<s
29530 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29540 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
29550 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
29560 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
29570 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62  aset of.<i>N<sub
29580 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73  ><small>right</s
29590 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
295a0 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62  rows of.<i>M<sub
295b0 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73  ><small>right</s
295c0 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
295d0 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68  columns, then th
295e0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
295f0 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74  uct is a.dataset
29600 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73   of .<i>N<sub><s
29610 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
29620 3e 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e 3c  ></sub>&times;N<
29630 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
29640 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
29650 69 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63 6f  i>.rows, each co
29660 6e 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73  ntaining .<i>M<s
29670 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29680 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73  small></sub>+M<s
29690 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c  ub><small>right<
296a0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
296b0 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70  > columns.)^..<p
296c0 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  >^If the join-op
296d0 65 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53 53  erator is "CROSS
296e0 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a   JOIN", "INNER J
296f0 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20  OIN", "JOIN" or 
29700 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e  a comma.(",") an
29710 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e  d there is no ON
29720 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
29730 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
29740 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73  t of the join is
29750 0a 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74  .simply the cart
29760 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66  esian product of
29770 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
29780 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
29790 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65 72  s. .If join-oper
297a0 61 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20 4f  ator does have O
297b0 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
297c0 65 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68 61  es, those are ha
297d0 6e 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67 20  ndled according 
297e0 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to.the following
297f0 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a   bullet points:.
29800 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
29810 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  ^(If there is an
29820 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e 20   ON clause then 
29830 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f  the ON expressio
29840 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c  n is.       eval
29850 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
29860 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73  ow of the cartes
29870 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61  ian product as a
29880 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61   .       [boolea
29890 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
298a0 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
298b0 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ch the expressio
298c0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a  n evaluates to .
298d0 20 20 20 20 20 20 20 74 72 75 65 20 61 72 65 20         true are 
298e0 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  included from th
298f0 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20  e dataset.)^..  
29900 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72  <li> <p>^If ther
29910 65 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61  e is a USING cla
29920 75 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e 20  use.       then 
29930 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
29940 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69  mn names specifi
29950 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
29960 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f   the datasets to
29970 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68   .       both th
29980 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
29990 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65   of the join-ope
299a0 72 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61 63  rator. ^(For eac
299b0 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64 0a  h pair of named.
299c0 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20         columns, 
299d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22  the expression "
299e0 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69  lhs.X = rhs.X" i
299f0 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
29a00 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20  each row of.    
29a10 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e     the cartesian
29a20 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62   product as a [b
29a30 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
29a40 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f  n]. Only rows fo
29a50 72 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 61  r which.       a
29a60 6c 6c 20 73 75 63 68 20 65 78 70 72 65 73 73 69  ll such expressi
29a70 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ons evaluates to
29a80 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64   true are includ
29a90 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  ed from the.    
29aa0 20 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e     result set.)^
29ab0 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67   ^When comparing
29ac0 20 76 61 6c 75 65 73 20 61 73 20 61 20 72 65 73   values as a res
29ad0 75 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20 63  ult of a USING c
29ae0 6c 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20 20  lause, the.     
29af0 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66    normal rules f
29b00 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69  or handling affi
29b10 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f  nities, collatio
29b20 6e 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  n sequences and 
29b30 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c 75  NULL.       valu
29b40 65 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  es in comparison
29b50 73 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f  s apply. ^The co
29b60 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64 61  lumn from the da
29b70 74 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20 20  taset on the.   
29b80 20 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73 69      left-hand si
29b90 64 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  de of the join-o
29ba0 70 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69  perator is consi
29bb0 64 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20 74  dered to be on t
29bc0 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20  he left-hand.   
29bd0 20 20 20 20 73 69 64 65 20 6f 66 20 74 68 65 20      side of the 
29be0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
29bf0 74 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20  tor (=) for the 
29c00 70 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c  purposes of coll
29c10 61 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73 65  ation .       se
29c20 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69 6e  quence and affin
29c30 69 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e 0a  ity precedence..
29c40 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20  .       <p>^For 
29c50 65 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f 6c  each pair of col
29c60 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20  umns identified 
29c70 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  by a USING claus
29c80 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20  e, the column.  
29c90 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72 69       from the ri
29ca0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
29cb0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
29cc0 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74 61   the joined data
29cd0 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20 20  set. ^This .    
29ce0 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 64     is the only d
29cf0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
29d00 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  n a USING clause
29d10 20 61 6e 64 20 69 74 73 20 65 71 75 69 76 61 6c   and its equival
29d20 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f  ent ON.       co
29d30 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69  nstraint...  <li
29d40 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e 41  > <p>^(If the NA
29d50 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69 73  TURAL keyword is
29d60 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65   in the join-ope
29d70 72 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20 20  rator then an.  
29d80 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53       implicit US
29d90 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64  ING clause is ad
29da0 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d  ded to the join-
29db0 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65  constraints. The
29dc0 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20   implicit.      
29dd0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f   USING clause co
29de0 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74  ntains each of t
29df0 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
29e00 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62  that appear in b
29e10 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c  oth.       the l
29e20 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61  eft and right-ha
29e30 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  nd input dataset
29e40 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66  s.)^ ^If the lef
29e50 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
29e60 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61  .       input da
29e70 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e  tasets feature n
29e80 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20  o common column 
29e90 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20  names, then the 
29ea0 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a  NATURAL keyword.
29eb0 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66         has no ef
29ec0 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75  fect on the resu
29ed0 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e  lts of the join.
29ee0 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20   ^A USING or ON 
29ef0 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20  clause may.     
29f00 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74    not be added t
29f10 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70  o a join that sp
29f20 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55  ecifies the NATU
29f30 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20  RAL keyword...  
29f40 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
29f50 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
29f60 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20  s a "LEFT JOIN" 
29f70 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a  or "LEFT OUTER J
29f80 4f 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20 20  OIN", then.     
29f90 20 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74    after.       t
29fa0 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66  he ON or USING f
29fb0 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73  iltering clauses
29fc0 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69   have been appli
29fd0 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77  ed, an extra row
29fe0 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65   is .       adde
29ff0 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
2a000 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
2a010 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66  the original lef
2a020 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20  t-hand input .  
2a030 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61       dataset tha
2a040 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2a050 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20   no rows at all 
2a060 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65  in the composite
2a070 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
2a080 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65  (if any).)^ ^The
2a090 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74   added rows cont
2a0a0 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ain NULL values 
2a0b0 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20  in the columns. 
2a0c0 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64        that would
2a0d0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
2a0e0 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20  n values copied 
2a0f0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
2a100 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20  and input.      
2a110 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c   dataset.  .</ul
2a120 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72  >..<p>^(When mor
2a130 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65  e than two table
2a140 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67  s are joined tog
2a150 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66  ether as part of
2a160 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a   a FROM clause,.
2a170 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69  the join operati
2a180 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65  ons are processe
2a190 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20  d in order from 
2a1a0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
2a1b0 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20  n other .words, 
2a1c0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
2a1d0 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a  (A join-op-1 B j
2a1e0 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63  oin-op-2 C) is c
2a1f0 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20  omputed as .((A 
2a200 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69  join-op-1 B) joi
2a210 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74  n-op-2 C).)^..<t
2a220 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
2a230 72 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73  rossjoin {treats
2a240 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20   the CROSS JOIN 
2a250 6f 70 65 72 61 74 6f 72 20 73 70 65 63 69 61 6c  operator special
2a260 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e  ly}</tcl>.<p><b>
2a270 53 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63 69  Side note: Speci
2a280 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43  al handling of C
2a290 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e  ROSS JOIN.</b>.^
2a2a0 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66  There is no diff
2a2b0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
2a2c0 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  he "INNER JOIN",
2a2d0 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20   "JOIN" and "," 
2a2e0 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20  join.operators. 
2a2f0 54 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65 74  They are complet
2a300 65 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65 61  ely interchangea
2a310 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e  ble in SQLite..^
2a320 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e  (The "CROSS JOIN
2a330 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20  " join operator 
2a340 70 72 6f 64 75 63 65 73 20 74 68 65 20 73 61 6d  produces the sam
2a350 65 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  e result as the 
2a360 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
2a370 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
2a380 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
2a390 73 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c 68  s .[CROSS JOIN|h
2a3a0 61 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74  andled different
2a3b0 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79 20  ly by the query 
2a3c0 6f 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74 68  optimizer].in th
2a3d0 61 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74  at it prevents t
2a3e0 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2a3f0 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69  er from reorderi
2a400 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e  ng.the tables in
2a410 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61   the join.  An a
2a420 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72  pplication progr
2a430 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68  ammer can use th
2a440 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70  e CROSS JOIN .op
2a450 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74  erator to direct
2a460 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65  ly influence the
2a470 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20   algorithm that 
2a480 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70  is chosen to imp
2a490 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43  lement.the SELEC
2a4a0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76  T statement.  Av
2a4b0 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20  oid using CROSS 
2a4c0 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73  JOIN except in s
2a4d0 70 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f  pecific situatio
2a4e0 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c  ns .where manual
2a4f0 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20   control of the 
2a500 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
2a510 69 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f  is desired.  Avo
2a520 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a  id using.CROSS J
2a530 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65  OIN early in the
2a540 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20   development of 
2a550 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61  an application a
2a560 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20  s doing so is.a 
2a570 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
2a580 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f  c2.com/cgi/wiki?
2a590 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a  PrematureOptimiz
2a5a0 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65  ation">premature
2a5b0 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61  .optimization</a
2a5c0 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20  >.  The special 
2a5d0 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53  handling of CROS
2a5e0 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c  S JOIN is an SQL
2a5f0 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61  ite-specific.fea
2a600 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20  ture and is not 
2a610 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  a part of standa
2a620 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a  rd SQL..       .
2a630 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2a640 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74  t whereclause</t
2a650 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
2a660 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75  ords {WHERE clau
2a670 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e  se}</tcl>.<p><b>
2a680 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  2. WHERE clause 
2a690 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a  filtering.</b>..
2a6a0 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20  <p>^(If a WHERE 
2a6b0 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
2a6c0 69 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65  ied, the WHERE e
2a6d0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
2a6e0 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68  luated for .each
2a6f0 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75   row in the inpu
2a700 74 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f  t data as a [boo
2a710 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2a720 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20  . Only rows for 
2a730 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45 20  which the.WHERE 
2a740 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2a750 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74  n evaluates to t
2a760 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64  rue are included
2a770 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
2a780 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75  t before.continu
2a790 69 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72 65  ing.)^  Rows are
2a7a0 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   excluded from t
2a7b0 68 65 20 72 65 73 75 6c 74 20 69 66 20 74 68 65  he result if the
2a7c0 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65 76   WHERE clause.ev
2a7d0 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
2a7e0 72 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e  r false or NULL.
2a7f0 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e 20  ..<p>For a JOIN 
2a800 6f 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72  or INNER JOIN or
2a810 20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68 65   CROSS JOIN, the
2a820 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65  re is no differe
2a830 6e 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20 63  nce between .a c
2a840 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73  onstraint expres
2a850 73 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45 52  sion in the WHER
2a860 45 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e 65  E clause and one
2a870 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73   in the ON claus
2a880 65 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f 72  e.  However,.for
2a890 20 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72 20   a LEFT JOIN or 
2a8a0 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 2c  LEFT OUTER JOIN,
2a8b0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2a8c0 69 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61 6e  is very importan
2a8d0 74 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20 4a  t.  .In a LEFT J
2a8e0 4f 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20 4e  OIN,.the extra N
2a8f0 55 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65 20  ULL row for the 
2a900 72 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c 65  right-hand table
2a910 20 69 73 20 61 64 64 65 64 20 61 66 74 65 72 20   is added after 
2a920 4f 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  ON clause proces
2a930 73 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65 20  sing.but before 
2a940 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f  WHERE clause pro
2a950 63 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e 73  cessing.  A cons
2a960 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66 6f  traint of the fo
2a970 72 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74  rm "left.x=right
2a980 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c 61  .y".in an ON cla
2a990 75 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66 6f  use will therefo
2a9a0 72 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67 68  re allow through
2a9b0 20 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d 4e   the added all-N
2a9c0 55 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65 0a  ULL rows of the.
2a9d0 72 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42 75  right table.  Bu
2a9e0 74 20 69 66 20 74 68 61 74 20 73 61 6d 65 20 63  t if that same c
2a9f0 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e 20  onstraint is in 
2aa00 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2aa10 20 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67 68   a NULL in."righ
2aa20 74 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65 6e  t.y" will preven
2aa30 74 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  t the expression
2aa40 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79   "left.x=right.y
2aa50 22 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72 75  " from being tru
2aa60 65 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63 6c  e, and.thus excl
2aa70 75 64 65 20 74 68 61 74 20 72 6f 77 20 66 72 6f  ude that row fro
2aa80 6d 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c  m the output...<
2aa90 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69  p><b>3. Generati
2aaa0 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66  on of the set of
2aab0 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62   result rows.</b
2aac0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
2aad0 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63  nt resultset</tc
2aae0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2aaf0 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20  rds {result-set 
2ab00 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52  expressions} {GR
2ab10 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c  OUP BY}</tcl>..<
2ab20 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74  p>Once the input
2ab30 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46   data from the F
2ab40 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62  ROM clause has b
2ab50 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20  een filtered by 
2ab60 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
2ab70 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20   expression (if 
2ab80 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66  any), the set of
2ab90 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72   result rows for
2aba0 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
2abb0 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74  ECT are calculat
2abc0 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20  ed. Exactly how 
2abd0 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70  this is done dep
2abe0 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20  ends on whether 
2abf0 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
2ac00 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  CT is an aggrega
2ac10 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67  te or non-aggreg
2ac20 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77  ate query, and w
2ac30 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
2ac40 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20  GROUP.BY clause 
2ac50 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a  was specified...
2ac60 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20  <p> The list of 
2ac70 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77  expressions betw
2ac80 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61  een the SELECT a
2ac90 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
2aca0 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65   is known as.the
2acb0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
2acc0 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20  on list.  ^If a 
2acd0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2ace0 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c  n is the special
2acf0 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20   expression."*" 
2ad00 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
2ad10 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
2ad20 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74  ta are substitut
2ad30 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ed for that one 
2ad40 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66  expression..^(If
2ad50 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2ad60 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20  is the alias of 
2ad70 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  a table or subqu
2ad80 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
2ad90 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20  clause.followed 
2ada0 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c  by ".*" then all
2adb0 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68   columns from th
2adc0 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72  e named table or
2add0 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75   subquery are.su
2ade0 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2adf0 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73  e single express
2ae00 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61  ion.)^ ^(It is a
2ae10 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
2ae20 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a   "*" or."alias.*
2ae30 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
2ae40 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65  any context othe
2ae50 72 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20  r than a result 
2ae60 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
2ae70 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20  )^.^(It is also 
2ae80 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
2ae90 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e  a "*" or "alias.
2aea0 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
2aeb0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2aec0 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73  .query that does
2aed0 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d   not have a FROM
2aee0 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20   clause.)^..<p> 
2aef0 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ^(The number of 
2af00 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
2af10 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2af20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
2af30 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75  statement.is equ
2af40 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  al to the number
2af50 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
2af60 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
2af70 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66  pression list af
2af80 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e  ter.substitution
2af90 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e   of * and alias.
2afa0 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e  * expressions.)^
2afb0 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77   Each result row
2afc0 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62   is calculated b
2afd0 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y.evaluating the
2afe0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
2aff0 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
2b000 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20  ssion list with 
2b010 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e  respect to a.sin
2b020 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74  gle row of input
2b030 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67   data or, for ag
2b040 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c  gregate queries,
2b050 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
2b060 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73   a group.of rows
2b070 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  ...<ul>.  <li><p
2b080 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
2b090 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
2b0a0 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
2b0b0 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20  query</b>, then 
2b0c0 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73  .    each expres
2b0d0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2b0e0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2b0f0 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  st is evaluated 
2b100 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a  for each row in.
2b110 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20      the dataset 
2b120 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20  filtered by the 
2b130 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20  WHERE clause... 
2b140 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2b150 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2b160 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
2b170 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
2b180 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  t a GROUP.    BY
2b190 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
2b1a0 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  n each aggregate
2b1b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b1c0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2b1d0 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2b1e0 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20  once across the 
2b1f0 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20  entire dataset. 
2b200 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67  ^Each non-aggreg
2b210 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20  ate expression. 
2b220 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74     in the result
2b230 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65  -set is evaluate
2b240 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72  d once for an ar
2b250 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
2b260 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68  ed row of.    th
2b270 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20  e dataset. ^The 
2b280 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79  same arbitrarily
2b290 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73   selected row is
2b2a0 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20   used for each. 
2b2b0 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65     non-aggregate
2b2c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72   expression. ^Or
2b2d0 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74  , if the dataset
2b2e0 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72   contains zero r
2b2f0 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  ows, then .    e
2b300 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  ach non-aggregat
2b310 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
2b320 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2b330 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69  t a row consisti
2b340 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20  ng.    entirely 
2b350 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  of NULL values..
2b360 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67  .   <p>^The sing
2b370 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
2b380 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65  -set data create
2b390 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
2b3a0 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20  the aggregate.  
2b3b0 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67    and non-aggreg
2b3c0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ate expressions 
2b3d0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2b3e0 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75  t forms the resu
2b3f0 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67  lt of an.    agg
2b400 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2b410 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20  hout a GROUP BY 
2b420 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72  clause. ^An aggr
2b430 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2b440 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20  out a.    GROUP 
2b450 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73  BY clause always
2b460 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79   returns exactly
2b470 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61   one row of data
2b480 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20  , even if there 
2b490 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77  are.    zero row
2b4a0 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e  s of input data.
2b4b0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20  ..  <li><p>^(If 
2b4c0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2b4d0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
2b4e0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
2b4f0 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
2b500 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
2b510 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65  en each of the e
2b520 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69  xpressions speci
2b530 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
2b540 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59  the.    GROUP BY
2b550 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75   clause is evalu
2b560 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
2b570 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74  w of the dataset
2b580 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69  . Each row.    i
2b590 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20  s then assigned 
2b5a0 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73  to a "group" bas
2b5b0 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
2b5c0 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  s; rows for whic
2b5d0 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74  h.    the result
2b5e0 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
2b5f0 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70  the GROUP BY exp
2b600 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65  ressions are the
2b610 20 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61 73   same get.    as
2b620 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61  signed to the sa
2b630 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72  me group.)^ ^For
2b640 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
2b650 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20   grouping rows, 
2b660 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73  NULL .    values
2b670 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
2b680 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61  equal. ^The usua
2b690 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c  l rules for [col
2b6a0 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67  lation|selecting
2b6b0 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e   a.    collation
2b6c0 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20   sequence] with 
2b6d0 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65  which to compare
2b6e0 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70   text values app
2b6f0 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ly when evaluati
2b700 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ng.    expressio
2b710 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
2b720 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65   clause.  ^The e
2b730 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2b740 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
2b750 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74  e.    do <em>not
2b760 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
2b770 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
2b780 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
2b790 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20  result. ^The.   
2b7a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
2b7b0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
2b7c0 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67  e may not be agg
2b7d0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2b7e0 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66  ns...    <p>^(If
2b7f0 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
2b800 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
2b810 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  t is evaluated o
2b820 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f  nce for each gro
2b830 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20  up .    of rows 
2b840 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2b850 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
2b860 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
2b870 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48  uating the.    H
2b880 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2b890 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70  false, the group
2b8a0 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e   is discarded.)^
2b8b0 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20   ^If the HAVING 
2b8c0 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e  clause is.    an
2b8d0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
2b8e0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
2b8f0 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c  luated across al
2b900 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  l rows in the gr
2b910 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48  oup. ^If.    a H
2b920 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2b930 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
2b940 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
2b950 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68  s evaluated with
2b960 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20   respect.    to 
2b970 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
2b980 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d  elected row from
2b990 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68   the group.  ^Th
2b9a0 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
2b9b0 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65  ion may.    refe
2b9c0 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
2b9d0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
2b9e0 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20  tions, that are 
2b9f0 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c  not in the resul
2ba00 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e  t.</p>..    <p>^
2ba10 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
2ba20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2ba30 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61  t is then evalua
2ba40 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
2ba50 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72  h.    group of r
2ba60 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ows. ^If the exp
2ba70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67  ression is an ag
2ba80 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2ba90 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65  on, it is .    e
2baa0 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
2bab0 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
2bac0 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73  group. ^Otherwis
2bad0 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  e, it is evaluat
2bae0 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61  ed against.    a
2baf0 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72   single arbitrar
2bb00 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66  ily chosen row f
2bb10 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67  rom within the g
2bb20 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20  roup. ^If there 
2bb30 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e  is more.    than
2bb40 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61   one non-aggrega
2bb50 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  te expression in
2bb60 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c   the result-set,
2bb70 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20   then all such. 
2bb80 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61     expressions a
2bb90 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  re evaluated for
2bba0 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a   the same row...
2bbb0 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f      <p>^Each gro
2bbc0 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  up of input data
2bbd0 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62  set rows contrib
2bbe0 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  utes a single ro
2bbf0 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65  w to the .    se
2bc00 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2bc10 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69  . ^Subject to fi
2bc20 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74  ltering associat
2bc30 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54  ed with the DIST
2bc40 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64  INCT.    keyword
2bc50 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
2bc60 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
2bc70 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
2bc80 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
2bc90 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69  .    BY clause i
2bca0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
2bcb0 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75  e number of grou
2bcc0 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75  ps of rows produ
2bcd0 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a  ced by applying.
2bce0 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59      the GROUP BY
2bcf0 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75   and HAVING clau
2bd00 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65  ses to the filte
2bd10 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
2bd20 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e  t..</ul>..<p><b>
2bd30 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75  4. Removal of du
2bd40 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44 49  plicate rows (DI
2bd50 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e  STINCT processin
2bd60 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
2bd70 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63  fragment distinc
2bd80 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
2bd90 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e  keywords {DISTIN
2bda0 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f  CT}</tcl>..<p>^O
2bdb0 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72  ne of the ALL or
2bdc0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
2bdd0 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68  ds may follow th
2bde0 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64  e SELECT keyword
2bdf0 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
2be00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
2be10 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
2be20 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
2be30 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a  T ALL, then the.
2be40 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72 65  entire set of re
2be50 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65  sult rows are re
2be60 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
2be70 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65  LECT. ^If neithe
2be80 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43  r ALL or.DISTINC
2be90 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74  T are present, t
2bea0 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
2beb0 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65   is as if ALL we
2bec0 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e  re specified. .^
2bed0 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  If the simple SE
2bee0 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54  LECT is a SELECT
2bef0 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20   DISTINCT, then 
2bf00 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
2bf10 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20  re removed.from 
2bf20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
2bf30 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74  t rows before it
2bf40 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46   is returned. ^F
2bf50 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2bf60 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70  of.detecting dup
2bf70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f  licate rows, two
2bf80 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
2bf90 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
2bfa0 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f  e equal. ^The.no
2bfb0 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73  rmal rules for s
2bfc0 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
2bfd0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f  tion sequence to
2bfe0 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
2bff0 6c 75 65 73 20 77 69 74 68 0a 61 70 70 6c 79 2e  lues with.apply.
2c000 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d  ..<tcl>.hd_fragm
2c010 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 20 7b 63 6f  ent compound {co
2c020 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
2c030 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 20  compound query} 
2c040 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  {compound SELECT
2c050 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  } {compound SELE
2c060 43 54 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  CTs}.</tcl>.<h3>
2c070 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74 20  Compound Select 
2c080 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a  Statements</h3>.
2c090 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20  .<p>Two or more 
2c0a0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2c0b0 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62  statements may b
2c0c0 65 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65  e connected toge
2c0d0 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63  ther to form.a c
2c0e0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75  ompound SELECT u
2c0f0 73 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20  sing the UNION, 
2c100 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52  UNION ALL, INTER
2c110 53 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f  SECT or EXCEPT o
2c120 70 65 72 61 74 6f 72 2c 0a 61 73 20 73 68 6f 77  perator,.as show
2c130 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
2c140 6e 67 20 64 69 61 67 72 61 6d 3a 0a 0a 3c 74 63  ng diagram:..<tc
2c150 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  l>.RecursiveBubb
2c160 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
2c170 6e 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c  nd-select-stmt.<
2c180 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  /tcl>..<p>^In a 
2c190 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2c1a0 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
2c1b0 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
2c1c0 74 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d  t return the sam
2c1d0 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  e .number of res
2c1e0 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73  ult columns. ^As
2c1f0 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20   the components 
2c200 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  of a compound SE
2c210 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d  LECT must.be sim
2c220 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2c230 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20  ments, they may 
2c240 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 5b 4f 52 44  not contain [ORD
2c250 45 52 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54  ER BY] or [LIMIT
2c260 5d 20 63 6c 61 75 73 65 73 2e 0a 5e 5b 4f 52 44  ] clauses..^[ORD
2c270 45 52 20 42 59 5d 20 61 6e 64 20 5b 4c 49 4d 49  ER BY] and [LIMI
2c280 54 5d 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f  T] clauses may o
2c290 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68 65  nly occur at the
2c2a0 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69   end of the enti
2c2b0 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  re compound.SELE
2c2c0 43 54 2c 20 61 6e 64 20 74 68 65 6e 20 6f 6e 6c  CT, and then onl
2c2d0 79 20 69 66 20 74 68 65 20 66 69 6e 61 6c 20 65  y if the final e
2c2e0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f  lement of the co
2c2f0 6d 70 6f 75 6e 64 20 69 73 20 6e 6f 74 20 61 20  mpound is not a 
2c300 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2e  [VALUES] clause.
2c310 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64  ..<p>^A compound
2c320 20 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20   SELECT created 
2c330 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20  using UNION ALL 
2c340 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
2c350 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
2c360 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
2c370 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
2c380 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
2c390 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65  tor, and all the
2c3a0 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
2c3b0 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67  ELECT to the rig
2c3c0 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55  ht of it. ^The U
2c3d0 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f  NION operator wo
2c3e0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79  rks the same way
2c3f0 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65   as.UNION ALL, e
2c400 78 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69  xcept that dupli
2c410 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
2c420 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66  moved from the f
2c430 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e  inal result set.
2c440 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20  .^The INTERSECT 
2c450 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
2c460 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f   the intersectio
2c470 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  n of the results
2c480 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
2c490 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20  .right SELECTs. 
2c4a0 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65   ^The EXCEPT ope
2c4b0 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68  rator returns th
2c4c0 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73  e subset of rows
2c4d0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
2c4e0 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61  .left SELECT tha
2c4f0 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72  t are not also r
2c500 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72  eturned by the r
2c510 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54  ight-hand SELECT
2c520 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77  . ^Duplicate.row
2c530 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
2c540 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  om the results o
2c550 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20  f INTERSECT and 
2c560 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73  EXCEPT operators
2c570 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75   before the.resu
2c580 6c 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e  lt set is return
2c590 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ed...<p>^For the
2c5a0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
2c5b0 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61  ermining duplica
2c5c0 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  te rows for the 
2c5d0 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f  results of compo
2c5e0 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61  und.SELECT opera
2c5f0 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  tors, NULL value
2c600 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
2c610 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20   equal to other 
2c620 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a  NULL values and.
2c630 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
2c640 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
2c650 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s. ^The collatio
2c660 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
2c670 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20  to compare .two 
2c680 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
2c690 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20  etermined as if 
2c6a0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
2c6b0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2c6c0 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74  t-hand.SELECT st
2c6d0 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68  atements were th
2c6e0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
2c6f0 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f  -hand operands o
2c700 66 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29  f the equals (=)
2c710 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70  .operator, excep
2c720 74 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70  t that greater p
2c730 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74  recedence is not
2c740 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63   assigned to a c
2c750 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e  ollation .sequen
2c760 63 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  ce specified wit
2c770 68 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f  h the postfix CO
2c780 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20  LLATE operator. 
2c790 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61  ^No affinity.tra
2c7a0 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65  nsformations are
2c7b0 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20   applied to any 
2c7c0 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70  values when comp
2c7d0 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61  aring rows as pa
2c7e0 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64  rt of a.compound
2c7f0 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28   SELECT. ..<p>^(
2c800 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
2c810 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
2c820 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20  s are connected 
2c830 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20  into a compound 
2c840 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f  SELECT,.they gro
2c850 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
2c860 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
2c870 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22  words, if "A", "
2c880 42 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61  B" and "C" are a
2c890 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ll.simple SELECT
2c8a0 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20   statements, (A 
2c8b0 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72  op B op C) is pr
2c8c0 6f 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f  ocessed as ((A o
2c8d0 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c  p B) op C).)^..<
2c8e0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
2c8f0 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f  gment orderby {o
2c900 72 64 65 72 20 62 79 7d 20 7b 4f 52 44 45 52 20  rder by} {ORDER 
2c910 42 59 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  BY}</tcl>.<h3>Th
2c920 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
2c930 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20  e</h3>..<p>If a 
2c940 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2c950 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f   that returns mo
2c960 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
2c970 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e  does not have an
2c980 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65  .ORDER BY clause
2c990 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  , the order in w
2c9a0 68 69 63 68 20 74 68 65 20 72 6f 77 73 20 61 72  hich the rows ar
2c9b0 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e  e returned is un
2c9c0 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20  defined..Or, if 
2c9d0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
2c9e0 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20  nt does have an 
2c9f0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2ca00 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f   then the list o
2ca10 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74  f.expressions at
2ca20 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52  tached to the OR
2ca30 44 45 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65  DER BY determine
2ca40 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
2ca50 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74  ich rows.are ret
2ca60 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
2ca70 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 20 5b 63  r...<p>.^In a [c
2ca80 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2ca90 73 74 61 74 65 6d 65 6e 74 2c 20 6f 6e 6c 79 20  statement, only 
2caa0 74 68 65 20 6c 61 73 74 20 6f 72 20 72 69 67 68  the last or righ
2cab0 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
2cac0 45 4c 45 43 54 5d 0a 6d 61 79 20 68 61 76 65 20  ELECT].may have 
2cad0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
2cae0 73 65 2e 20 5e 54 68 61 74 20 4f 52 44 45 52 20  se. ^That ORDER 
2caf0 42 59 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 61  BY clause will a
2cb00 70 70 6c 79 20 61 63 72 6f 73 73 20 61 6c 6c 20  pply across all 
2cb10 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 74 68 65 20  elements of.the 
2cb20 63 6f 6d 70 6f 75 6e 64 2e 20 5e 49 66 20 74 68  compound. ^If th
2cb30 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 65 6c 65  e right-most ele
2cb40 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f  ment of a [compo
2cb50 75 6e 64 20 53 45 4c 45 43 54 5d 20 69 73 20 61  und SELECT] is a
2cb60 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
2cb70 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52 44 45 52 20  ,.then no ORDER 
2cb80 42 59 20 63 6c 61 75 73 65 20 69 73 20 61 6c 6c  BY clause is all
2cb90 6f 77 65 64 20 6f 6e 20 74 68 61 74 20 73 74 61  owed on that sta
2cba0 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f  tement....<p>^Ro
2cbb0 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72  ws are first sor
2cbc0 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ted based on the
2cbd0 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c   results of.eval
2cbe0 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
2cbf0 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
2cc00 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
2cc10 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20  list, then ties 
2cc20 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76  are broken.by ev
2cc30 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63  aluating the sec
2cc40 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  ond left-most ex
2cc50 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20  pression and so 
2cc60 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  on. The order in
2cc70 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20   which.two rows 
2cc80 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52  for which all OR
2cc90 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2cca0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65  ns evaluate to e
2ccb0 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a  qual values are.
2ccc0 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
2ccd0 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44  fined. ^Each ORD
2cce0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2ccf0 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
2cd00 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f  ly followed.by o
2cd10 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ne of the keywor
2cd20 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20  ds ASC (smaller 
2cd30 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
2cd40 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45  ned first) or DE
2cd50 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65  SC (larger.value
2cd60 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
2cd70 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68  irst). ^If neith
2cd80 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61  er ASC or DESC a
2cd90 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f  re specified, ro
2cda0 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e  ws.are sorted in
2cdb0 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c   ascending (smal
2cdc0 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74  ler values first
2cdd0 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75  ) order by defau
2cde0 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44  lt...<p>Each ORD
2cdf0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2ce00 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
2ce10 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
2ce20 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ol>.<li><p>^If t
2ce30 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2ce40 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
2ce50 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
2ce60 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69  hen the.expressi
2ce70 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
2ce80 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
2ce90 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
2cea0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
2ceb0 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d  (columns are num
2cec0 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
2ced0 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  to right startin
2cee0 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e  g with 1)...<li>
2cef0 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
2cf00 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2cf10 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
2cf20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
2cf30 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66   to.the alias of
2cf40 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70   one of the outp
2cf50 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  ut columns, then
2cf60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2cf70 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e  is considered.an
2cf80 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20   alias for that 
2cf90 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  column...<li><p>
2cfa0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
2cfb0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2cfc0 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74  ession is any ot
2cfd0 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  her expression, 
2cfe0 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64  it .is evaluated
2cff0 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65   and the returne
2d000 64 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20  d value used to 
2d010 6f 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74  order the output
2d020 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53   rows. ^If.the S
2d030 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2d040 69 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  is a simple SELE
2d050 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45  CT, then an ORDE
2d060 52 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e  R BY may contain
2d070 20 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65   any.arbitrary e
2d080 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77  xpressions. ^How
2d090 65 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c  ever, if the SEL
2d0a0 45 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e  ECT is a compoun
2d0b0 64 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f  d SELECT, then.O
2d0c0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2d0d0 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ons that are not
2d0e0 20 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70   aliases to outp
2d0f0 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20  ut columns must 
2d100 62 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73  be exactly.the s
2d110 61 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73  ame as an expres
2d120 73 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20  sion used as an 
2d130 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c  output column..<
2d140 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68  /ol>..<p>^For th
2d150 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f  e purposes of so
2d160 72 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75  rting rows, valu
2d170 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  es are compared 
2d180 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a  in the same way.
2d190 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73  as for [comparis
2d1a0 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e  on expressions].
2d1b0 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   The collation s
2d1c0 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20  equence used to 
2d1d0 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74  compare.two text
2d1e0 20 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72   values is deter
2d1f0 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  mined as follows
2d200 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ol>.  <li><p
2d210 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2d220 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d230 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61  assigned a colla
2d240 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2d250 69 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69  ing.  the postfi
2d260 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  x [COLLATE opera
2d270 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73  tor], then the s
2d280 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69  pecified collati
2d290 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20  on sequence is. 
2d2a0 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e   used..  <li><p>
2d2b0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
2d2c0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2d2d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69  ession is an ali
2d2e0 61 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73  as to an express
2d2f0 69 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62  ion.  that has b
2d300 65 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63  een assigned a c
2d310 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d320 65 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74  e using the post
2d330 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20  fix .  [COLLATE 
2d340 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
2d350 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
2d360 71 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20  quence assigned 
2d370 74 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20  to the aliased. 
2d380 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
2d390 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  sed..  <li><p>^O
2d3a0 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
2d3b0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2d3c0 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e  sion is a column
2d3d0 20 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a   or an alias of.
2d3e0 20 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20    an expression 
2d3f0 74 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e  that is a column
2d400 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
2d410 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
2d420 75 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20  uence for.  the 
2d430 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20  column is used. 
2d440 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  .  <li><p>^Other
2d450 77 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52  wise, the [BINAR
2d460 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  Y] collation seq
2d470 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c  uence is used..<
2d480 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63  /ol>..<p>In a [c
2d490 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2d4a0 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f  statement, all O
2d4b0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2d4c0 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a  ons are handled.
2d4d0 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f  as aliases for o
2d4e0 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
2d4f0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
2d500 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66 20 61  compound..^(If a
2d510 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n ORDER BY expre
2d520 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20  ssion is not an 
2d530 69 6e 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74  integer alias, t
2d540 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63  hen SQLite searc
2d550 68 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73  hes.the left-mos
2d560 74 20 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20  t SELECT in the 
2d570 63 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72  compound for a r
2d580 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
2d590 74 20 6d 61 74 63 68 65 73 20 65 69 74 68 65 72  t matches either
2d5a0 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74  .the second or t
2d5b0 68 69 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65  hird rules above
2d5c0 2e 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20  . If a match is 
2d5d0 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63  found, the searc
2d5e0 68 20 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20  h stops and.the 
2d5f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61  expression is ha
2d600 6e 64 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61  ndled as an alia
2d610 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  s for the result
2d620 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20   column that it 
2d630 68 61 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64  has been.matched
2d640 20 61 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77   against. Otherw
2d650 69 73 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45  ise, the next SE
2d660 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
2d670 74 20 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20  t is tried, and 
2d680 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20  so on.)^.^If no 
2d690 6d 61 74 63 68 69 6e 67 20 65 78 70 72 65 73 73  matching express
2d6a0 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
2d6b0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63   in the result c
2d6c0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f  olumns of any.co
2d6d0 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
2d6e0 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
2d6f0 2e 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20  . ^Each term of 
2d700 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
2d710 75 73 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64  use is.processed
2d720 20 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20   separately and 
2d730 6d 61 79 20 62 65 20 6d 61 74 63 68 65 64 20 61  may be matched a
2d740 67 61 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f  gainst result co
2d750 6c 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65  lumns from diffe
2d760 72 65 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74  rent.SELECT stat
2d770 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
2d780 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  mpound.</p>..<tc
2d790 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
2d7a0 6d 69 74 6f 66 66 73 65 74 20 7b 4c 49 4d 49 54  mitoffset {LIMIT
2d7b0 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f 74 63 6c 3e  } {OFFSET}</tcl>
2d7c0 0a 3c 68 33 3e 54 68 65 20 4c 49 4d 49 54 20 63  .<h3>The LIMIT c
2d7d0 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  lause</h3>..<p>^
2d7e0 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
2d7f0 20 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63   is used to plac
2d800 65 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  e an upper bound
2d810 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
2d820 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
2d830 62 79 20 74 68 65 20 65 6e 74 69 72 65 20 53 45  by the entire SE
2d840 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
2d850 0a 3c 70 3e 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f  .<p>^In a [compo
2d860 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c  und SELECT], onl
2d870 79 20 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69  y the.last or ri
2d880 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
2d890 20 53 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e   SELECT] may con
2d8a0 74 61 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61  tain a LIMIT cla
2d8b0 75 73 65 2e 20 20 0a 5e 49 6e 20 61 20 5b 63 6f  use.  .^In a [co
2d8c0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20  mpound SELECT], 
2d8d0 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  .the LIMIT claus
2d8e0 65 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65  e applies to the
2d8f0 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
2d900 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66  , not just the f
2d910 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 5e 49 66  inal SELECT..^If
2d920 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
2d930 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2d940 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61  is a [VALUES cla
2d950 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d  use] then no LIM
2d960 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c  IT clause.is all
2d970 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73  owed...<p>^Any s
2d980 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
2d990 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
2d9a0 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73  the .LIMIT claus
2d9b0 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74  e, so long as it
2d9c0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e   evaluates to an
2d9d0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61   integer or a va
2d9e0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
2d9f0 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
2da00 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
2da10 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  er. ^If the expr
2da20 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2da30 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75   to a NULL .valu
2da40 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76  e or any other v
2da50 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
2da60 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
2da70 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2da80 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72  nteger, an.error
2da90 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49   is returned. ^I
2daa0 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
2dab0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2dac0 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
2dad0 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65  alue,.then there
2dae0 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75   is no upper bou
2daf0 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  nd on the number
2db00 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2db10 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  d. ^Otherwise, t
2db20 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e  he.SELECT return
2db30 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f  s the first N ro
2db40 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  ws of its result
2db50 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65   set only, where
2db60 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a   N is the value.
2db70 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65  that the LIMIT e
2db80 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2db90 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20  tes to. ^Or, if 
2dba0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2dbb0 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72  ment would.retur
2dbc0 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f  n less than N ro
2dbd0 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d  ws without a LIM
2dbe0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
2dbf0 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c  the entire resul
2dc00 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65  t set is.returne
2dc10 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70  d. ..<p>^The exp
2dc20 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64  ression attached
2dc30 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   to the optional
2dc40 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
2dc50 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61  hat may follow a
2dc60 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75  .LIMIT clause mu
2dc70 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65  st also evaluate
2dc80 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   to an integer, 
2dc90 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2dca0 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2dcb0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2dcc0 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61  n integer. ^If a
2dcd0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73  n expression has
2dce0 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73   an OFFSET claus
2dcf0 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73  e,.then the firs
2dd00 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69  t M rows are omi
2dd10 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
2dd20 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65  sult set returne
2dd30 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a  d by the SELECT.
2dd40 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
2dd50 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72  e next N rows ar
2dd60 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72  e returned, wher
2dd70 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68  e M and N are th
2dd80 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68  e values that.th
2dd90 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d  e OFFSET and LIM
2dda0 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75  IT clauses evalu
2ddb0 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69  ate to, respecti
2ddc0 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68  vely. ^Or, if th
2ddd0 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72  e SELECT.would r
2dde0 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2ddf0 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64  M+N rows if it d
2de00 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49  id not have a LI
2de10 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
2de20 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77   the.first M row
2de30 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e  s are skipped an
2de40 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
2de50 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61 72  rows (if any) ar
2de60 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  e returned. ^If 
2de70 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73  the.OFFSET claus
2de80 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  e evaluates to a
2de90 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
2dea0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   the results are
2deb0 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66 20   the same as if 
2dec0 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64  it.had evaluated
2ded0 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49   to zero...<p>^I
2dee0 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70 61  nstead of a sepa
2def0 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75  rate OFFSET clau
2df00 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  se, the LIMIT cl
2df10 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
2df20 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72   two.scalar expr
2df30 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65  essions separate
2df40 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49  d by a comma. ^I
2df50 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
2df60 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69 6f   first expressio
2df70 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68 65  n.is used as the
2df80 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
2df90 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  on and the secon
2dfa0 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65  d as the LIMIT e
2dfb0 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20  xpression..This 
2dfc0 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69  is counter-intui
2dfd0 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73  tive, as when us
2dfe0 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
2dff0 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64  lause the second
2e000 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72   of.the two expr
2e010 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f  essions is the O
2e020 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66 69  FFSET and the fi
2e030 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a  rst the LIMIT. .
2e040 54 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66  This reversal of
2e050 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20   the offset and 
2e060 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69  limit is intenti
2e070 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69  onal.- it maximi
2e080 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  zes compatibilit
2e090 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c  y with other SQL
2e0a0 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
2e0b0 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61  s..However, to a
2e0c0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
2e0d0 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  programmers are 
2e0e0 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61  strongly encoura
2e0f0 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66  ged to use.the f
2e100 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  orm of the LIMIT
2e110 20 63 6c 61 75 73 65 20 74 68 61 74 20 75 73 65   clause that use
2e120 73 20 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b  s the "OFFSET" k
2e130 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64  eyword and avoid
2e140 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63  .using a LIMIT c
2e150 6c 61 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d  lause with a com
2e160 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66  ma-separated off
2e170 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  set...<tcl>hd_fr
2e180 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56  agment values {V
2e190 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41  ALUES clause} VA
2e1a0 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  LUES</tcl>.<h3>T
2e1b0 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  he VALUES clause
2e1c0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  </h3>..<p>^(The 
2e1d0 70 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c  phrase "VALUES(<
2e1e0 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29  i>expr-list</i>)
2e1f0 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2e200 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43   thing.as "SELEC
2e210 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  T <i>expr-list</
2e220 69 3e 22 2e 29 5e 20 20 5e 28 54 68 65 20 70 68  i>".)^  ^(The ph
2e230 72 61 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e  rase."VALUES(<i>
2e240 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29  expr-list-1</i>)
2e250 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69  ,...,(<i>expr-li
2e260 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  st-N</i>)" means
2e270 20 74 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20   the same.thing 
2e280 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
2e290 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e  pr-list-1</i> UN
2e2a0 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f  ION ALL ... UNIO
2e2b0 4e 20 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e  N ALL.SELECT <i>
2e2c0 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22  expr-list-N</i>"
2e2d0 2e 29 5e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20  .)^  Both forms 
2e2e0 61 72 65 20 74 68 65 20 73 61 6d 65 2c 20 65 78  are the same, ex
2e2f0 63 65 70 74 20 74 68 61 74 0a 74 68 65 20 6e 75  cept that.the nu
2e300 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
2e310 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 61 20 63  tatements in a c
2e320 6f 6d 70 6f 75 6e 64 20 69 73 20 6c 69 6d 69 74  ompound is limit
2e330 65 64 20 62 79 0a 5b 53 51 4c 49 54 45 5f 4c 49  ed by.[SQLITE_LI
2e340 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
2e350 45 43 54 5d 20 77 68 65 72 65 61 73 20 74 68 65  ECT] whereas the
2e360 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2e370 69 6e 20 61 0a 56 41 4c 55 45 53 20 63 6c 61 75  in a.VALUES clau
2e380 73 65 20 68 61 73 20 6e 6f 20 61 72 62 69 74 72  se has no arbitr
2e390 61 72 79 20 6c 69 6d 69 74 2e 0a 0a 3c 70 3e 54  ary limit...<p>T
2e3a0 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65  here are some re
2e3b0 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
2e3c0 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45  e use of a VALUE
2e3d0 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72  S clause that ar
2e3e0 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74  e.not shown on t
2e3f0 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2e400 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ms:..<ul>.<li><p
2e410 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75  >.^A VALUES clau
2e420 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c  se cannot be fol
2e430 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20  lowed by [ORDER 
2e440 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41  BY]...<li><p>.^A
2e450 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63   VALUES clause c
2e460 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65  annot be followe
2e470 64 20 62 79 20 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f  d by [LIMIT]..</
2e480 75 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49  ul>...<h3>The WI
2e490 54 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  TH Clause</h3>..
2e4a0 3c 70 3e 5e 53 45 4c 45 43 54 20 73 74 61 74 65  <p>^SELECT state
2e4b0 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74  ments may be opt
2e4c0 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64  ionally preceded
2e4d0 20 62 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49   by a single.[WI
2e4e0 54 48 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20  TH clause] that 
2e4f0 64 65 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d  defines one or m
2e500 6f 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c  ore [common tabl
2e510 65 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66  e expressions].f
2e520 6f 72 20 75 73 65 20 77 69 74 68 69 6e 20 74 68  or use within th
2e530 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2e540 6e 74 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  nt....<tcl>.####
2e550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e590 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
2e5a0 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65  on UPDATE update
2e5b0 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45   {UPDATE *UPDATE
2e5c0 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
2e5d0 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
2e5e0 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
2e5f0 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61  p>^An UPDATE sta
2e600 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
2e610 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65  o modify a subse
2e620 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  t of the values 
2e630 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20  stored in .zero 
2e640 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
2e650 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2e660 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
2e670 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69   the .<i>qualifi
2e680 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  ed-table-name</i
2e690 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  > specified as p
2e6a0 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41 54  art of the UPDAT
2e6b0 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  E statement...<p
2e6c0 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
2e6d0 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
2e6e0 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45 20  ot have a WHERE 
2e6f0 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73  clause, all rows
2e700 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72   in the.table ar
2e710 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68  e modified by th
2e720 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72  e UPDATE. ^Other
2e730 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54 45  wise, the UPDATE
2e740 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68   affects only th
2e750 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69  ose.rows for whi
2e760 63 68 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ch the result of
2e770 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2e780 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
2e790 72 65 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62  ression as a .[b
2e7a0 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
2e7b0 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73  n|boolean expres
2e7c0 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e  sion is true]. ^
2e7d0 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
2e7e0 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52 45 20  or if the.WHERE 
2e7f0 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20  clause does not 
2e800 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65  evaluate to true
2e810 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20   for any row in 
2e820 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73  the table - this
2e830 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74   just.means that
2e840 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2e850 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65  ement affects ze
2e860 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65  ro rows...<p>The
2e870 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d   modifications m
2e880 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20  ade to each row 
2e890 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20 55  affected by an U
2e8a0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2e8b0 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62  are.determined b
2e8c0 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  y the list of as
2e8d0 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77  signments follow
2e8e0 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79 77  ing the SET keyw
2e8f0 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e  ord. Each.assign
2e900 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 61  ment specifies a
2e910 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20   column name to 
2e920 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
2e930 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20  equals sign and 
2e940 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  a.scalar express
2e950 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74  ion to the right
2e960 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65  . ^For each affe
2e970 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61  cted row, the na
2e980 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20  med columns.are 
2e990 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
2e9a0 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75  s found by evalu
2e9b0 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  ating the corres
2e9c0 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a  ponding scalar .
2e9d0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66  expressions. ^If
2e9e0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
2e9f0 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f  -name appears mo
2ea00 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20  re than once in 
2ea10 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69  the list of.assi
2ea20 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f  gnment expressio
2ea30 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20  ns, all but the 
2ea40 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72  rightmost occurr
2ea50 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e  ence is ignored.
2ea60 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64   ^Columns.that d
2ea70 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20  o not appear in 
2ea80 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
2ea90 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74  gnments are left
2eaa0 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68   unmodified. ^Th
2eab0 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73  e scalar.express
2eac0 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74  ions may refer t
2ead0 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  o columns of the
2eae0 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74   row being updat
2eaf0 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ed. ^In this cas
2eb00 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70  e all.scalar exp
2eb10 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61  ressions are eva
2eb20 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e  luated before an
2eb30 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72  y assignments ar
2eb40 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65  e made...<p>^The
2eb50 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
2eb60 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
2eb70 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d   the user to nom
2eb80 69 6e 61 74 65 20 61 20 73 70 65 63 69 66 69 63  inate a specific
2eb90 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
2eba0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2ebb0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
2ebc0 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65   during this one
2ebd0 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e   UPDATE command.
2ebe0 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 65  .Refer to the se
2ebf0 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b  ction entitled [
2ec00 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
2ec10 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
2ec20 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65  rmation...<h3>Re
2ec30 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50  strictions on UP
2ec40 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20  DATE Statements 
2ec50 57 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52  Within CREATE TR
2ec60 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  IGGER</h3>..<p>T
2ec70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64  he following add
2ec80 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72  itional syntax r
2ec90 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
2eca0 79 20 74 6f 20 55 50 44 41 54 45 20 73 74 61 74  y to UPDATE stat
2ecb0 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75  ements that.occu
2ecc0 72 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  r within the bod
2ecd0 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54  y of a [CREATE T
2ece0 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
2ecf0 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  t.  ..<ul>.  <li
2ed00 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c  ><p>^The <i>tabl
2ed10 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69  e-name</i> speci
2ed20 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
2ed30 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
2ed40 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20  ent within.     
2ed50 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20   a trigger body 
2ed60 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66  must be unqualif
2ed70 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20  ied. ^(In other 
2ed80 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20  words, the.     
2ed90 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
2eda0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
2edb0 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
2edc0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50  e name of the UP
2edd0 44 41 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f  DATE is.      no
2ede0 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e  t allowed within
2edf0 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e   triggers.)^ ^Un
2ee00 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 74  less the table t
2ee10 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
2ee20 67 65 72 0a 20 20 20 20 20 20 69 73 20 61 74 74  ger.      is att
2ee30 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
2ee40 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
2ee50 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75  he table being u
2ee60 70 64 61 74 65 64 20 62 79 20 74 68 65 0a 20 20  pdated by the.  
2ee70 20 20 20 20 74 72 69 67 67 65 72 20 70 72 6f 67      trigger prog
2ee80 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20  ram must reside 
2ee90 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
2eea0 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
2eeb0 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20  the table.      
2eec0 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
2eed0 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
2eee0 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
2eef0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
2ef00 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69  he.      unquali
2ef10 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  fied name of the
2ef20 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
2ef30 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64  ated is resolved
2ef40 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
2ef50 0a 20 20 20 20 20 20 61 73 20 69 74 20 69 73 20  .      as it is 
2ef60 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  for a top-level 
2ef70 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65  statement (by se
2ef80 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74 68  arching first th
2ef90 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
2efa0 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68 65 20  .      then the 
2efb0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
2efc0 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
2efd0 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
2efe0 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
2eff0 20 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a       attached)..
2f000 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49  .  <li><p>^The I
2f010 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
2f020 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
2f030 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
2f040 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20  d on UPDATE.    
2f050 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
2f060 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
2f070 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
2f080 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
2f090 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20   BY clauses for 
2f0a0 55 50 44 41 54 45 20 61 72 65 20 75 6e 73 75 70  UPDATE are unsup
2f0b0 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20  ported within.  
2f0c0 20 20 20 20 74 72 69 67 67 65 72 73 2c 20 72 65      triggers, re
2f0d0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2f0e0 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
2f0f0 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c  ons used to buil
2f100 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a  d SQLite..</ul>.
2f110 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49  .<h3>Optional LI
2f120 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59  MIT and ORDER BY
2f130 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c   Clauses</h3>..<
2f140 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73  p>^(If SQLite is
2f150 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20   built with the 
2f160 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
2f170 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
2f180 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
2f190 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65   option then the
2f1a0 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55   syntax of the U
2f1b0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2f1c0 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68  is extended.with
2f1d0 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20   optional ORDER 
2f1e0 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
2f1f0 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77  uses)^ as follow
2f200 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  s:</p>..<tcl>Bub
2f210 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
2f220 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
2f230 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20  tcl>..<p>^If an 
2f240 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2f250 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61   has a LIMIT cla
2f260 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d  use, the maximum
2f270 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2f280 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64  that.will be upd
2f290 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79  ated is found by
2f2a0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2f2b0 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70  accompanying exp
2f2c0 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74  ression and cast
2f2d0 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74  ing.it to an int
2f2e0 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e  eger value. ^A n
2f2f0 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 69 73  egative value is
2f300 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
2f310 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e  "no limit"...<p>
2f320 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78  ^If the LIMIT ex
2f330 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2f340 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69  es to non-negati
2f350 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69  ve value <i>N</i
2f360 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45  > and the.UPDATE
2f370 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
2f380 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
2f390 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
2f3a0 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75   that would be u
2f3b0 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62  pdated in.the ab
2f3c0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
2f3d0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
2f3e0 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
2f3f0 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 61  o the ORDER BY a
2f400 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e  nd the.first <i>
2f410 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e  N</i> updated. ^
2f420 28 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73  (If the UPDATE s
2f430 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61  tatement also ha
2f440 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
2f450 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73  se,.then it is s
2f460 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74  imilarly evaluat
2f470 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61  ed and cast to a
2f480 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
2f490 20 49 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65   If the OFFSET.e
2f4a0 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2f4b0 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67  tes to a non-neg
2f4c0 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d  ative value <i>M
2f4d0 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66  </i>, then the f
2f4e0 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f  irst <i>M</i>.ro
2f4f0 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
2f500 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  nd the following
2f510 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75   <i>N</i> rows u
2f520 70 64 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29  pdated instead.)
2f530 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50  ^..<p>^If the UP
2f540 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
2f550 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
2f560 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
2f570 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
2f580 62 65 20 75 70 64 61 74 65 64 20 69 6e 20 74 68  be updated in th
2f590 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
2f5a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
2f5b0 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
2f5c0 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
2f5d0 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
2f5e0 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
2f5f0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
2f600 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69  o determine .whi
2f610 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20  ch are actually 
2f620 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54  updated...<p>^(T
2f630 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
2f640 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20  se on an UPDATE 
2f650 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
2f660 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d  d only to determ
2f670 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66  ine which.rows f
2f680 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c  all within the L
2f690 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20  IMIT. The order 
2f6a0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
2f6b0 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72  e modified is ar
2f6c0 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
2f6d0 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
2f6e0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
2f6f0 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23  ause.)^..<tcl>.#
2f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f740 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
2f750 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63  ction VACUUM vac
2f760 75 75 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75  uum VACUUM..Recu
2f770 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2f780 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c  am vacuum-stmt.<
2f790 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65  /tcl>..<p>.  The
2f7a0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
2f7b0 72 65 62 75 69 6c 64 73 20 74 68 65 20 65 6e 74  rebuilds the ent
2f7c0 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 54 68  ire database. Th
2f7d0 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
2f7e0 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20 61 70  .  reasons an ap
2f7f0 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68 74 20  plication might 
2f800 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20  do this:..<ul>. 
2f810 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73   <li> <p> ^Unles
2f820 73 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e  s SQLite is runn
2f830 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76 61 63  ing in "auto_vac
2f840 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20  uum=FULL" mode, 
2f850 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20 20 20  when a large.   
2f860 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61    amount of data
2f870 20 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d   is deleted from
2f880 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f890 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62 65 68  le it leaves beh
2f8a0 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20 20 73  ind empty.     s
2f8b0 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65 22 20  pace, or "free" 
2f8c0 64 61 74 61 62 61 73 65 20 70 61 67 65 73 2e 20  database pages. 
2f8d0 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 64  This means the d
2f8e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
2f8f0 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72 67 65  ht.     be large
2f900 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20  r than strictly 
2f910 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e  necessary. ^Runn
2f920 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20 72 65  ing VACUUM to re
2f930 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20 20 20  build the .     
2f940 64 61 74 61 62 61 73 65 20 72 65 63 6c 61 69 6d  database reclaim
2f950 73 20 74 68 69 73 20 73 70 61 63 65 20 61 6e 64  s this space and
2f960 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
2f970 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
2f980 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20  e file...  <li> 
2f990 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20 69 6e  <p> ^Frequent in
2f9a0 73 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c 20  serts, updates, 
2f9b0 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20  and deletes can 
2f9c0 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61  cause the databa
2f9d0 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74 6f 20  se file.     to 
2f9e0 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65  become fragmente
2f9f0 64 20 2d 20 77 68 65 72 65 20 64 61 74 61 20 66  d - where data f
2fa00 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  or a single tabl
2fa10 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 73 63  e or index is sc
2fa20 61 74 74 65 72 65 64 20 0a 20 20 20 20 20 61 72  attered .     ar
2fa30 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62 61 73  ound the databas
2fa40 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67  e file. ^Running
2fa50 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65 73 20   VACUUM ensures 
2fa60 74 68 61 74 20 65 61 63 68 20 74 61 62 6c 65 20  that each table 
2fa70 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78 20 69  and.     index i
2fa80 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72 65 64  s largely stored
2fa90 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77 69   contiguously wi
2faa0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
2fab0 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65  e file. ^In some
2fac0 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56 41 43  .     cases, VAC
2fad0 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65 64  UUM may also red
2fae0 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
2faf0 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c  f partially fill
2fb00 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20 20 20  ed pages in.    
2fb10 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72   the database, r
2fb20 65 64 75 63 69 6e 67 20 74 68 65 20 73 69 7a 65  educing the size
2fb30 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2fb40 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a   file further...
2fb50 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d    <li> <p> ^Norm
2fb60 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61  ally, the databa
2fb70 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61  se [page_size] a
2fb80 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
2fb90 74 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  t the database. 
2fba0 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75      supports [au
2fbb0 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20  to_vacuum] must 
2fbc0 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65  be configured be
2fbd0 66 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73  fore the databas
2fbe0 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61  e file is.     a
2fbf0 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e  ctually created.
2fc00 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20   ^However, when 
2fc10 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  not in [write-ah
2fc20 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74  ead log] mode, t
2fc30 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73  he .     [page_s
2fc40 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74  ize] and/or [aut
2fc50 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72  o_vacuum] proper
2fc60 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74  ties of an exist
2fc70 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d 61 79  ing database may
2fc80 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64   be.     changed
2fc90 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70   by using the [p
2fca0 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c  age_size pragma|
2fcb0 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f  page_size]  and/
2fcc0 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76  or .     [auto_v
2fcd0 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74  acuum|pragma aut
2fce0 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61  o_vacuum] pragma
2fcf0 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64  s and then immed
2fd00 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67  iately VACUUMing
2fd10 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61  .     the databa
2fd20 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72  se. ^When in [wr
2fd30 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
2fd40 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61  ode, only the [a
2fd50 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20  uto_vacuum].    
2fd60 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74   support propert
2fd70 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64  y can be changed
2fd80 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c   using VACUUM..<
2fd90 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55 55  /ul>..<p>^(VACUU
2fda0 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  M only works on 
2fdb0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2fdc0 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  e. It is not pos
2fdd0 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20  sible to VACUUM 
2fde0 61 6e 0a 61 74 74 61 63 68 65 64 20 64 61 74 61  an.attached data
2fdf0 62 61 73 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70  base file.)^..<p
2fe00 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  >^The VACUUM com
2fe10 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f  mand works by co
2fe20 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  pying the conten
2fe30 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2fe40 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72  se into.a tempor
2fe50 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
2fe60 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77  e and then overw
2fe70 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
2fe80 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f  nal with the .co
2fe90 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65  ntents of the te
2fea0 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57  mporary file. ^W
2feb0 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20  hen overwriting 
2fec0 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20  the original, a 
2fed0 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c  rollback.journal
2fee0 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64   or [write-ahead
2fef0 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69   log] WAL file i
2ff00 73 20 75 73 65 64 20 6a 75 73 74 20 61 73 20 69  s used just as i
2ff10 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61  t would be for a
2ff20 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny.other databas
2ff30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e  e transaction. ^
2ff40 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20  This means that 
2ff50 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61  when VACUUMing a
2ff60 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d   database, .as m
2ff70 75 63 68 20 61 73 20 74 77 69 63 65 20 74 68 65  uch as twice the
2ff80 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69   size of the ori
2ff90 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ginal database f
2ffa0 69 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ile is required 
2ffb0 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61  in free.disk spa
2ffc0 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  ce...<p>^The VAC
2ffd0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  UUM command may 
2ffe0 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49  change the [ROWI
2fff0 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65  D | ROWIDs] of e
30000 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61  ntries in any.ta
30010 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  bles that do not
30020 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
30030 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t [INTEGER PRIMA
30040 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c  RY KEY]..</p>..<
30050 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c  p>^A VACUUM will
30060 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69   fail if there i
30070 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61  s an open transa
30080 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65  ction, or if the
30090 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f  re are one or.mo
300a0 72 65 20 61 63 74 69 76 65 20 53 51 4c 20 73 74  re active SQL st
300b0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74  atements when it
300c0 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41   is run...<p>^(A
300d0 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73  s of SQLite vers
300e0 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65  ion 3.1, an alte
300f0 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67  rnative to using
30100 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d   the VACUUM comm
30110 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73  and to.reclaim s
30120 70 61 63 65 20 61 66 74 65 72 20 64 61 74 61 20  pace after data 
30130 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
30140 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   is auto-vacuum 
30150 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73  mode, enabled us
30160 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61  ing.the [auto_va
30170 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20  cuum] pragma.)^ 
30180 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75  ^When [auto_vacu
30190 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66  um] is enabled f
301a0 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 66 72  or a database.fr
301b0 65 65 20 70 61 67 65 73 20 6d 61 79 20 62 65 20  ee pages may be 
301c0 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65 72 20  reclaimed after 
301d0 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c 20 63  deleting data, c
301e0 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20  ausing the file 
301f0 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f  to shrink,.witho
30200 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68  ut rebuilding th
30210 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
30220 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 20  e using VACUUM. 
30230 20 48 6f 77 65 76 65 72 2c 20 75 73 69 6e 67 0a   However, using.
30240 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61  [auto_vacuum] ca
30250 6e 20 6c 65 61 64 20 74 6f 20 65 78 74 72 61 20  n lead to extra 
30260 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 72  database file fr
30270 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 41 6e  agmentation.  An
30280 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  d [auto_vacuum].
30290 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74  does not compact
302a0 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65   partially fille
302b0 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64  d pages of the d
302c0 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55  atabase as VACUU
302d0 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a  M does...</p>...
302e0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
302f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30330 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e  ####.Section {IN
30340 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65  DEXED BY} indexe
30350 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59  dby {{INDEXED BY
30360 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d  } {NOT INDEXED}}
30370 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  ..</tcl>.<p>^The
30380 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
30390 73 65 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53  se forces the [S
303a0 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e  QLite query plan
303b0 6e 65 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61  ner] to use a.pa
303c0 72 74 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69  rticular named i
303d0 6e 64 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54  ndex on a [DELET
303e0 45 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72  E], [SELECT], or
303f0 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
30400 65 6e 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44  ent..The INDEXED
30410 20 42 59 20 70 68 72 61 73 65 20 69 73 20 61 6e   BY phrase is an
30420 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
30430 6e 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72  n and.is not por
30440 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72 20 53  table to other S
30450 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
30460 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  nes.</p>..<tcl>.
30470 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
30480 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
30490 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63  -table-name.</tc
304a0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44  l>..<p>^The "IND
304b0 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61  EXED BY index-na
304c0 6d 65 22 20 70 68 72 61 73 65 20 73 70 65 63 69  me" phrase speci
304d0 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61  fies that the na
304e0 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62  med index.must b
304f0 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20  e used in order 
30500 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65  to look up value
30510 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69  s on the precedi
30520 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e  ng table..^If in
30530 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f  dex-name does no
30540 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f  t exist or canno
30550 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  t be used for th
30560 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68  e query, then.th
30570 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
30580 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
30590 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20  nt fails..^(The 
305a0 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c  "NOT INDEXED" cl
305b0 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
305c0 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61  hat no index sha
305d0 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a  ll be used when.
305e0 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72  accessing the pr
305f0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69  eceding table, i
30600 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
30610 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20   indices create 
30620 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52  by.UNIQUE and PR
30630 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
30640 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c  aints.  However,
30650 20 74 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e   the [rowid].can
30660 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74   still be used t
30670 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65  o look up entrie
30680 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54  s even when "NOT
30690 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65   INDEXED" is spe
306a0 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c  cified.)^</p>..<
306b0 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62  p>Some SQL datab
306c0 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
306d0 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  ide non-standard
306e0 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73   "hint" mechanis
306f0 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20  ms which.can be 
30700 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65  used to give the
30710 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
30720 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61   clues about wha
30730 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f  t indices it sho
30740 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61  uld.use for a pa
30750 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65  rticular stateme
30760 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42  nt.  The INDEX B
30770 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69  Y clause of SQLi
30780 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f  te is .<em>not</
30790 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65  em> a hinting me
307a0 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73  chanism and it s
307b0 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
307c0 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20  d as such..^The 
307d0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
307e0 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20  e does not give 
307f0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69  the optimizer hi
30800 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20  nts about which 
30810 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74  index.to use; it
30820 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d   gives the optim
30830 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65  izer a requireme
30840 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65  nt of which inde
30850 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68  x to use..^If th
30860 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
30870 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
30880 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
30890 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
308a0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
308b0 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
308c0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
308d0 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
308e0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
308f0 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
30900 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
30910 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
30920 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  the performance 
30930 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
30940 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
30950 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
30960 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
30970 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
30980 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
30990 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
309a0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
309b0 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
309c0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
309d0 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
309e0 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
309f0 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
30a00 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
30a10 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
30a20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
30a30 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
30a40 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
30a50 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
30a60 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
30a70 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
30a80 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
30a90 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
30aa0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
30ab0 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
30ac0 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
30ad0 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
30ae0 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
30af0 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
30b00 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
30b10 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
30b20 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
30b30 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
30b40 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
30b50 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
30b60 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c  ..<h3>See Also:<
30b70 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  /h3>..<ol>.<li><
30b80 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61  p>The [query pla
30b90 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20  nner checklist] 
30ba0 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73 20  describes steps 
30bb0 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  that application
30bc0 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75  .developers shou
30bd0 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  ld following to 
30be0 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65  help resolve que
30bf0 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c  ry planner probl
30c00 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20  ems..Notice the 
30c10 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66 20  that the use of 
30c20 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61 20  INDEXED BY is a 
30c30 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20  last resort, to 
30c40 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65  be used only.whe
30c50 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73  n all other meas
30c60 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a  ures fail.</p>..
30c70 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e  <li><p>[upluscon
30c80 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 22  trol|The unary "
30c90 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e  +" operator].can
30ca0 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 71   be used to disq
30cb0 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20  ualify terms in 
30cc0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
30cd0 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64   from use by ind
30ce0 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73  ices..Careful us
30cf0 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e  e of unary + can
30d00 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20   sometimes help 
30d10 70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65 72  prevent the quer
30d20 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63  y planner from.c
30d30 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69  hoosing a poor i
30d40 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72 65 73  ndex without res
30d50 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75  tricting it to u
30d60 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69  sing one specifi
30d70 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c  c index..Careful
30d80 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e   placement of un
30d90 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20  ary + operators 
30da0 69 73 20 61 20 62 65 74 74 65 72 20 6d 65 74 68  is a better meth
30db0 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69  od for controlli
30dc0 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65  ng .which indice
30dd0 73 20 61 72 65 20 75 73 65 64 20 62 79 20 61 20  s are used by a 
30de0 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e  query.</p>..<li>
30df0 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  <p>The [sqlite3_
30e00 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43  stmt_status()] C
30e10 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74  /C++ interface t
30e20 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
30e30 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  .[SQLITE_STMTSTA
30e40 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
30e50 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53  P] and [SQLITE_S
30e60 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20  TMTSTATUS_SORT] 
30e70 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65  verbs.can be use
30e80 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72  d to detect at r
30e90 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20  un-time when an 
30ea0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
30eb0 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65   not.making effe
30ec0 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64  ctive use of ind
30ed0 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c  ices.  Many appl
30ee0 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65  ications may pre
30ef0 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b  fer to.use the [
30f00 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
30f10 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
30f20 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78   to detect index
30f30 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74   misuse.rather t
30f40 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20  han the INDEXED 
30f50 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69  BY phrase descri
30f60 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f  bed here.</p>.</
30f70 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ol>..<tcl>.#####
30f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fc0 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73  ########.# A lis
30fd0 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20  t of keywords.  
30fe0 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72  A asterisk occur
30ff0 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77  s after the keyw
31000 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a  ord if it is on.
31010 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c  # the fallback l
31020 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f  ist..#.set keywo
31030 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b  rd_list [lsort {
31040 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54  .   ABORT.   ACT
31050 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46  ION.   ADD.   AF
31060 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c  TER.   ALL.   AL
31070 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20  TER.   ANALYZE. 
31080 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41    AND.   AS.   A
31090 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20  SC.   ATTACH.   
310a0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
310b0 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e   BEFORE.   BEGIN
310c0 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42  .   BETWEEN.   B
310d0 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20  Y.   CASCADE.   
310e0 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20  CASE.   CAST.   
310f0 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45  CHECK.   COLLATE
31100 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f  .   COLUMN.   CO
31110 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54  MMIT.   CONFLICT
31120 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20  .   CONSTRAINT. 
31130 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53    CREATE.   CROS
31140 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54  S.   CURRENT_DAT
31150 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
31160 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
31170 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41  ESTAMP.   DATABA
31180 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20  SE.   DEFAULT.  
31190 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46   DEFERRED.   DEF
311a0 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54  ERRABLE.   DELET
311b0 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54  E.   DESC.   DET
311c0 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a  ACH.   DISTINCT.
311d0 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20     DROP.   END. 
311e0 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20    EACH.   ELSE. 
311f0 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
31200 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a  PT.   EXCLUSIVE.
31210 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
31220 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20  LAIN.   FAIL.   
31230 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20  FOR.   FOREIGN. 
31240 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20    FROM.   FULL. 
31250 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a    GLOB.   GROUP.
31260 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a     HAVING.   IF.
31270 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d     IGNORE.   IMM
31280 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20  EDIATE.   IN.   
31290 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
312a0 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20  .   INITIALLY.  
312b0 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
312c0 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49  .   INSTEAD.   I
312d0 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f  NTERSECT.   INTO
312e0 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c  .   IS.   ISNULL
312f0 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a  .   JOIN.   KEY.
31300 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a     LEFT.   LIKE.
31310 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43     LIMIT.   MATC
31320 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20  H.   NATURAL.   
31330 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  NO.   NOT.   NOT
31340 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
31350 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20  OF.   OFFSET.   
31360 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
31370 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c  R.   OUTER.   PL
31380 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20  AN.   PRAGMA.   
31390 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59  PRIMARY.   QUERY
313a0 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 43  .   RAISE.   REC
313b0 55 52 53 49 56 45 0a 20 20 20 52 45 46 45 52 45  URSIVE.   REFERE
313c0 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20  NCES.   REGEXP. 
313d0 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c    REINDEX.   REL
313e0 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20  EASE.   RENAME. 
313f0 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53    REPLACE.   RES
31400 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20  TRICT.   RIGHT. 
31410 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
31420 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20  W.   SAVEPOINT. 
31430 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a    SELECT.   SET.
31440 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50     TABLE.   TEMP
31450 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20  .   TEMPORARY.  
31460 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54   THEN.   TO.   T
31470 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52  RANSACTION.   TR
31480 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20  IGGER.   UNION. 
31490 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41    UNIQUE.   UPDA
314a0 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56  TE.   USING.   V
314b0 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a  ACUUM.   VALUES.
314c0 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55     VIEW.   VIRTU
314d0 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57 49  AL.   WITH.   WI
314e0 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20 20  THOUT.   WHEN.  
314f0 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75   WHERE.}]..hd_pu
31500 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22  ts {<DIV class="
31510 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53  pdf_section">}.S
31520 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b  ection {SQLite K
31530 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64  eywords} keyword
31540 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64  s {{*SQL keyword
31550 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d  } {SQL keywords}
31560 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56  }.hd_puts {</DIV
31570 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  >}.</tcl>..<p>Th
31580 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73  e SQL standard s
31590 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20  pecifies a huge 
315a0 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72  number of keywor
315b0 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74  ds which may not
315c0 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20  .be used as the 
315d0 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c  names of tables,
315e0 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e   indices, column
315f0 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73  s, databases, us
31600 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74  er-defined.funct
31610 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
31620 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
31630 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20  modules, or any 
31640 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65  other named obje
31650 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20  ct..The list of 
31660 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c  keywords is so l
31670 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f  ong that few peo
31680 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72  ple can remember
31690 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d   them all..For m
316a0 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f  ost SQL code, yo
316b0 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73  ur safest bet is
316c0 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e   to never use an
316d0 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  y English langua
316e0 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e  ge.word as the n
316f0 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65  ame of a user-de
31700 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70  fined object.</p
31710 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e  >..<p>If you wan
31720 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f  t to use a keywo
31730 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f  rd as a name, yo
31740 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20  u need to quote 
31750 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66  it.  There.are f
31760 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74  our ways of quot
31770 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
31780 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
31790 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
317a0 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
317b0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
317c0 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
317d0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
317e0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
317f0 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
31800 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69  quotes is a stri
31810 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
31820 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
31830 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
31840 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
31850 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
31860 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  >^A keyword in d
31870 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
31880 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
31890 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
318a0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
318b0 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
318c0 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
318d0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
318e0 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
318f0 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
31900 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
31910 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
31920 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
31930 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
31940 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
31950 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
31960 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
31970 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
31980 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
31990 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
319a0 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
319b0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
319c0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
319d0 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
319e0 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
319f0 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
31a00 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
31a10 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65  ed in grave acce
31a20 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20  nts (ASCII code 
31a30 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20  96) is .        
31a40 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
31a50 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
31a60 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
31a70 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
31a80 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
31a90 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69  d by MySQL and i
31aa0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
31ab0 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
31ac0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
31ad0 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  /td></tr>.</tabl
31ae0 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
31af0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65  .</p>..<p>For re
31b00 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f  silience when co
31b10 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69  nfronted with hi
31b20 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61  storical SQL sta
31b30 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a  tements, SQLite.
31b40 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62  will sometimes b
31b50 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20  end the quoting 
31b60 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e  rules above:</p>
31b70 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
31b80 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  f a keyword in s
31b90 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ingle.quotes (ex
31ba0 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f  : <b>'key'</b> o
31bb0 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29  r <b>'glob'</b>)
31bc0 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
31bd0 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69  ntext where.an i
31be0 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c  dentifier is all
31bf0 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61  owed but where a
31c00 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
31c10 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20  is not allowed, 
31c20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69  then.the token i
31c30 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
31c40 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  be an identifier
31c50 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74   instead of a st
31c60 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f  ring literal..</
31c70 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
31c80 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
31c90 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28   double.quotes (
31ca0 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e  ex: <b>"key"</b>
31cb0 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62   or <b>"glob"</b
31cc0 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
31cd0 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74  context where.it
31ce0 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c   cannot be resol
31cf0 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69  ved to an identi
31d00 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61  fier but where a
31d10 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a   string literal.
31d20 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  is allowed, then
31d30 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e   the token is un
31d40 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
31d50 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
31d60 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64  instead.of an id
31d70 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c  entifier.</p></l
31d80 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f  i>.</ul>..<p>Pro
31d90 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75  grammers are cau
31da0 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73  tioned not to us
31db0 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74  e the two except
31dc0 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69  ions described i
31dd0 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  n.the previous b
31de0 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68  ullets.  We emph
31df0 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20  asize that they 
31e00 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68  exist only so th
31e10 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66  at old.and ill-f
31e20 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ormed SQL statem
31e30 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f  ents will run co
31e40 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65  rrectly.  Future
31e50 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
31e60 69 74 65 20 6d 69 67 68 74 20 72 61 69 73 65 20  ite might raise 
31e70 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f  errors instead o
31e80 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20  f accepting the 
31e90 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d  malformed.statem
31ea0 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20  ents covered by 
31eb0 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  the exceptions a
31ec0 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bove.</p>..<p>.S
31ed0 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
31ee0 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
31ef0 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
31f00 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66  t takes on new f
31f10 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
31f20 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65  revent your code
31f30 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b   from being brok
31f40 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68  en by future enh
31f50 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73  ancements, you s
31f60 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71  hould.normally q
31f70 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66  uote any identif
31f80 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
31f90 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
31fa0 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
31fb0 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
31fc0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
31fd0 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73  list below shows
31fe0 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65   all possible ke
31ff0 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61  ywords used by a
32000 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69  ny build of.SQLi
32010 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  te regardless of
32020 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f   [compile-time o
32030 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20  ptions].  .Most 
32040 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69  reasonable confi
32050 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f  gurations use mo
32060 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  st or all of the
32070 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74  se keywords,.but
32080 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d   some keywords m
32090 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68  ay be omitted wh
320a0 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  en SQL language 
320b0 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73  features are.dis
320c0 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c  abled..^(Regardl
320d0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
320e0 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
320f0 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
32100 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
32110 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
32120 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
32130 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
32140 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
32150 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
32160 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
32170 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
32180 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
32190 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
321a0 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
321b0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
321c0 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  left" valign="to
321d0 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a  p" width="20%">.
321e0 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65  <tcl>.set n [lle
321f0 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
32200 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73  st].set nCol 5.s
32210 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28  et nRow [expr {(
32220 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f  $n+$nCol-1)/$nCo
32230 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65  l}].set i 0.fore
32240 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72  ach word $keywor
32250 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24  d_list {.  if {$
32260 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20  i==$nRow} {.    
32270 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74  hd_puts "</td><t
32280 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22  d valign=\"top\"
32290 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20   align=\"left\" 
322a0 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a  width=\"20%\">".
322b0 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20      set i 1.  } 
322c0 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20  else {.    incr 
322d0 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  i.  }.  hd_puts 
322e0 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a  "$word<br>\n".}.
322f0 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72  </tcl>.</td></tr
32300 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
32310 71 75 6f 74 65 3e 29 5e 0a                       quote>)^.