Documentation Source Text

Hex Artifact Content
Login

Artifact cd0558af3b253cc48efda3fa0a50df43402b0f64:


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 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
1210: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1220: 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b   are .[foreign_k
1230: 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61  eys pragma | ena
1240: 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61 62  bled] when a tab
1250: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 74  le is renamed, t
1260: 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e  hen any.[foreign
1270: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
1280: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 73  FERENCES clauses
1290: 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20 28  ] in any table (
12a0: 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c 65  either the.table
12b0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f   being renamed o
12c0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61 62  r some other tab
12d0: 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20 74  le).that refer t
12e0: 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f  g renamed are mo
1300: 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72 20  dified to refer 
1310: 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64 20  .to the renamed 
1320: 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65 77  table by its new
1330: 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65   name...<p> ^The
1340: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74   ADD COLUMN synt
1350: 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64  ax.is used to ad
1360: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1370: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
1380: 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f  ble..^The new co
1390: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
13a0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
13b0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
13c0: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
13d0: 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d  ns..The [column-
13e0: 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e 65  def] rule define
13f0: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 69  s the characteri
1400: 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65 77  stics of the new
1410: 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e   column..^(The n
1420: 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61  ew column may ta
1430: 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  ke any of the fo
1440: 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c 65 20  rms permissible 
1450: 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  in a [CREATE TAB
1460: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77  LE].statement, w
1470: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
1480: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 29  g restrictions:)
1490: 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ^.<ul>.<li>^The 
14a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
14b0: 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ave a PRIMARY KE
14c0: 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e 73  Y or UNIQUE cons
14d0: 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69  traint.</li>.<li
14e0: 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  >^The column may
14f0: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1500: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
1510: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
1520: 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20 43 55  NT_DATE, .    CU
1530: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
1540: 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
1550: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
1560: 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61  .</li>.<li>^If a
1570: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1580: 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69 65  aint is specifie
1590: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  d, then the colu
15a0: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a 20  mn must have a. 
15b0: 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65     default value
15c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c   other than NULL
15d0: 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69  ..<li>^If [forei
15e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
15f0: 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67 6e  ts] are [foreign
1600: 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65  _keys pragma | e
1610: 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20  nabled] and.    
1620: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  a column with a 
1630: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1640: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1650: 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73 20   clause].    is 
1660: 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d  added, the colum
1670: 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64 65  n must have a de
1680: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e  fault value of N
1690: 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  ULL..</ul>..<p>^
16a0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 77  Note also that w
16b0: 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b 43 48  hen adding a [CH
16c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c  ECK constraint],
16d0: 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74   the CHECK const
16e0: 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73  raint.is not tes
16f0: 74 65 64 20 61 67 61 69 6e 73 74 20 70 72 65 65  ted against pree
1700: 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66 20  xisting rows of 
1710: 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73  the table..^This
1720: 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
1730: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1740: 61 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a 69  ains data that.i
1750: 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  s in violation o
1760: 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73  f the CHECK cons
1770: 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65 20  traint.  Future 
1780: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1790: 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20  te might.change 
17a0: 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45 43  to validate CHEC
17b0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73  K constraints as
17c0: 20 74 68 65 79 20 61 72 65 20 61 64 64 65 64 2e   they are added.
17d0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  </p>..<p> The ex
17e0: 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  ecution time of 
17f0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
1800: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65 70  command is indep
1810: 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d  endent of.the am
1820: 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20  ount of data in 
1830: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
1840: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1850: 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69 63  and runs as quic
1860: 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77  kly.on a table w
1870: 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72  ith 10 million r
1880: 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20 6f  ows as it does o
1890: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18a0: 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41   row..</p>..<p>A
18b0: 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20  fter ADD COLUMN 
18c0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20  has been run on 
18d0: 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61 74  a database, that
18e0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
18f0: 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20 62  ot.be readable b
1900: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
1910: 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c 69   3.1.3 and earli
1920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  er.</p>..<tcl>.#
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1980: 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20  ction {ANALYZE} 
1990: 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a  analyze ANALYZE.
19a0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
19b0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19c0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
19d0: 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f   ^The ANALYZE co
19e0: 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74  mmand gathers st
19f0: 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74  atistics about t
1a00: 61 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65  ables and.indice
1a10: 73 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65  s and stores the
1a20: 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72   collected infor
1a30: 6d 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72  mation.in [inter
1a40: 6e 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74  nal tables] of t
1a50: 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72  he database wher
1a60: 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
1a70: 6d 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73  mizer can.access
1a80: 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
1a90: 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68   and use it to h
1aa0: 65 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20  elp make better 
1ab0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63  query planning c
1ac0: 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61  hoices..^If no a
1ad0: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76  rguments are giv
1ae0: 65 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64  en, all attached
1af0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61   databases are.a
1b00: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20  nalyzed.  ^If a 
1b10: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1b20: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1b30: 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c  gument, then all
1b40: 20 74 61 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69   tables.and indi
1b50: 63 65 73 20 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces in that one 
1b60: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
1b70: 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20 74 68 65  lyzed.  .^If the
1b80: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74   argument is a t
1b90: 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20  able name, then 
1ba0: 6f 6e 6c 79 20 74 68 61 74 20 74 61 62 6c 65 20  only that table 
1bb0: 61 6e 64 20 74 68 65 0a 69 6e 64 69 63 65 73 20  and the.indices 
1bc0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1bd0: 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20 61  that table are a
1be0: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68  nalyzed.  ^If th
1bf0: 65 20 61 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e  e argument.is an
1c00: 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20 74 68 65   index name, the
1c10: 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20  n only that one 
1c20: 69 6e 64 65 78 20 69 73 20 61 6e 61 6c 79 7a 65  index is analyze
1c30: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  d.</p>..<p> ^The
1c40: 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65   default impleme
1c50: 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65 73 20 61  ntation stores a
1c60: 6c 6c 20 73 74 61 74 69 73 74 69 63 73 20 69 6e  ll statistics in
1c70: 20 61 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20   a single.table 
1c80: 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74 65 5f 73  named "[sqlite_s
1c90: 74 61 74 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c  tat1]".  ^If SQL
1ca0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
1cb0: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
1cc0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f  _ENABLE_STAT3] o
1cd0: 70 74 69 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75  ption and withou
1ce0: 74 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  t the [SQLITE_EN
1cf0: 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69  ABLE_STAT4].opti
1d00: 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f  on, then additio
1d10: 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61  nal histogram da
1d20: 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20  ta is.collected 
1d30: 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73  and stored in [s
1d40: 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e  qlite_stat3].. ^
1d50: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1d60: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d80: 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4] option, the
1d90: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1da0: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1db0: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1dc0: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1dd0: 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat4]..Older ver
1de0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1df0: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1e00: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1e10: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1e20: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1e30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1e40: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1e50: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1e60: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1e70: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e80: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e90: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1ea0: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1eb0: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1ec0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1ed0: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1ee0: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1ef0: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1f00: 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73  "4"..All of thes
1f10: 65 20 74 61 62 6c 65 73 20 61 72 65 20 63 6f 6c  e tables are col
1f20: 6c 65 63 74 69 76 65 6c 79 20 72 65 66 65 72 72  lectively referr
1f30: 65 64 20 74 6f 20 61 73 20 22 73 74 61 74 69 73  ed to as "statis
1f40: 74 69 63 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f  tics tables"..</
1f50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e  p>..<p> ^The con
1f60: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
1f70: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 63 61  istics tables ca
1f80: 6e 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69  n be queried usi
1f90: 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20  ng [SELECT].and 
1fa0: 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75  can be changed u
1fb0: 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45  sing the [DELETE
1fc0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64  ], [INSERT], and
1fd0: 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e   [UPDATE] comman
1fe0: 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20  ds..^(The [DROP 
1ff0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77  TABLE] command w
2000: 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69 73 74 69  orks on statisti
2010: 63 73 20 74 61 62 6c 65 73 0a 61 73 20 6f 66 20  cs tables.as of 
2020: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
2030: 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c  .7.9.)^.^The [AL
2040: 54 45 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61  TER TABLE] comma
2050: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  nd does not work
2060: 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 74   on statistics t
2070: 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70 72 69 61  ables..Appropria
2080: 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62  te care should b
2090: 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e  e used when chan
20a0: 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ging the content
20b0: 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69   of the statisti
20c0: 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76  cs.tables as inv
20d0: 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e  alid content can
20e0: 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f   cause SQLite to
20f0: 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69   select ineffici
2100: 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e  ent.query plans.
2110: 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61    Generally spea
2120: 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64  king, one should
2130: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20   not modify the 
2140: 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73  content of.the s
2150: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
2160: 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73   by any mechanis
2170: 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76  m other than inv
2180: 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a  oking the.ANALYZ
2190: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65  E command.  .See
21a0: 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f   "[Manual Contro
21b0: 6c 20 4f 66 20 51 75 65 72 79 20 50 6c 61 6e 73  l Of Query Plans
21c0: 20 55 73 69 6e 67 20 53 51 4c 49 54 45 5f 53 54   Using SQLITE_ST
21d0: 41 54 20 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a  AT Tables]" for.
21e0: 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d 61 74  further informat
21f0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53  ion.</p>..<p> ^S
2200: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
2210: 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72  ed by ANALYZE ar
2220: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
2230: 6c 6c 79 20 75 70 64 61 74 65 64 20 61 73 0a 74  lly updated as.t
2240: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
2250: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
2260: 65 73 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  es.  If the cont
2270: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
2280: 61 73 65 0a 63 68 61 6e 67 65 73 20 73 69 67 6e  ase.changes sign
2290: 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66  ificantly, or if
22a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
22b0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
22c0: 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f  en one should.co
22d0: 6e 73 69 64 65 72 20 72 65 72 75 6e 6e 69 6e 67  nsider rerunning
22e0: 20 74 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d   the ANALYZE com
22f0: 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  mand in order to
2300: 20 75 70 64 61 74 65 20 74 68 65 20 73 74 61 74   update the stat
2310: 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  istics.</p>..<p>
2320: 20 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   The query plann
2330: 65 72 20 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e  er loads the con
2340: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
2350: 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 69 6e  istics tables.in
2360: 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74  to memory when t
2370: 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 61  he schema is rea
2380: 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e  d.  ^Hence, when
2390: 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a   an application.
23a0: 63 68 61 6e 67 65 73 20 74 68 65 20 73 74 61 74  changes the stat
23b0: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 64 69  istics tables di
23c0: 72 65 63 74 6c 79 2c 20 53 51 4c 69 74 65 20 77  rectly, SQLite w
23d0: 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74  ill not immediat
23e0: 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68 65 20 63  ely.notice the c
23f0: 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c  hanges. ^An appl
2400: 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63  ication.can forc
2410: 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  e the query plan
2420: 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74 68  ner to reread th
2430: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
2440: 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c  les by running.<
2450: 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65  b>ANALYZE sqlite
2460: 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70  _master</b>. </p
2470: 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23  >..<p> ..<tcl>.#
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
24d0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
24e0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
24f0: 41 54 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76  ATTACH..Recursiv
2500: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
2510: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
2520: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
2530: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
2540: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
2550: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
2560: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
2570: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
2580: 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20 66 69  ction]. .^The fi
2590: 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  lename for the d
25a0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61 74  atabase to be at
25b0: 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76 61  tached is the va
25c0: 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72 65  lue of.the expre
25d0: 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
25e0: 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53 20  s before the AS 
25f0: 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69  keyword..^The fi
2600: 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  lename of the da
2610: 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74  tabase follows t
2620: 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63  he same semantic
2630: 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d  s as the.filenam
2640: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73  e argument to [s
2650: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61  qlite3_open()] a
2660: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  nd [sqlite3_open
2670: 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65 63  _v2()]; the.spec
2680: 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f  ial name "[:memo
2690: 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69 6e  ry:]" results in
26a0: 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64   an [in-memory d
26b0: 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a  atabase] and an.
26c0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65 73  empty string res
26d0: 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74 65  ults in a new te
26e0: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
26f0: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
2700: 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65 20  argument can be 
2710: 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d  a [URI filename]
2720: 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d 65   if URI filename
2730: 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20 65   processing.is e
2740: 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61 74  nable on the dat
2750: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2760: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
2770: 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a 55  ehavior is for.U
2780: 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20  RI filenames to 
2790: 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f 77  be disabled, how
27a0: 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74 20  ever that might 
27b0: 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75  change in a futu
27c0: 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53 51  re release.of SQ
27d0: 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63 61  Lite, so applica
27e0: 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20  tion developers 
27f0: 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20 70  are advised to p
2800: 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  lan accordingly.
2810: 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74 68  ..<p>The name th
2820: 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  at occurs after 
2830: 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 69  the AS keyword i
2840: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2850: 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64 20  e database.used 
2860: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
2870: 4c 69 74 65 2e 0a 5e 54 68 65 20 64 61 74 61 62  Lite..^The datab
2880: 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27  ase-names 'main'
2890: 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66   and .'temp' ref
28a0: 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64  er to the main d
28b0: 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20  atabase and the 
28c0: 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
28d0: 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62  r .temporary tab
28e0: 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20  les.  ^The main 
28f0: 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73  and temp databas
2900: 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74  es cannot be att
2910: 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65  ached or.detache
2920: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61  d.</p>..<p> ^(Ta
2930: 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63  bles in an attac
2940: 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e  hed database can
2950: 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20   be referred to 
2960: 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78  using the syntax
2970: 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   .<i>database-na
2980: 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  me.table-name</i
2990: 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61  >.)^  ^If the na
29a0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
29b0: 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73  is unique.across
29c0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
29d0: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
29e0: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
29f0: 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68  tabases, then th
2a00: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  e.<i>database-na
2a10: 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73  me</i> prefix is
2a20: 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20   not required.  
2a30: 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ^If two or more 
2a40: 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72  tables in.differ
2a50: 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61  ent databases ha
2a60: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
2a70: 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 64 61 74   and the .<i>dat
2a80: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70  abase-name</i> p
2a90: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73 65  refix is not use
2aa0: 64 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65 66  d on a table ref
2ab0: 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68 65  erence, then the
2ac0: 0a 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69 73  .table chosen is
2ad0: 20 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65 20   the one in the 
2ae0: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 77 61  database that wa
2af0: 73 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  s least recently
2b00: 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a   attached.</p>..
2b10: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
2b20: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
2b30: 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61  iple attached da
2b40: 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d  tabases are atom
2b50: 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61  ic,.assuming tha
2b60: 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2b70: 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65  ase is not "[:me
2b80: 6d 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65 20  mory:]" and the 
2b90: 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20  .[journal_mode] 
2ba0: 69 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e  is not [WAL].  ^
2bb0: 28 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74  (If the main.dat
2bc0: 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72  abase is ":memor
2bd0: 79 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a 6f  y:" or if the jo
2be0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41  urnal_mode is WA
2bf0: 4c 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63  L, then .transac
2c00: 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74  tions continue t
2c10: 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68  o be atomic with
2c20: 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75  in each individu
2c30: 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  al.database file
2c40: 2e 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73  . But if the hos
2c50: 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68  t computer crash
2c60: 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  es in the middle
2c70: 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77  .of a [COMMIT] w
2c80: 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65  here two or more
2c90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2ca0: 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d  are updated,.som
2cb0: 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73  e of those files
2cc0: 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63   might get the c
2cd0: 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68  hanges where oth
2ce0: 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e  ers.might not.)^
2cf0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72  .</p>..<p> ^Ther
2d00: 65 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73 65  e is a limit, se
2d10: 74 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65 33  t using [sqlite3
2d20: 5f 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b  _limit()] and .[
2d30: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54  SQLITE_LIMIT_ATT
2d40: 41 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e  ACHED], to the n
2d50: 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73  umber of databas
2d60: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 73  es that can be.s
2d70: 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74  imultaneously at
2d80: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
2d90: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
2da0: 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  ection.</p>..<tc
2db0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
2dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e00: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49  ##.Section {BEGI
2e10: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
2e20: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47  ransaction {*BEG
2e30: 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41  IN COMMIT ROLLBA
2e40: 43 4b 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  CK}..RecursiveBu
2e50: 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69  bbleDiagram begi
2e60: 6e 2d 73 74 6d 74 20 63 6f 6d 6d 69 74 2d 73 74  n-stmt commit-st
2e70: 6d 74 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  mt rollback-stmt
2e80: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f  .</tcl>..<p>.^No
2e90: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2ea0: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2eb0: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2ec0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2ed0: 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74  ..^Any command t
2ee0: 68 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20  hat changes the 
2ef0: 64 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61  database (basica
2f00: 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d  lly, any SQL com
2f10: 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20  mand.other than 
2f20: 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61  [SELECT]) will a
2f30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
2f40: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
2f50: 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61   if.one is not a
2f60: 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65 63 74  lready in effect
2f70: 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c  .  ^Automaticall
2f80: 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73 61  y started transa
2f90: 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69  ctions.are commi
2fa0: 74 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  tted when the la
2fb0: 73 74 20 71 75 65 72 79 20 66 69 6e 69 73 68 65  st query finishe
2fc0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  s..</p>..<p>.^Tr
2fd0: 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
2fe0: 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c  e started manual
2ff0: 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42 45 47  ly using the BEG
3000: 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53  IN.command.  ^(S
3010: 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  uch transactions
3020: 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73 74   usually persist
3030: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
3040: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
3050: 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74  CK command.  But
3060: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
3070: 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41  ill also .ROLLBA
3080: 43 4b 20 69 66 20 74 68 65 20 64 61 74 61 62 61  CK if the databa
3090: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20  se is closed or 
30a0: 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
30b0: 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42  rs.and the ROLLB
30c0: 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACK conflict res
30d0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
30e0: 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  m is specified.)
30f0: 5e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ^.See the docume
3100: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b  ntation on the [
3110: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61  ON CONFLICT].cla
3120: 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  use for addition
3130: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
3140: 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43  bout the ROLLBAC
3150: 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K.conflict resol
3160: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
3170: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20  .</p>..<p>.^END 
3180: 54 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61  TRANSACTION is a
3190: 6e 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d  n alias for COMM
31a0: 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28  IT..</p>..<p> ^(
31b0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 72 65  Transactions cre
31c0: 61 74 65 64 20 75 73 69 6e 67 20 42 45 47 49 4e  ated using BEGIN
31d0: 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74  ...COMMIT do not
31e0: 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65   nest.)^.^For ne
31f0: 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  sted transaction
3200: 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41 56 45  s, use the [SAVE
3210: 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45  POINT] and [RELE
3220: 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54  ASE] commands..T
3230: 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49 4e 54  he "TO SAVEPOINT
3240: 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c   <i>name</i>" cl
3250: 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c  ause of the ROLL
3260: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  BACK command sho
3270: 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61 78  wn.in the syntax
3280: 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 69   diagram above i
3290: 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c  s only applicabl
32a0: 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e to [SAVEPOINT]
32b0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20  .transactions.  
32c0: 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 69  ^An attempt to i
32d0: 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e 20  nvoke the BEGIN 
32e0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61  command within.a
32f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c   transaction wil
3300: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3310: 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73 73  rror, regardless
3320: 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65 20   of whether.the 
3330: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20  transaction was 
3340: 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56 45  started by [SAVE
3350: 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f  POINT] or a prio
3360: 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f  r BEGIN..^The CO
3370: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  MMIT command and
3380: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
3390: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  mmand without th
33a0: 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b  e TO clause.work
33b0: 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41   the same on [SA
33c0: 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63  VEPOINT] transac
33d0: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f  tions as they do
33e0: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
33f0: 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42 45  ns.started by BE
3400: 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  GIN.</p>..<tcl>h
3410: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64  d_fragment immed
3420: 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45  iate {BEGIN IMME
3430: 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45 58  DIATE} {BEGIN EX
3440: 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c  CLUSIVE}</tcl>.<
3450: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
3460: 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64   can be deferred
3470: 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20  , immediate, or 
3480: 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68  exclusive.  .^Th
3490: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
34a0: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
34b0: 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66  s deferred..^Def
34c0: 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74  erred means that
34d0: 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63   no locks are ac
34e0: 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61  quired.on the da
34f0: 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65  tabase until the
3500: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
3510: 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54  st accessed.  ^T
3520: 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65 72  hus with a.defer
3530: 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  red transaction,
3540: 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74 65   the BEGIN state
3550: 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73  ment itself does
3560: 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a   nothing to the.
3570: 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f  filesystem.  ^Lo
3580: 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75  cks.are not acqu
3590: 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  ired until the f
35a0: 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72 69  irst read or wri
35b0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e  te operation.  ^
35c0: 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f  The first read.o
35d0: 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74  peration against
35e0: 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65 61   a database crea
35f0: 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c  tes a [SHARED] l
3600: 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73  ock and the firs
3610: 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  t.write operatio
3620: 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45 53  n creates a [RES
3630: 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e  ERVED] lock.   ^
3640: 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75  Because the acqu
3650: 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73  isition of.locks
3660: 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
3670: 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64  il they are need
3680: 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62  ed, it is possib
3690: 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a  le that another.
36a0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
36b0: 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61  s could create a
36c0: 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61   separate transa
36d0: 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20  ction and write 
36e0: 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  to.the database 
36f0: 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20  after the BEGIN 
3700: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  on the current t
3710: 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74  hread has execut
3720: 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e  ed..^If the tran
3730: 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64  saction is immed
3740: 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45  iate, then [RESE
3750: 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20  RVED] locks.are 
3760: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
3770: 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f  databases as soo
3780: 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20 63  n as the BEGIN c
3790: 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74  ommand is.execut
37a0: 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74  ed, without wait
37b0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61  ing for the.data
37c0: 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e  base to be used.
37d0: 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e    ^After a BEGIN
37e0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20   IMMEDIATE, .no 
37f0: 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65 20  other [database 
3800: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c  connection] will
3810: 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74   be able to writ
3820: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
3830: 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20  e or.do a BEGIN 
3840: 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47  IMMEDIATE or BEG
3850: 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20 5e  IN EXCLUSIVE.  ^
3860: 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  Other processes 
3870: 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20  can continue.to 
3880: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61  read from the da
3890: 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e  tabase, however.
38a0: 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65 20    ^An exclusive 
38b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73  transaction caus
38c0: 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c  es.[EXCLUSIVE] l
38d0: 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69  ocks to be acqui
38e0: 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62  red on all datab
38f0: 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61 20  ases.  ^After a 
3900: 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c  BEGIN.EXCLUSIVE,
3910: 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62   no other [datab
3920: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
3930: 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61 64  except for [read
3940: 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f  _uncommitted].co
3950: 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62  nnections will b
3960: 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74  e able to read t
3970: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
3980: 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74  no other connect
3990: 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63 65  ion without.exce
39a0: 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62  ption will be ab
39b0: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  le to write the 
39c0: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
39d0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
39e0: 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e  s.complete..</p>
39f0: 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69  ..<p>.^(An impli
3a00: 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  cit transaction 
3a10: 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  (a transaction t
3a20: 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20 61  hat is started a
3a30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f  utomatically,.no
3a40: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
3a50: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
3a60: 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20 61  ) is committed a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
3a80: 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69 76  n.the last activ
3a90: 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69  e statement fini
3aa0: 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d 65  shes.  A stateme
3ab0: 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65 6e  nt finishes when
3ac0: 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73 74   its.prepared st
3ad0: 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69  atement is [sqli
3ae0: 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72 65  te3_reset() | re
3af0: 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33  set] or.[sqlite3
3b00: 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69  _finalize() | fi
3b10: 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70  nalized].  An op
3b20: 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  en [sqlite3_blob
3b30: 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72 65  ] used for.incre
3b40: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20  mental BLOB I/O 
3b50: 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e 66  counts as an unf
3b60: 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65 6e  inished statemen
3b70: 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  t.  The [sqlite3
3b80: 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20  _blob].finishes 
3b90: 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c 69  when it is [sqli
3ba0: 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29  te3_blob_close()
3bb0: 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f   | closed].)^.</
3bc0: 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70  p>..<p>.^The exp
3bd0: 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d  licit COMMIT com
3be0: 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64 69  mand runs immedi
3bf0: 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20 74  ately, even if t
3c00: 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e 67  here are.pending
3c10: 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
3c20: 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c  ents.  ^However,
3c30: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70 65   if there are pe
3c40: 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72  nding.write oper
3c50: 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d  ations, the COMM
3c60: 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20  IT command.will 
3c70: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
3c80: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
3c90: 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  BUSY]..</p>..<p>
3ca0: 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  .^An attempt to 
3cb0: 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d  execute COMMIT m
3cc0: 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74  ight also result
3cd0: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
3ce0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
3cf0: 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74  .if an another t
3d00: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
3d10: 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c   has a [shared l
3d20: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
3d30: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
3d40: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
3d50: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
3d60: 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d  ted.  ^When COMM
3d70: 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73  IT fails in this
3d80: 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61  .way, the transa
3d90: 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
3da0: 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d  tive and the COM
3db0: 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69  MIT can be retri
3dc0: 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74  ed later.after t
3dd0: 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61  he reader has ha
3de0: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c  d a chance to cl
3df0: 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ear..</p>..<p>.^
3e00: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c  The ROLLBACK wil
3e10: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3e20: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3e30: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
3e40: 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  .are any pending
3e50: 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68   queries.  ^Both
3e60: 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72   read-only and r
3e70: 65 61 64 2f 77 72 69 74 65 20 71 75 65 72 69 65  ead/write querie
3e80: 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52  s will.cause a R
3e90: 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e  OLLBACK to fail.
3ea0: 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73    A ROLLBACK mus
3eb0: 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  t fail if there 
3ec0: 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64  are pending.read
3ed0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c   operations (unl
3ee0: 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68  ike COMMIT which
3ef0: 20 63 61 6e 20 73 75 63 63 65 65 64 29 20 62 65   can succeed) be
3f00: 63 61 75 73 65 20 62 61 64 20 74 68 69 6e 67 73  cause bad things
3f10: 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20  .will happen if 
3f20: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d  the in-memory im
3f30: 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  age of the datab
3f40: 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f  ase is changed o
3f50: 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e  ut from under.an
3f60: 20 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c   active query..<
3f70: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
3f80: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
3f90: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
3fa0: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
3fb0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
3fc0: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
3fd0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
3fe0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
3ff0: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
4000: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
4010: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
4020: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
4030: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
4040: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
4050: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
4060: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
4070: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
4080: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
4090: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
40a0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
40b0: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
40c0: 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20   that can cause 
40d0: 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c  an automatic rol
40e0: 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f  lback include:</
40f0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53  p>..<ul>.<li> [S
4100: 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74  QLITE_FULL]: dat
4110: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75  abase or disk fu
4120: 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ll.<li> [SQLITE_
4130: 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f  IOERR]: disk I/O
4140: 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c   error.<li> [SQL
4150: 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62  ITE_BUSY]: datab
4160: 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e  ase in use by an
4170: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c  other process.<l
4180: 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  i> [SQLITE_NOMEM
4190: 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  ]: out or memory
41a0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e  .<li> [SQLITE_IN
41b0: 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73  TERRUPT]: proces
41c0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e  sing [sqlite3_in
41d0: 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70  terrupt|interrup
41e0: 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70  ted].     by app
41f0: 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  lication request
4200: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46  .</ul>)^..<p>.^F
4210: 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
4220: 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61  errors, SQLite a
4230: 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20  ttempts to undo 
4240: 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61  just the one sta
4250: 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f  tement.it was wo
4260: 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61  rking on and lea
4270: 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  ve changes from 
4280: 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  prior statements
4290: 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65   within the.same
42a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
42b0: 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  act and continue
42c0: 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61   with the transa
42d0: 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72  ction.  ^However
42e0: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
42f0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
4300: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
4310: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
4320: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
4330: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
4340: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
4350: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
4360: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
4370: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
4380: 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c  ction.  ^An appl
4390: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c  ication can tell
43a0: 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66   which.course of
43b0: 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74   action SQLite t
43c0: 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65  ook by using the
43d0: 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  .[sqlite3_get_au
43e0: 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61  tocommit()] C-la
43f0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
4400: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20  .</p>..<p>It is 
4410: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
4420: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65   applications re
4430: 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72  spond to the err
4440: 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65  ors.listed above
4450: 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69   by explicitly i
4460: 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43  ssuing a ROLLBAC
4470: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20  K command.  ^If 
4480: 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  the .transaction
4490: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
44a0: 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  n rolled back au
44b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74  tomatically.by t
44c0: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
44d0: 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  e, then the ROLL
44e0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  BACK command wil
44f0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65  l fail with an.e
4500: 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72  rror, but no har
4510: 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74  m is caused by t
4520: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74  his.</p>..<p>Fut
4530: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
4540: 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e  SQLite may exten
4550: 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72  d the list of er
4560: 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74  rors which.might
4570: 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63   cause automatic
4580: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
4590: 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76  lback.  Future v
45a0: 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
45b0: 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74  e might change t
45c0: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
45d0: 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61  e.  In particula
45e0: 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65  r, we may.choose
45f0: 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65   to simplify the
4600: 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75   interface in fu
4610: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
4620: 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69   SQLite by.causi
4630: 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62  ng the errors ab
4640: 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20  ove to force an 
4650: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f  unconditional ro
4660: 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63  llback.</p>..<tc
4670: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46c0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45  ##.Section {SAVE
46d0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
46e0: 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45   {SAVEPOINT RELE
46f0: 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ASE}..RecursiveB
4700: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76  ubbleDiagram sav
4710: 65 70 6f 69 6e 74 2d 73 74 6d 74 20 72 65 6c 65  epoint-stmt rele
4720: 61 73 65 2d 73 74 6d 74 20 72 6f 6c 6c 62 61 63  ase-stmt rollbac
4730: 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  k-stmt.</tcl>..<
4740: 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61  p> ^SAVEPOINTs a
4750: 72 65 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63  re a method of c
4760: 72 65 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74  reating transact
4770: 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f  ions, similar to
4780: 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f  .[BEGIN] and [CO
4790: 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68  MMIT], except th
47a0: 61 74 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  at the SAVEPOINT
47b0: 20 61 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d   and RELEASE com
47c0: 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20  mands.are named 
47d0: 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65  and may be neste
47e0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  d.</p>..<p> ^The
47f0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
4800: 6e 64 20 73 74 61 72 74 73 20 61 20 6e 65 77 20  nd starts a new 
4810: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
4820: 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72   a name..^The tr
4830: 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20  ansaction names 
4840: 6e 65 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71  need not be uniq
4850: 75 65 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e  ue..^(A SAVEPOIN
4860: 54 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  T can be started
4870: 20 65 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f   either within o
4880: 72 20 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b  r outside of.a [
4890: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
48a0: 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53  ].)^  ^(When a S
48b0: 41 56 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20  AVEPOINT is the 
48c0: 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70  outer-most savep
48d0: 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e  oint.and it is n
48e0: 6f 74 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47  ot within a [BEG
48f0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74  IN]...[COMMIT] t
4900: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
4910: 20 69 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20   is the.same as 
4920: 42 45 47 49 4e 20 44 45 46 45 52 52 45 44 20 54  BEGIN DEFERRED T
4930: 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70  RANSACTION.)^</p
4940: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42  >..<p>^The ROLLB
4950: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
4960: 65 76 65 72 74 73 20 74 68 65 20 73 74 61 74 65  everts the state
4970: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
4980: 20 62 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74   back to what.it
4990: 20 77 61 73 20 6a 75 73 74 20 61 66 74 65 72 20   was just after 
49a0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
49b0: 67 20 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e  g SAVEPOINT.  ^N
49c0: 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20  ote that unlike 
49d0: 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c  that.plain [ROLL
49e0: 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77  BACK] command (w
49f0: 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65  ithout the TO ke
4a00: 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42  yword) the ROLLB
4a10: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64  ACK TO command.d
4a20: 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74  oes not cancel t
4a30: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
4a40: 20 5e 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e   ^Instead of can
4a50: 63 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e  celling the tran
4a60: 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c  saction,.the ROL
4a70: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
4a80: 20 72 65 73 74 61 72 74 73 20 74 68 65 20 74 72   restarts the tr
4a90: 61 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20  ansaction again 
4aa0: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
4ab0: 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69  ..^All interveni
4ac0: 6e 67 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72  ng SAVEPOINTs ar
4ad0: 65 20 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65  e canceled, howe
4ae0: 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ver.</p>..<p>^Th
4af0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4b00: 64 20 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d  d is like a [COM
4b10: 4d 49 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50  MIT] for a SAVEP
4b20: 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41  OINT..^The RELEA
4b30: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
4b40: 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  s all savepoints
4b50: 20 62 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63   back to and inc
4b60: 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74  luding the .most
4b70: 20 72 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e   recent savepoin
4b80: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
4b90: 67 20 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d  g name to be rem
4ba0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74  oved from the .t
4bb0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4bc0: 2e 20 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20  .  ^The RELEASE 
4bd0: 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  of an inner tran
4be0: 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74  saction.does not
4bf0: 20 63 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67   cause any chang
4c00: 65 73 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e  es to be written
4c10: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
4c20: 20 66 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79   file; it merely
4c30: 0a 72 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69  .removes savepoi
4c40: 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61  nts from the tra
4c50: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73  nsaction stack s
4c60: 75 63 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e  uch that it is.n
4c70: 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c  o longer possibl
4c80: 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  e to ROLLBACK TO
4c90: 20 74 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74   those savepoint
4ca0: 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45  s..^If a RELEASE
4cb0: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
4cc0: 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  s the outermost 
4cd0: 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68  savepoint, so.th
4ce0: 61 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  at the transacti
4cf0: 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73  on stack becomes
4d00: 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c   empty, then REL
4d10: 45 41 53 45 20 69 73 20 74 68 65 20 73 61 6d 65  EASE is the same
4d20: 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54  .as [COMMIT]..^T
4d30: 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d  he [COMMIT] comm
4d40: 61 6e 64 20 6d 61 79 20 62 65 20 75 73 65 64 20  and may be used 
4d50: 74 6f 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73  to release all s
4d60: 61 76 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f  avepoints and.co
4d70: 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63  mmit the transac
4d80: 74 69 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65  tion even if the
4d90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
4da0: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72   originally star
4db0: 74 65 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49  ted.by a SAVEPOI
4dc0: 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65  NT command inste
4dd0: 61 64 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20  ad of a [BEGIN] 
4de0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
4df0: 3e 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69  >^If the savepoi
4e00: 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c  nt-name in a REL
4e10: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  EASE command doe
4e20: 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a  s not match any.
4e30: 73 61 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e  savepoint curren
4e40: 74 6c 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73  tly in the trans
4e50: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68  action stack, th
4e60: 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73  en no savepoints
4e70: 20 61 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74   are.released, t
4e80: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 75  he database is u
4e90: 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68  nchanged, and th
4ea0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4eb0: 64 20 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72  d returns.an err
4ec0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74  or.</p>..<p>^Not
4ed0: 65 20 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20  e that an inner 
4ee0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68  transaction migh
4ef0: 74 20 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20  t commit (using 
4f00: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
4f10: 61 6e 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61  and).but then la
4f20: 74 65 72 20 68 61 76 65 20 69 74 73 20 77 6f 72  ter have its wor
4f30: 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f  k undone by a RO
4f40: 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74  LLBACK in an out
4f50: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  er transaction..
4f60: 5e 41 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  ^A power failure
4f70: 20 6f 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73   or program cras
4f80: 68 20 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69  h or OS crash wi
4f90: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 6f 75 74  ll cause the out
4fa0: 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74  er-most.transact
4fb0: 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c  ion to rollback,
4fc0: 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61   undoing all cha
4fd0: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
4fe0: 63 63 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74  ccurred within.t
4ff0: 68 61 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61  hat outer transa
5000: 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e  ction, even chan
5010: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 73 75  ges that have su
5020: 70 70 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63  pposedly been "c
5030: 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65  ommitted".by the
5040: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
5050: 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e  .  ^Content is n
5060: 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d  ot actually comm
5070: 69 74 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73  itted on the dis
5080: 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74  k .until the out
5090: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
50a0: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
50b0: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 65  .<p>There are se
50c0: 76 65 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68  veral ways of th
50d0: 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65  inking about the
50e0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
50f0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
5100: 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20  <p>.Some people 
5110: 76 69 65 77 20 52 45 4c 45 41 53 45 20 61 73 20  view RELEASE as 
5120: 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  the equivalent o
5130: 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53  f COMMIT for a S
5140: 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69  AVEPOINT..This i
5150: 73 20 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20  s an acceptable 
5160: 70 6f 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73  point of view as
5170: 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d   long as one rem
5180: 65 6d 62 65 72 73 20 74 68 61 74 20 74 68 65 0a  embers that the.
5190: 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65  changes committe
51a0: 64 20 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72  d by an inner tr
51b0: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
51c0: 6c 61 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20  later be undone 
51d0: 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e  by a.rollback in
51e0: 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61   an outer transa
51f0: 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ction.</p></li>.
5200: 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72  .<li><p>.Another
5210: 20 76 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45   view of RELEASE
5220: 20 69 73 20 74 68 61 74 20 69 74 20 6d 65 72 67   is that it merg
5230: 65 73 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73  es a named trans
5240: 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a  action into its.
5250: 70 61 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  parent transacti
5260: 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20  on, so that the 
5270: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5280: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5290: 20 62 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65   become.the same
52a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41   transaction.  A
52b0: 66 74 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68  fter RELEASE, th
52c0: 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  e named transact
52d0: 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65  ion and its pare
52e0: 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f  nt.will commit o
52f0: 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74  r rollback toget
5300: 68 65 72 2c 20 77 68 61 74 65 76 65 72 20 74 68  her, whatever th
5310: 65 69 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e  eir fate may be.
5320: 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
5330: 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f  <p>.One can also
5340: 20 74 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f   think of savepo
5350: 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20  ints as."marks" 
5360: 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  in the transacti
5370: 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e  on timeline.  In
5380: 20 74 68 69 73 20 76 69 65 77 2c 20 74 68 65 20   this view, the 
5390: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
53a0: 64 0a 63 72 65 61 74 65 73 20 61 20 6e 65 77 20  d.creates a new 
53b0: 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41  mark, the ROLLBA
53c0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
53d0: 77 69 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69  winds the timeli
53e0: 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69  ne back.to a poi
53f0: 6e 74 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  nt just after th
5400: 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e  e named mark, an
5410: 64 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  d the RELEASE co
5420: 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72  mmand.erases mar
5430: 6b 73 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65  ks from the time
5440: 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74  line without act
5450: 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79  ually making any
5460: 0a 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20  .changes to the 
5470: 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f  database..</p></
5480: 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33  li>.</ul>....<h3
5490: 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73  >Transaction Nes
54a0: 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a  ting Rules</h3>.
54b0: 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72  .<p>^The last tr
54c0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65  ansaction starte
54d0: 64 20 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69  d will be the fi
54e0: 72 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  rst.transaction 
54f0: 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c  committed or rol
5500: 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c  led back.</p>..<
5510: 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63  p>^The [BEGIN] c
5520: 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b  ommand only work
5530: 73 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  s if the transac
5540: 74 69 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d  tion stack is em
5550: 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72  pty, or.in other
5560: 20 77 6f 72 64 73 20 69 66 20 74 68 65 72 65 20   words if there 
5570: 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74  are no pending t
5580: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49  ransactions.  ^I
5590: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
55a0: 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65  n.stack is not e
55b0: 6d 70 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42  mpty when the [B
55c0: 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  EGIN] command is
55d0: 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74   invoked, then t
55e0: 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73  he command.fails
55f0: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
5600: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f  /p>..<p>^The [CO
5610: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f  MMIT] command co
5620: 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61  mmits all outsta
5630: 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  nding transactio
5640: 6e 73 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68  ns and leaves.th
5650: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
5660: 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a  ack empty.</p>..
5670: 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20  <p>^The RELEASE 
5680: 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77  command starts w
5690: 69 74 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63  ith the most rec
56a0: 65 6e 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20  ent addition to 
56b0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
56c0: 73 74 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73  stack and releas
56d0: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  es savepoints ba
56e0: 63 6b 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65  ckwards .in time
56f0: 20 75 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73   until it releas
5700: 65 73 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77  es a savepoint w
5710: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73  ith a matching s
5720: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e  avepoint-name..^
5730: 50 72 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73  Prior savepoints
5740: 2c 20 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74  , even savepoint
5750: 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20  s with matching 
5760: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c  savepoint-names,
5770: 20 61 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a   are.unchanged..
5780: 5e 49 66 20 74 68 65 20 52 45 4c 45 41 53 45 20  ^If the RELEASE 
5790: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74  command causes t
57a0: 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he.transaction s
57b0: 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65  tack to become e
57c0: 6d 70 74 79 20 28 69 66 20 74 68 65 20 52 45 4c  mpty (if the REL
57d0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c  EASE command rel
57e0: 65 61 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d  eases the.outerm
57f0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
5800: 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20  from the stack) 
5810: 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  then the transac
5820: 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70  tion commits.</p
5830: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c  >..<p>^The [ROLL
5840: 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  BACK] command wi
5850: 74 68 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73  thout a TO claus
5860: 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c  e rolls backs al
5870: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  l transactions.a
5880: 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 74 72  nd leaves the tr
5890: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
58a0: 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  empty.</p>..<p>^
58b0: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  The ROLLBACK com
58c0: 6d 61 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63  mand with a TO c
58d0: 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b  lause rolls back
58e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f   transactions go
58f0: 69 6e 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e  ing.backwards in
5900: 20 74 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68   time back to th
5910: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41  e most recent SA
5920: 56 45 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d  VEPOINT with a m
5930: 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54  atching name..^T
5940: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74  he SAVEPOINT wit
5950: 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e  h the matching n
5960: 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74  ame remains on t
5970: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
5980: 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61  tack,.but all da
5990: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 74  tabase changes t
59a0: 68 61 74 20 6f 63 63 75 72 72 65 64 20 61 66 74  hat occurred aft
59b0: 65 72 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e  er that SAVEPOIN
59c0: 54 20 77 61 73 20 63 72 65 61 74 65 64 0a 61 72  T was created.ar
59d0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
59e0: 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ^If the savepoin
59f0: 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c  t-name in a ROLL
5a00: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
5a10: 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61  does not.match a
5a20: 6e 79 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20  ny SAVEPOINT on 
5a30: 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  the stack, then 
5a40: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
5a50: 6d 61 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20  mand fails with 
5a60: 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61  an.error and lea
5a70: 76 65 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  ves the state of
5a80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
5a90: 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  changed.</p>..<t
5aa0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
5ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5af0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d  ###.Section comm
5b00: 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d  ent comment {com
5b10: 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a  ment *comments}.
5b20: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5b30: 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d  Diagram comment-
5b40: 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c  syntax.</tcl>..<
5b50: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20  p>^Comments are 
5b60: 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  not SQL commands
5b70: 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20  , but can occur 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 20  within the text 
5b90: 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70  of.SQL queries p
5ba0: 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65  assed to [sqlite
5bb0: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20  3_prepare_v2()] 
5bc0: 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65  and related inte
5bd0: 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74  rfaces..^Comment
5be0: 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73  s are treated as
5bf0: 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74   whitespace by t
5c00: 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d  he parser..^Comm
5c10: 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61  ents can begin a
5c20: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
5c30: 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64  ce .can be found
5c40: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  , including insi
5c50: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  de expressions t
5c60: 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  hat span multipl
5c70: 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  e lines..</p>..<
5c80: 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20  p>^SQL comments 
5c90: 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63  begin with two c
5ca0: 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20 63  onsecutive "-" c
5cb0: 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49 49  haracters (ASCII
5cc0: 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e   0x2d).and exten
5cd0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
5ce0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e  uding the next n
5cf0: 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72  ewline character
5d00: 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72   (ASCII 0x0a).or
5d10: 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f   until the end o
5d20: 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76  f input, whichev
5d30: 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c  er comes first.<
5d40: 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65  /p>..<p>^C-style
5d50: 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a   comments begin.
5d60: 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78  with "/*" and ex
5d70: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
5d80: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
5d90: 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72  t "*/" character
5da0: 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74   pair.or until t
5db0: 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c  he end of input,
5dc0: 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73   whichever comes
5dd0: 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c   first.  ^C-styl
5de0: 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73  e comments.can s
5df0: 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e  pan multiple lin
5e00: 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f  es. </p>..<p>^Co
5e10: 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61  mments can appea
5e20: 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  r anywhere white
5e30: 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c  space can occur,
5e40: 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64  .including insid
5e50: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e  e expressions an
5e60: 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  d in the middle 
5e70: 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61  of other SQL sta
5e80: 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e  tements..^Commen
5e90: 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a  ts do not nest..
5ea0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
5f00: 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45  ion {CREATE INDE
5f10: 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b  X} createindex {
5f20: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a  {CREATE INDEX}}.
5f30: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5f40: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 69  Diagram create-i
5f50: 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
5f60: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
5f70: 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63   INDEX command c
5f80: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b  onsists of the k
5f90: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
5fa0: 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a  INDEX" followed.
5fb0: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
5fc0: 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68  he new index, th
5fd0: 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20  e keyword "ON", 
5fe0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72  the name of a pr
5ff0: 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64  eviously.created
6000: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74   table that is t
6010: 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e  o be indexed, an
6020: 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  d a parenthesize
6030: 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20  d list of names 
6040: 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of.columns in th
6050: 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
6060: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e   used for the in
6070: 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20  dex key..If the 
6080: 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63  optional WHERE c
6090: 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65  lause is include
60a0: 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65  d, then the inde
60b0: 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c  x is a "[partial
60c0: 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a   index]"..</p>..
60d0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
60e0: 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63   {descidx} {desc
60f0: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20  ending indices} 
6100: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
6110: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  x}</tcl>.<p>^Eac
6120: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  h column name ca
6130: 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
6140: 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41 53 43   one of the "ASC
6150: 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77  " or "DESC" keyw
6160: 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61 74 65  ords.to indicate
6170: 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54   sort order.  ^T
6180: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61  he sort order ma
6190: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
61a0: 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e  ignored dependin
61b0: 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  g.on the databas
61c0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61  e file format, a
61d0: 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72  nd in particular
61e0: 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72   the [schema for
61f0: 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68  mat number]..^Th
6200: 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d  e "legacy" schem
6210: 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e  a format (1) ign
6220: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
6230: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73  order.  ^The des
6240: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63  cending index sc
6250: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20  hema format (4) 
6260: 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74  takes index sort
6270: 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f   order.into acco
6280: 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69  unt.  Only versi
6290: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e  ons of SQLite 3.
62a0: 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20 61 72  3.0 and later ar
62b0: 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73  e able to unders
62c0: 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e 64  tand.the descend
62d0: 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61 74  ing index format
62e0: 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  . For compatibil
62f0: 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20  ity, version of 
6300: 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20 33  SQLite between 3
6310: 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75  .3.0.and 3.7.9 u
6320: 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73 63  se the legacy sc
6330: 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20 64  hema format by d
6340: 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65 77  efault.  The new
6350: 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  er schema format
6360: 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66 61   is.used by defa
6370: 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20 33  ult in version 3
6380: 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65 72 2e  .7.10 and later.
6390: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
63a0: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
63b0: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
63c0: 20 63 68 61 6e 67 65 20 73 65 74 20 74 68 65 20   change set the 
63d0: 73 70 65 63 69 66 69 63 0a 62 65 68 61 76 69 6f  specific.behavio
63e0: 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73 69 6f  r for any versio
63f0: 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  n of SQLite.</p>
6400: 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  ..<p>^The COLLAT
6410: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
6420: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
6430: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64  ch column name d
6440: 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69  efines a.collati
6450: 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  ng sequence used
6460: 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65   for text entrie
6470: 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  s in that column
6480: 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
6490: 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63  ollating.sequenc
64a0: 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69  e is the collati
64b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66 69  ng sequence defi
64c0: 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  ned for that col
64d0: 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  umn in the.[CREA
64e0: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
64f0: 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20  ent.  ^Or if no 
6500: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6510: 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65 20  ce is otherwise 
6520: 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69  defined,.the bui
6530: 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c  lt-in BINARY col
6540: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6550: 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  is used.</p>..<p
6560: 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72  >There are no ar
6570: 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20 6f  bitrary limits o
6580: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
6590: 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61 6e  indices that can
65a0: 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f 20   be.attached to 
65b0: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20  a single table. 
65c0: 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   ^(The number of
65d0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69   columns in an i
65e0: 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65 64  ndex is .limited
65f0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 65   to the value se
6600: 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c 69  t by.[sqlite3_li
6610: 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49 4d  mit]([SQLITE_LIM
6620: 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e  IT_COLUMN],...).
6630: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  )^</p>..<tcl>hd_
6640: 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 69  fragment uniquei
6650: 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65 78  dx {unique index
6660: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74  }</tcl>.<p>^If t
6670: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
6680: 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65  d appears betwee
6690: 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44  n CREATE and IND
66a0: 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  EX then duplicat
66b0: 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e.index entries 
66c0: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  are not allowed.
66d0: 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20 74    ^Any attempt t
66e0: 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69  o insert a dupli
66f0: 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20  cate entry.will 
6700: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72  result in an err
6710: 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70 75  or.  ^For the pu
6720: 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65  rposes of unique
6730: 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55   indices, all NU
6740: 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f  LL values.are co
6750: 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66 66  nsidered to diff
6760: 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f  erent from all o
6770: 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
6780: 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e   and are thus un
6790: 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e  ique..This is on
67a0: 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73  e of the two pos
67b0: 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61  sible interpreta
67c0: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c  tions of the SQL
67d0: 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68  -92 standard.(th
67e0: 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68  e language in th
67f0: 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d  e standard is am
6800: 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20  biguous) and is 
6810: 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  the interpretati
6820: 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50  on.followed by P
6830: 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c  ostgreSQL, MySQL
6840: 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20  , Firebird, and 
6850: 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69  Oracle.  Informi
6860: 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20  x and.Microsoft 
6870: 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f  SQL Server follo
6880: 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65  w the other inte
6890: 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
68a0: 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a  e standard.</p>.
68b0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
68c0: 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53  onal IF NOT EXIS
68d0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
68e0: 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72  sent and another
68f0: 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20   index.with the 
6900: 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64  same name alread
6910: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
6920: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
6930: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
6940: 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72  ..<p>^Indexes ar
6950: 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74  e removed with t
6960: 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20  he [DROP INDEX] 
6970: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c  command.</p>...<
6980: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
6990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69d0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
69e0: 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  ATE TABLE} {crea
69f0: 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54  tetable} {{CREAT
6a00: 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  E TABLE}}..Recur
6a10: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
6a20: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6a30: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
6a40: 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  he "CREATE TABLE
6a50: 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  " command is use
6a60: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  d to create a ne
6a70: 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51  w table in an SQ
6a80: 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20  Lite .database. 
6a90: 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  A CREATE TABLE c
6aa0: 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73  ommand specifies
6ab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
6ac0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68 65  ttributes of the
6ad0: 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c  .new table:..<ul
6ae0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e  >.  <li><p>The n
6af0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ame of the new t
6b00: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
6b10: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   The database in
6b20: 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 74   which the new t
6b30: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
6b40: 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a   Tables may be .
6b50: 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69 6e        created in
6b60: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
6b70: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
6b80: 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79  abase, or in any
6b90: 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20 20   attached.      
6ba0: 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69  database...  <li
6bb0: 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ><p> The name of
6bc0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6bd0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6be0: 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72  i><p> The declar
6bf0: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
6c00: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61  column in the ta
6c10: 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ble...  <li><p> 
6c20: 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  A default value 
6c30: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  or expression fo
6c40: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
6c50: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
6c60: 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74  li><p> A default
6c70: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
6c80: 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68 20  nce to use with 
6c90: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20  each column...  
6ca0: 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c  <li><p> Optional
6cb0: 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ly, a PRIMARY KE
6cc0: 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  Y for the table.
6cd0: 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c   Both single col
6ce0: 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63  umn and.       c
6cf0: 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70  omposite (multip
6d00: 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61  le column) prima
6d10: 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70 70  ry keys are supp
6d20: 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  orted...  <li><p
6d30: 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63  > A set of SQL c
6d40: 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65  onstraints for e
6d50: 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74  ach table. SQLit
6d60: 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55  e supports UNIQU
6d70: 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55  E, NOT.       NU
6d80: 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f  LL, CHECK and FO
6d90: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
6da0: 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  aints...  <li><p
6db0: 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74 61  > Whether the ta
6dc0: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
6dd0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
6de0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  </ul>..<p>Every 
6df0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
6e00: 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63  tement must spec
6e10: 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74  ify a name for t
6e20: 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20  he new table..  
6e30: 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68  ^(Table names th
6e40: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 73  at begin with "s
6e50: 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73 65  qlite_" are rese
6e60: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
6e70: 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61  l use. It.  is a
6e80: 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d  n error to attem
6e90: 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  pt to create a t
6ea0: 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65  able with a name
6eb0: 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69 74   that starts wit
6ec0: 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e  h.  "sqlite_".)^
6ed0: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
6ee0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
6ef0: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
6f00: 69 74 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  it must be eithe
6f10: 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65  r "main", .  "te
6f20: 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65  mp", or the name
6f30: 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48 20 44   of an [ATTACH D
6f40: 41 54 41 42 41 53 45 7c 61 74 74 61 63 68 65 64  ATABASE|attached
6f50: 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20   database]. ^In 
6f60: 74 68 69 73 20 63 61 73 65 0a 20 20 74 68 65 20  this case.  the 
6f70: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65  new table is cre
6f80: 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61 6d 65  ated in the name
6f90: 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 66 20  d database. ^If 
6fa0: 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54  the "TEMP" or "T
6fb0: 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65 79 77  EMPORARY".  keyw
6fc0: 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74 77 65  ord occurs betwe
6fd0: 65 6e 20 74 68 65 20 22 43 52 45 41 54 45 22 20  en the "CREATE" 
6fe0: 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e  and "TABLE" then
6ff0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
7000: 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e 20 74  s.  created in t
7010: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
7020: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7030: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7040: 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74 61 62  h a .  &lt;datab
7050: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64  ase-name&gt; and
7060: 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d   the TEMP or TEM
7070: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20  PORARY keyword, 
7080: 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26 6c 74  unless the.  &lt
7090: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
70a0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49  t; is "temp". ^I
70b0: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  f no database na
70c0: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
70d0: 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50 20 6b  and the.  TEMP k
70e0: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
70f0: 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74  esent then the t
7100: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
7110: 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20 64 61  in the main.  da
7120: 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e  tabase...<p>.  ^
7130: 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e  It is usually an
7140: 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70   error to attemp
7150: 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  t to create a ne
7160: 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64 61 74  w table in a dat
7170: 61 62 61 73 65 20 74 68 61 74 0a 20 20 61 6c 72  abase that.  alr
7180: 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20  eady contains a 
7190: 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20  table, index or 
71a0: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
71b0: 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c   name. ^However,
71c0: 20 69 66 20 74 68 65 0a 20 20 22 49 46 20 4e 4f   if the.  "IF NO
71d0: 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65  T EXISTS" clause
71e0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
71f0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45   part of the CRE
7200: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
7210: 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61 62 6c  ent and.  a tabl
7220: 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65  e or view of the
7230: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
7240: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 20 43  dy exists, the C
7250: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d  REATE TABLE comm
7260: 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68 61 73  and.  simply has
7270: 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e 64 20   no effect (and 
7280: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
7290: 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 20 5e   is returned). ^
72a0: 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c  An error is stil
72b0: 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69 66 20  l.  returned if 
72c0: 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74  the table cannot
72d0: 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63 61   be created beca
72e0: 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69  use of an existi
72f0: 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a  ng index, even .
7300: 20 20 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54    if the "IF NOT
7310: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
7320: 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  is specified...<
7330: 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20  p>^It is not an 
7340: 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74 65 20  error to create 
7350: 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 61 73  a table that has
7360: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
7370: 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69 6e 67  s an .  existing
7380: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
7390: 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e  |trigger]...<p>^
73a0: 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76  Tables are remov
73b0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52  ed using the [DR
73c0: 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  OP TABLE] statem
73d0: 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e  ent.  </p>..<h3>
73e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
73f0: 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65   AS SELECT State
7400: 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ments</h3>..<p>^
7410: 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  (A "CREATE TABLE
7420: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20   ... AS SELECT" 
7430: 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65  statement create
7440: 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20  s and populates 
7450: 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65  a database.table
7460: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
7470: 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
7480: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
7490: 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74  (The table has t
74a0: 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f  he same.number o
74b0: 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
74c0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
74d0: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
74e0: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
74f0: 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of.each column 
7500: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
7510: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
7520: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
7530: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
7540: 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t.set of the SEL
7550: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
7560: 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20   ^(The declared 
7570: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
7580: 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  umn is determine
7590: 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73  d.by the [expres
75a0: 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f  sion affinity] o
75b0: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
75c0: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ing expression i
75d0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
75e0: 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  .of the SELECT s
75f0: 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c  tatement, as fol
7600: 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e  lows:.</p>..<cen
7610: 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ter><table borde
7620: 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45  r=1>.  <tr><th>E
7630: 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69  xpression Affini
7640: 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20  ty   <th>Column 
7650: 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20  Declared Type.  
7660: 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20  <tr><td>TEXT    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
7680: 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c  d>"TEXT".  <tr><
7690: 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20  td>NUMERIC      
76a0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55           <td>"NU
76b0: 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54  M".  <tr><td>INT
76c0: 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20  EGER            
76d0: 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c     <td>"INT".  <
76e0: 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20  tr><td>REAL     
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
7700: 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74  >"REAL".  <tr><t
7710: 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20  d>NONE          
7720: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28          <td>"" (
7730: 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f  empty string).</
7740: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
7750: 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20  ^..<p>^(A table 
7760: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
7770: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61  EATE TABLE AS ha
7780: 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  s no PRIMARY KEY
7790: 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69   and no.constrai
77a0: 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e  nts of any kind.
77b0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
77c0: 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ue of each colum
77d0: 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64  n is NULL. The d
77e0: 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e  efault.collation
77f0: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
7800: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
7810: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49   new table is BI
7820: 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62  NARY.)^..<p>^Tab
7830: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
7840: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
7850: 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  S are initially 
7860: 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
7870: 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20  he.rows of data 
7880: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
7890: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
78a0: 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69  . ^Rows are assi
78b0: 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  gned contiguousl
78c0: 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77  y.ascending [row
78d0: 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72  id] values, star
78e0: 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20  ting with 1, in 
78f0: 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72  the [order by|or
7900: 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61  der] that they.a
7910: 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
7920: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7930: 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ent...<tcl>hd_fr
7940: 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c  agment {tablecol
7950: 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  def} {column def
7960: 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e  inition} {column
7970: 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74   definitions}</t
7980: 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44  cl>.<h3>Column D
7990: 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a  efinitions</h3>.
79a0: 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73  .<p>Unless it is
79b0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
79c0: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74  ... AS SELECT st
79d0: 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54  atement, a CREAT
79e0: 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73  E TABLE includes
79f0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f  .one or more [co
7a00: 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20  lumn-def|column 
7a10: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70  definitions], op
7a20: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7a30: 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b  d by a list of.[
7a40: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
7a50: 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  |table constrain
7a60: 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d  ts].  Each colum
7a70: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e  n definition con
7a80: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  sists of the.nam
7a90: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
7aa0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
7ab0: 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c  owed by the decl
7ac0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ared type of the
7ad0: 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e   column,.then on
7ae0: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
7af0: 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  al [column-const
7b00: 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e  raint|column con
7b10: 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75  straints]. Inclu
7b20: 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e  ded in.the defin
7b30: 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e  ition of "column
7b40: 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f   constraints" fo
7b50: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
7b60: 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73  f the previous.s
7b70: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65  tatement are the
7b80: 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46   COLLATE and DEF
7b90: 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76  AULT clauses, ev
7ba0: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20  en though these 
7bb0: 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63  are not really.c
7bc0: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68  onstraints in th
7bd0: 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65  e sense that the
7be0: 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63  y do not restric
7bf0: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
7c00: 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f  the table may.co
7c10: 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72  ntain. The other
7c20: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e   constraints - N
7c30: 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20  OT NULL, CHECK, 
7c40: 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20  UNIQUE, PRIMARY 
7c50: 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20  KEY and.FOREIGN 
7c60: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
7c70: 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63  - impose restric
7c80: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62  tions on the tab
7c90: 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72  les data, and ar
7ca0: 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20  e are.described 
7cb0: 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e  under [constrain
7cc0: 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  ts|SQL Data Cons
7cd0: 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a  traints] below..
7ce0: 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74  .<p>^Unlike most
7cf0: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20   SQL databases, 
7d00: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
7d10: 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70  restrict the typ
7d20: 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d  e of data that.m
7d30: 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69  ay be inserted i
7d40: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73  nto a column bas
7d50: 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed on the column
7d60: 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e  s declared type.
7d70: 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65   Instead,.SQLite
7d80: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
7d90: 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63  yping]. ^The dec
7da0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20  lared type of a 
7db0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
7dc0: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o.determine the 
7dd0: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
7de0: 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a  e column only...
7df0: 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20 63  <p>The DEFAULT c
7e00: 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
7e10: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
7e20: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 63  to use for the c
7e30: 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75  olumn if no.valu
7e40: 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79 20  e is explicitly 
7e50: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
7e60: 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67 20  user when doing 
7e70: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66  an [INSERT]. ^If
7e80: 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78 70   there.is no exp
7e90: 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c  licit DEFAULT cl
7ea0: 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
7eb0: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
7ec0: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a  tion, then the .
7ed0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
7ee0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e   the column is N
7ef0: 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63  ULL. ^(An explic
7f00: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7f10: 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74 68  e may specify.th
7f20: 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  at the default v
7f30: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20  alue is NULL, a 
7f40: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c  string constant,
7f50: 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74   a blob constant
7f60: 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65  , a.signed-numbe
7f70: 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61  r, or any consta
7f80: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65 6e  nt expression en
7f90: 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
7fa0: 68 65 73 65 73 2e 20 41 6e 20 65 78 70 6c 69 63  heses. An explic
7fb0: 69 74 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  it.default value
7fc0: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65   may also be one
7fd0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
7fe0: 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74  case-independent
7ff0: 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52 45 4e   keywords.CURREN
8000: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
8010: 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f  DATE or CURRENT_
8020: 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f  TIMESTAMP.)^ ^Fo
8030: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
8040: 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20 63 6c  f the.DEFAULT cl
8050: 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65 73 73  ause, an express
8060: 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
8070: 64 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69  d constant provi
8080: 64 65 64 20 74 68 61 74 20 69 74 20 64 6f 65 73  ded that it does
8090: 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79  .not contain any
80a0: 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72 20   sub-queries or 
80b0: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  string constants
80c0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75   enclosed in dou
80d0: 62 6c 65 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e  ble quotes...<p>
80e0: 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f  ^(Each time a ro
80f0: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
8100: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79 20  to the table by 
8110: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
8120: 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e  ent that .does n
8130: 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69  ot provide expli
8140: 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61  cit values for a
8150: 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  ll table columns
8160: 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72   the values stor
8170: 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f  ed in.the new ro
8180: 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64  w are determined
8190: 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75 6c   by their defaul
81a0: 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66  t values)^, as f
81b0: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  ollows:..<ul>.  
81c0: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
81d0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
81e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  the column is a 
81f0: 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74  constant NULL, t
8200: 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20  ext, blob or.   
8210: 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76   signed-number v
8220: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20  alue, then that 
8230: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64 69  value is used di
8240: 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65  rectly in the ne
8250: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
8260: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
8270: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
8280: 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
8290: 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73  ion in parenthes
82a0: 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  es, then.    the
82b0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
82c0: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
82d0: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
82e0: 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73 75  ted and the resu
82f0: 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20  lts.    used in 
8300: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
8310: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
8320: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
8330: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52  a column is CURR
8340: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
8350: 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55  T_DATE or.    CU
8360: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
8370: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
8380: 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20  used in the new 
8390: 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20 20  row is a text.  
83a0: 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
83b0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
83c0: 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  UTC date and/or 
83d0: 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45  time. ^For CURRE
83e0: 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20  NT_TIME, the.   
83f0: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76   format of the v
8400: 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53  alue is "HH:MM:S
8410: 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  S". ^For CURRENT
8420: 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d  _DATE, "YYYY-MM-
8430: 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f  DD". ^The.    fo
8440: 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54  rmat for CURRENT
8450: 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59  _TIMESTAMP is "Y
8460: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
8470: 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  SS"..</ul>..<p>^
8480: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
8490: 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 65  se specifies the
84a0: 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c   name of a [coll
84b0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20  ating sequence] 
84c0: 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64 65  to use as.the de
84d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
84e0: 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65  sequence for the
84f0: 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20   column. ^If no 
8500: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
8510: 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
8520: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
8530: 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b  on sequence is [
8540: 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68  BINARY]...<p>^Th
8550: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
8560: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69  mns in a table i
8570: 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65  s limited by the
8580: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c   [SQLITE_MAX_COL
8590: 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d  UMN].compile-tim
85a0: 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20  e parameter. ^A 
85b0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20  single row of a 
85c0: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f  table cannot sto
85d0: 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51  re more than.[SQ
85e0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d  LITE_MAX_LENGTH]
85f0: 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20   bytes of data. 
8600: 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c  ^Both of these l
8610: 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77  imits can be low
8620: 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20  ered at.runtime 
8630: 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
8640: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b  e3_limit()] C/C+
8650: 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  + interface.</p>
8660: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
8670: 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  nt {constraints}
8680: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f   {constraints}</
8690: 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74  tcl>.<h3>SQL Dat
86a0: 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68  a Constraints</h
86b0: 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  3>..<tcl>hd_frag
86c0: 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73  ment primkeycons
86d0: 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  t {PRIMARY KEY} 
86e0: 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e  {PRIMARY KEY con
86f0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
8700: 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e  p>^Each table in
8710: 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65   SQLite may have
8720: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e   at most one <b>
8730: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e  PRIMARY KEY</b>.
8740: 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f   ^If the.  keywo
8750: 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rds PRIMARY KEY 
8760: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 63  are added to a c
8770: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
8780: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61  , then the prima
8790: 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65  ry key.  for the
87a0: 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20   table consists 
87b0: 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63  of that single c
87c0: 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61  olumn. ^Or, if a
87d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
87e0: 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69 66  use .  is specif
87f0: 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d  ied as a [table-
8800: 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65  constraint], the
8810: 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
8820: 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20  y of the table. 
8830: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
8840: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73   list of columns
8850: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
8860: 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  rt of the PRIMAR
8870: 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20  Y KEY clause..  
8880: 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61 69  ^An error is rai
8890: 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61 6e  sed if more than
88a0: 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59   one PRIMARY KEY
88b0: 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73 20   clause appears 
88c0: 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54 41  in a.  CREATE TA
88d0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  BLE statement.  
88e0: 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59  ^The PRIMARY KEY
88f0: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72   is optional for
8900: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
8910: 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69 72  .  but is requir
8920: 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  ed for [WITHOUT 
8930: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a  ROWID] tables...
8940: 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61  <p>If a table ha
8950: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
8960: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e  n primary key an
8970: 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  d the declared t
8980: 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f  ype of that.  co
8990: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
89a0: 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  " and the table 
89b0: 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55  is not a [WITHOU
89c0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a  T ROWID] table,.
89d0: 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d    then the colum
89e0: 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e  n is known as an
89f0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
8a00: 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62 65  Y KEY]..  See be
8a10: 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63 72 69  low for a descri
8a20: 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65  ption of the spe
8a30: 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20  cial properties 
8a40: 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20  and behaviors.  
8a50: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
8a60: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
8a70: 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45  ARY KEY]...<p>^E
8a80: 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62  ach row in a tab
8a90: 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72  le with a primar
8aa0: 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20  y key must have 
8ab0: 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  a unique combina
8ac0: 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73  tion.  of values
8ad0: 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20   in its primary 
8ae0: 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f  key columns. ^Fo
8af0: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
8b00: 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20  f determining.  
8b10: 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f  the uniqueness o
8b20: 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  f primary key va
8b30: 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  lues, NULL value
8b40: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
8b50: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20   distinct from. 
8b60: 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   all other value
8b70: 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68  s, including oth
8b80: 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e  er NULLs. ^If an
8b90: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
8ba0: 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  DATE].  statemen
8bb0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f  t attempts to mo
8bc0: 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63  dify the table c
8bd0: 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74  ontent so that t
8be0: 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a  wo or more rows.
8bf0: 20 20 66 65 61 74 75 72 65 20 69 64 65 6e 74 69    feature identi
8c00: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
8c10: 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20 61 20  values, it is a 
8c20: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
8c30: 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72 64 69 6e  tion..  Accordin
8c40: 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61  g to the SQL sta
8c50: 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b  ndard, PRIMARY K
8c60: 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  EY should always
8c70: 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e   imply NOT NULL.
8c80: 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  .  Unfortunately
8c90: 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  , due to a bug i
8ca0: 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72  n some early ver
8cb0: 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e  sions, this is n
8cc0: 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e  ot the.  case in
8cd0: 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73   SQLite. ^Unless
8ce0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
8cf0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
8d00: 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65  RY KEY] or.  the
8d10: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
8d20: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
8d30: 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e or the column 
8d40: 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20  is declared NOT 
8d50: 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61  NULL,.  SQLite a
8d60: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
8d70: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
8d80: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69  EY column.  SQLi
8d90: 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65  te could be fixe
8da0: 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  d to.  conform t
8db0: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20  o the standard, 
8dc0: 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67  but doing so mig
8dd0: 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20  ht break legacy 
8de0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20  applications..  
8df0: 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65  Hence, it has be
8e00: 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65  en decided to me
8e10: 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68  rely document th
8e20: 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
8e30: 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  te.  allowing NU
8e40: 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d  LLs in most PRIM
8e50: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e  ARY KEY columns.
8e60: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
8e70: 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b  nt uniqueconst {
8e80: 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20  UNIQUE} {unique 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c  constraint}</tcl
8ea0: 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55  >.<p>^A <b>UNIQU
8eb0: 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  E</b> constraint
8ec0: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61   is similar to a
8ed0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
8ee0: 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a  straint, except.
8ef0: 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20    that a single 
8f00: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61  table may have a
8f10: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49  ny number of UNI
8f20: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  QUE constraints.
8f30: 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49   ^For each.  UNI
8f40: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f  QUE constraint o
8f50: 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63  n the table, eac
8f60: 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61  h row must conta
8f70: 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  in a unique comb
8f80: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
8f90: 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
8fa0: 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  ns identified by
8fb0: 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73   the UNIQUE cons
8fc0: 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20  traint. .  ^For 
8fd0: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
8fe0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
8ff0: 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a  ts, NULL values.
9000: 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64    are considered
9010: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61   distinct from a
9020: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c  ll other values,
9030: 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72   including other
9040: 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e 20   NULLs...<p>^In 
9050: 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51  most cases, UNIQ
9060: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
9070: 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.  constraints
9080: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
9090: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75   by creating a u
90a0: 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74  nique index in t
90b0: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 28  he database..  (
90c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  The exceptions a
90d0: 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  re [INTEGER PRIM
90e0: 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52 49  ARY KEY] and PRI
90f0: 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20  MARY KEYs on .  
9100: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
9110: 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65  tables.).  Hence
9120: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
9130: 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67 69  schemas are logi
9140: 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74  cally equivalent
9150: 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  :..  <ol>.  <li>
9160: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
9170: 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29 3b  t1(a, b UNIQUE);
9180: 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45  .  <li><p>CREATE
9190: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20 50   TABLE t1(a, b P
91a0: 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c  RIMARY KEY);.  <
91b0: 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42  li><p>CREATE TAB
91c0: 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e  LE t1(a, b);<br>
91d0: 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45  .         CREATE
91e0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31   UNIQUE INDEX t1
91f0: 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f  b ON t1(b);.  </
9200: 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ol>..<tcl>hd_fra
9210: 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20  gment {ckconst} 
9220: 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63  {CHECK} {CHECK c
9230: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43  onstraint} {CHEC
9240: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f  K constraints}</
9250: 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43  tcl>.<p>^(A <b>C
9260: 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  HECK</b> constra
9270: 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63  int may be attac
9280: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
9290: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20  definition or.  
92a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
92b0: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
92c0: 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20   In practice it 
92d0: 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65  makes no differe
92e0: 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20  nce.)^ ^(Each.  
92f0: 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69  time a new row i
9300: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
9310: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20  the table or an 
9320: 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20  existing row is 
9330: 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65  updated,.  the e
9340: 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69  xpression associ
9350: 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43  ated with each C
9360: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
9370: 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  is evaluated and
9380: 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d  .  cast to a NUM
9390: 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68  ERIC value in th
93a0: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20  e same way as a 
93b0: 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
93c0: 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73  ]. If the .  res
93d0: 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74  ult is zero (int
93e0: 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20  eger value 0 or 
93f0: 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c  real value 0.0),
9400: 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69   then a constrai
9410: 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68  nt.  violation h
9420: 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e  as occurred.)^ ^
9430: 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70  If the CHECK exp
9440: 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
9450: 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20  s to NULL, or.  
9460: 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65  any other non-ze
9470: 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ro value, it is 
9480: 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  not a constraint
9490: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54   violation..  ^T
94a0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  he expression of
94b0: 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
94c0: 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  int may not cont
94d0: 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a  ain a subquery..
94e0: 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72  .<p>CHECK constr
94f0: 61 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e 20  aints have been 
9500: 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65 20  supported since 
9510: 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e  [version 3.3.0].
9520: 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72 73   Prior to.  vers
9530: 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43 4b  ion 3.3.0, CHECK
9540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72   constraints wer
9550: 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f 74  e parsed but not
9560: 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c   enforced...<tcl
9570: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f  >hd_fragment {no
9580: 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54  tnullconst} {NOT
9590: 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c   NULL} {NOT NULL
95a0: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
95b0: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20  l>.<p>^A <b>NOT 
95c0: 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  NULL</b> constra
95d0: 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  int may only be 
95e0: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
95f0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
9600: 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  .  not specified
9610: 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73   as a table cons
9620: 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72  traint.  Not sur
9630: 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e  prisingly, ^(a N
9640: 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72  OT NULL.  constr
9650: 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74 68  aint dictates th
9660: 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  at the associate
9670: 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  d column may not
9680: 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20   contain a NULL 
9690: 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74  value..  Attempt
96a0: 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20 63  ing to set the c
96b0: 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e  olumn value to N
96c0: 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69  ULL when inserti
96d0: 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a  ng a new row or.
96e0: 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78    updating an ex
96f0: 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65  isting one cause
9700: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9710: 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e  iolation.)^..<p>
9720: 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f  Exactly how a co
9730: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
9740: 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74 68  on is dealt with
9750: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
9760: 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63  y the.  [conflic
9770: 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61  t clause|constra
9780: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
9790: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
97a0: 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d  m]. Each .  PRIM
97b0: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c  ARY KEY, UNIQUE,
97c0: 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48   NOT NULL and CH
97d0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68  ECK constraint h
97e0: 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  as a default con
97f0: 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69  flict.  resoluti
9800: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50  on algorithm. ^P
9810: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
9820: 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
9830: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20  constraints may 
9840: 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20  be.  explicitly 
9850: 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61 75  assigned a defau
9860: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
9870: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
9880: 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20   by including.  
9890: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
98a0: 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66  se] in their def
98b0: 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69  initions. ^Or, i
98c0: 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  f a constraint d
98d0: 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73  efinition.  does
98e0: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b   not include a [
98f0: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
9900: 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45 43   or it is a CHEC
9910: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68  K constraint, th
9920: 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66  e default.  conf
9930: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
9940: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
9950: 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63  RT. ^Different c
9960: 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68 69  onstraints withi
9970: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62  n the.  same tab
9980: 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66 66  le may have diff
9990: 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f  erent default co
99a0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
99b0: 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65  n algorithms. Se
99c0: 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20  e.  the section 
99d0: 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  titled [ON CONFL
99e0: 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
99f0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
9a00: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9a10: 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45  nt rowid {INTEGE
9a20: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52  R PRIMARY KEY} R
9a30: 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e  OWID rowid</tcl>
9a40: 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20  .<h3>ROWIDs and 
9a50: 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
9a60: 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70  ARY KEY</h3>..<p
9a70: 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49  >^Except for [WI
9a80: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
9a90: 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69  les, all rows wi
9aa0: 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c  thin SQLite tabl
9ab0: 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74  es.have a 64-bit
9ac0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
9ad0: 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c  key that uniquel
9ae0: 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
9af0: 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20   row within its 
9b00: 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65  table..This inte
9b10: 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63  ger is usually.c
9b20: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64  alled the "rowid
9b30: 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61  ". ^The rowid va
9b40: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
9b50: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
9b60: 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73   the special.cas
9b70: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61  e-independent na
9b80: 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  mes "rowid", "oi
9b90: 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  d", or "_rowid_"
9ba0: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63   in place of a c
9bb0: 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20  olumn name..^If 
9bc0: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
9bd0: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
9be0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f  column named "ro
9bf0: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
9c00: 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74  _rowid_",.then t
9c10: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
9c20: 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69  refers the expli
9c30: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63  citly declared c
9c40: 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74  olumn and cannot
9c50: 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72   be used.to retr
9c60: 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72  ieve the integer
9c70: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c   rowid value...<
9c80: 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64  p>The rowid (and
9c90: 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77   "oid" and "_row
9ca0: 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64  id_") is omitted
9cb0: 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   in [WITHOUT ROW
9cc0: 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48  ID] tables..WITH
9cd0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
9ce0: 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61   are only availa
9cf0: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76  ble in SQLite [v
9d00: 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e  ersion 3.8.2] an
9d10: 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c 65  d later..A table
9d20: 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65 20   that lacks the 
9d30: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63 6c  WITHOUT ROWID cl
9d40: 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20 61  ause is called a
9d50: 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a   "rowid table"..
9d60: 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72  .<p>The data for
9d70: 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69 73   rowid tables is
9d80: 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d 54   stored as a B-T
9d90: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63 6f  ree structure co
9da0: 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74  ntaining.one ent
9db0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9dc0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9dd0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9de0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9df0: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9e00: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9e10: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9e20: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9e30: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9e40: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9e50: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9e60: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9e70: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9e80: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9e90: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9ea0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9eb0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9ec0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9ed0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9ee0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9ef0: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9f00: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 6e   one exception n
9f10: 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20 61  oted below, if a
9f20: 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61 73   rowid table has
9f30: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74   a primary key t
9f40: 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20  hat consists.of 
9f50: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  a single column 
9f60: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
9f70: 20 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f   type of that co
9f80: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
9f90: 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65  " in any mixture
9fa0: 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f   of.upper and lo
9fb0: 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74  wer case, then t
9fc0: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65  he column become
9fd0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
9fe0: 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61  he rowid. Such a
9ff0: 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c  .column is usual
a000: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
a010: 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72  s an "integer pr
a020: 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52  imary key". A PR
a030: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
a040: 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e  .only becomes an
a050: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
a060: 20 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c   key if the decl
a070: 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69  ared type name i
a080: 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47  s exactly."INTEG
a090: 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74  ER".  ^Other int
a0a0: 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20  eger type names 
a0b0: 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42  like "INT" or "B
a0c0: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
a0d0: 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e   INTEGER".or "UN
a0e0: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20  SIGNED INTEGER" 
a0f0: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
a100: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f  ry key column to
a110: 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72   behave as an or
a120: 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c  dinary.table col
a130: 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72  umn with integer
a140: 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20   [affinity] and 
a150: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20  a unique index, 
a160: 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20  not as an alias 
a170: 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a  for.the rowid...
a180: 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f  <p> The exceptio
a190: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76  n mentioned abov
a1a0: 65 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68  e is that ^if th
a1b0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66  e declaration of
a1c0: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64   a column with.d
a1d0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e  eclared type "IN
a1e0: 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20  TEGER" includes 
a1f0: 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20  an "PRIMARY KEY 
a200: 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74  DESC" clause, it
a210: 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65   does not.become
a220: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
a230: 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e  e rowid and is n
a240: 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73  ot classified as
a250: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
a260: 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75  ary key..This qu
a270: 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65  irk is not by de
a280: 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20  sign. It is due 
a290: 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c  to a bug in earl
a2a0: 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  y versions of SQ
a2b0: 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67  Lite..But fixing
a2c0: 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72   the bug could r
a2d0: 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61 72  esult in backwar
a2e0: 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69  ds incompatibili
a2f0: 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65  ties..Hence, the
a300: 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69   original behavi
a310: 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65 74 61  or has been reta
a320: 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d 65  ined (and docume
a330: 6e 74 65 64 29 20 62 65 63 61 75 73 65 0a 62 65  nted) because.be
a340: 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e  havior in a corn
a350: 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62  er case is far b
a360: 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d  etter than a com
a370: 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b  patibility break
a380: 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68  .  This means.th
a390: 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69  at ^(the followi
a3a0: 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64  ng three table d
a3b0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20  eclarations all 
a3c0: 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e  cause the column
a3d0: 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c   "x" to be an.al
a3e0: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
a3f0: 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72  d (an integer pr
a400: 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c  imary key):..<ul
a410: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
a420: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
a430: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
a440: 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a  SC, y, z);</tt>.
a450: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
a460: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
a470: 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20  , y, z, PRIMARY 
a480: 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74  KEY(x ASC));</tt
a490: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
a4a0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
a4b0: 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
a4c0: 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c  Y KEY(x DESC));<
a4d0: 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70  /tt>.</ul>)^..<p
a4e0: 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f  >But ^(the follo
a4f0: 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e  wing declaration
a500: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74   does not result
a510: 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e   in "x" being an
a520: 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72   alias for.the r
a530: 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  owid:.<ul>.<li><
a540: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
a550: 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  t(x INTEGER PRIM
a560: 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c  ARY KEY DESC, y,
a570: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29   z);</tt>.</ul>)
a580: 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c  ^..<p>^Rowid val
a590: 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66  ues may be modif
a5a0: 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44  ied using an UPD
a5b0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  ATE statement in
a5c0: 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73   the same.way as
a5d0: 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d   any other colum
a5e0: 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74  n value can, eit
a5f0: 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  her using one of
a600: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c   the built-in al
a610: 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20  iases.("rowid", 
a620: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
a630: 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20  _") or by using 
a640: 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64  an alias created
a650: 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70   by an integer.p
a660: 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d  rimary key. ^Sim
a670: 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52  ilarly, an INSER
a680: 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  T statement may 
a690: 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20  provide a value 
a6a0: 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f  to use as the.ro
a6b0: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
a6c0: 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c   inserted. ^(Unl
a6d0: 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74  ike normal SQLit
a6e0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e  e columns, an in
a6f0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65  teger primary.ke
a700: 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d  y or rowid colum
a710: 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69  n must contain i
a720: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49  nteger values. I
a730: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a740: 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75  ey or rowid.colu
a750: 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65  mns are not able
a760: 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e   to hold floatin
a770: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20  g point values, 
a780: 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20  strings, BLOBs, 
a790: 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e  or NULLs.)^..<p>
a7a0: 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74  ^If an UPDATE st
a7b0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a7c0: 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67   to set an integ
a7d0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
a7e0: 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74  r rowid column.t
a7f0: 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62  o a NULL or blob
a800: 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20   value, or to a 
a810: 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76  string or real v
a820: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
a830: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63   be losslessly.c
a840: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
a850: 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74  nteger, a "datat
a860: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72  ype mismatch" er
a870: 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74  ror occurs and t
a880: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  he statement.is 
a890: 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20  aborted. ^If an 
a8a0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
a8b0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73   attempts to ins
a8c0: 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  ert a blob value
a8d0: 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72  , or a string.or
a8e0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
a8f0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
a900: 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
a910: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
a920: 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72  to an.integer pr
a930: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
a940: 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61  id column, a "da
a950: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
a960: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
a970: 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20  d the.statement 
a980: 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e  is aborted...<p>
a990: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
a9a0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a9b0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c   to insert a NUL
a9c0: 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
a9d0: 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20  owid or.integer 
a9e0: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
a9f0: 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63  mn, the system c
aa00: 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65  hooses an intege
aa10: 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61  r value to use a
aa20: 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f  s the.rowid auto
aa30: 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74  matically. A det
aa40: 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
aa50: 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73  n of how this is
aa60: 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65   done is provide
aa70: 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69  d.<a href="autoi
aa80: 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74  nc.html">separat
aa90: 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70  ely</a>.</p>..<p
aaa0: 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b  >^(The [parent k
aab0: 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67  ey] of a [foreig
aac0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
aad0: 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ] is not allowed
aae0: 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69   to.use the rowi
aaf0: 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b  d.  The parent k
ab00: 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d  ey must used nam
ab10: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e  ed columns only.
ab20: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  )^</p>..<tcl>.##
ab30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab70: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
ab80: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
ab90: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
aba0: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
abb0: 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  GGER}}..Recursiv
abc0: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
abd0: 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74  reate-trigger-st
abe0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
abf0: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
ac00: 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  R statement is u
ac10: 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67  sed to add trigg
ac20: 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61  ers to the .data
ac30: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72  base schema. ^Tr
ac40: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
ac50: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a  ase operations .
ac60: 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74  that are automat
ac70: 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64  ically performed
ac80: 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65   when a specifie
ac90: 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74  d database event
aca0: 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a  .occurs.  </p>..
acb0: 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61  <p>^A trigger ma
acc0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74  y be specified t
acd0: 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20  o fire whenever 
ace0: 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  a [DELETE], [INS
acf0: 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ERT],.or [UPDATE
ad00: 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  ] of a.particula
ad10: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
ad20: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
ad30: 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d  ever an [UPDATE]
ad40: 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e   occurs on.on on
ad50: 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66  e or more specif
ad60: 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ied columns of a
ad70: 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
ad80: 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51  ^At this time SQ
ad90: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e  Lite supports on
ada0: 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ly FOR EACH ROW 
adb0: 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f  triggers, not FO
adc0: 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54  R EACH.STATEMENT
add0: 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63   triggers. ^Henc
ade0: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65  e explicitly spe
adf0: 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48  cifying FOR EACH
ae00: 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c   ROW is optional
ae10: 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ..^FOR EACH ROW 
ae20: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
ae30: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
ae40: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
ae50: 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20   trigger.may be 
ae60: 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64  executed (depend
ae70: 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20  ing on the WHEN 
ae80: 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68  clause) for each
ae90: 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65   database row be
aea0: 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70  ing.inserted, up
aeb0: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
aec0: 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
aed0: 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72  t causing the tr
aee0: 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f  igger to fire.</
aef0: 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68  p>..<p>^(Both th
af00: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e  e WHEN clause an
af10: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  d the trigger ac
af20: 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73  tions may access
af30: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68   elements of .th
af40: 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65  e row being inse
af50: 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72  rted, deleted or
af60: 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72   updated using r
af70: 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65  eferences of the
af80: 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63   form ."NEW.<i>c
af90: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20  olumn-name</i>" 
afa0: 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75  and "OLD.<i>colu
afb0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68  mn-name</i>", wh
afc0: 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  ere.<i>column-na
afd0: 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61  me</i> is the na
afe0: 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66  me of a column f
aff0: 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68  rom the table th
b000: 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69  at the trigger.i
b010: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
b020: 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e  h.)^ ^(OLD and N
b030: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61  EW references ma
b040: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
b050: 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76  n triggers on.ev
b060: 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74  ents for which t
b070: 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74  hey are relevant
b080: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  , as follows:</p
b090: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
b0a0: 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
b0b0: 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  0>.<tr>.<td vali
b0c0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
b0d0: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
b0e0: 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f  ><i>INSERT</i></
b0f0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
b100: 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e  top">NEW referen
b110: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
b120: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
b130: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
b140: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
b150: 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45  th=120><i>UPDATE
b160: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
b170: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61  lign="top">NEW a
b180: 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  nd OLD reference
b190: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
b1a0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
b1b0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b1c0: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
b1d0: 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f  =120><i>DELETE</
b1e0: 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  i></td>.<td vali
b1f0: 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66  gn="top">OLD ref
b200: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
b210: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  d</td>.</tr>.</t
b220: 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70  able>.</p>)^..<p
b230: 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75  >^If a WHEN clau
b240: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
b250: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
b260: 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65  ts specified.are
b270: 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66   only executed f
b280: 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  or rows for whic
b290: 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73  h the WHEN.claus
b2a0: 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e  e is true. ^If n
b2b0: 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73  o WHEN clause is
b2c0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53   supplied, the S
b2d0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  QL statements.ar
b2e0: 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61  e executed for a
b2f0: 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70  ll rows.</p>..<p
b300: 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20  >^The BEFORE or 
b310: 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65  AFTER keyword de
b320: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
b330: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
b340: 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74  s.will be execut
b350: 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  ed relative to t
b360: 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f  he insertion, mo
b370: 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65  dification or re
b380: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73  moval of the.ass
b390: 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e  ociated row.</p>
b3a0: 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e  ..<p>^An [ON CON
b3b0: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61  FLICT] clause ma
b3c0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61  y be specified a
b3d0: 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50  s part of an [UP
b3e0: 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54  DATE] or [INSERT
b3f0: 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  ].action within 
b400: 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20  the body of the 
b410: 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65  trigger..^Howeve
b420: 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46  r if an [ON CONF
b430: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20  LICT] clause is 
b440: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
b450: 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d  t of .the statem
b460: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
b470: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
b480: 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68   then conflict h
b490: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f  andling.policy o
b4a0: 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74  f the outer stat
b4b0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e  ement is used in
b4c0: 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  stead.</p>..<p>^
b4d0: 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  Triggers are aut
b4e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50  omatically [DROP
b4f0: 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70   TRIGGER | dropp
b500: 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62  ed].when the tab
b510: 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65  le that they are
b520: 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74   .associated wit
b530: 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  h (the <i>table-
b540: 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20  name</i> table) 
b550: 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20  is .[DROP TABLE 
b560: 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f  | dropped].  ^Ho
b570: 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69  wever if the tri
b580: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66  gger actions ref
b590: 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62  erence.other tab
b5a0: 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72  les, the trigger
b5b0: 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20   is not dropped 
b5c0: 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74  or modified if t
b5d0: 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65  hose other.table
b5e0: 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c  s are [DROP TABL
b5f0: 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20  E | dropped] or 
b600: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d  [ALTER TABLE | m
b610: 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c  odified].</p>..<
b620: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
b630: 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68  removed using th
b640: 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  e [DROP TRIGGER]
b650: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
b660: 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74  .<h3>Syntax Rest
b670: 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41  rictions On UPDA
b680: 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20  TE, DELETE, and 
b690: 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74  INSERT Statement
b6a0: 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69  s Within.    Tri
b6b0: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
b6c0: 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  The [UPDATE], [D
b6d0: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
b6e0: 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20  ERT].statements 
b6f0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
b700: 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74  do not support.t
b710: 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66  he full syntax f
b720: 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  or [UPDATE], [DE
b730: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
b740: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
b750: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72   The following.r
b760: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
b770: 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  y:</p>..<ul>.<li
b780: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d  ><p>.  ^(The nam
b790: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
b7a0: 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e  o be modified in
b7b0: 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44   an [UPDATE], [D
b7c0: 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45  ELETE], or [INSE
b7d0: 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  RT].  statement 
b7e0: 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61  must be an unqua
b7f0: 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d  lified table nam
b800: 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  e.  In other wor
b810: 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75  ds, one must.  u
b820: 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c  se just "<i>tabl
b830: 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22  ename</i>" not "
b840: 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c  <i>database</i><
b850: 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e  b>.</b><i>tablen
b860: 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20  ame</i>".  when 
b870: 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74  specifying the t
b880: 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61  able.)^  ^The ta
b890: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
b8a0: 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
b8b0: 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61   the.  same data
b8c0: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
b8d0: 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
b8e0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
b8f0: 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f  s attached..  </
b900: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
b910: 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20  .  ^The "INSERT 
b920: 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69  INTO <i>table</i
b930: 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
b940: 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49  " form of the [I
b950: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
b960: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
b970: 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ted..  </p></li>
b980: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
b990: 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
b9a0: 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
b9b0: 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ses are not supp
b9c0: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9d0: 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45  E] and.  [DELETE
b9e0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  ] statements..  
b9f0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
ba00: 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52  p>.  ^(The ORDER
ba10: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
ba20: 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45  auses on [UPDATE
ba30: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
ba40: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
ba50: 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20  t.  supported.  
ba60: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
ba70: 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61  IT are not norma
ba80: 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f  lly supported fo
ba90: 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20  r [UPDATE] or.  
baa0: 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20  [DELETE] in any 
bab0: 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20  context but can 
bac0: 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  be enabled for t
bad0: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
bae0: 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20  nts.  using the 
baf0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
bb00: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
bb10: 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT] compile-time
bb20: 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65   option.  Howeve
bb30: 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c  r,.  that compil
bb40: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e  e-time option on
bb50: 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f  ly applies to to
bb60: 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d  p-level [UPDATE]
bb70: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20   and [DELETE].  
bb80: 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20  statements, not 
bb90: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
bba0: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
bbb0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
bbc0: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
bbd0: 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
bbe0: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
bbf0: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
bc00: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
bc10: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
bc20: 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f  l>.<h3>INSTEAD O
bc30: 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a  F trigger</h3>..
bc40: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79  <p>^Triggers may
bc50: 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b   be created on [
bc60: 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20  views], as well 
bc70: 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  as ordinary tabl
bc80: 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e  es, by.specifyin
bc90: 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20  g INSTEAD OF in 
bca0: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
bcb0: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e  ER statement. .^
bcc0: 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f  If one or more O
bcd0: 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c  N INSERT, ON DEL
bce0: 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45  ETE.or ON UPDATE
bcf0: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65   triggers are de
bd00: 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c  fined on a view,
bd10: 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20   then it is not 
bd20: 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63  an.error to exec
bd30: 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ute an INSERT, D
bd40: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
bd50: 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65  statement on the
bd60: 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69   view, .respecti
bd70: 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c  vely.  ^Instead,
bd80: 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e  .executing an IN
bd90: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
bda0: 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69  UPDATE on the vi
bdb0: 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73  ew causes the as
bdc0: 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72  sociated.trigger
bdd0: 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20  s to fire. ^The 
bde0: 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65  real tables unde
bdf0: 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20  rlying the view 
be00: 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64  are not modified
be10: 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c  .(except possibl
be20: 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79  y explicitly, by
be30: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
be40: 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f  am).</p>..<p>^No
be50: 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  te that the [sql
be60: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
be70: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and [sqlite3_tot
be80: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
be90: 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20  terfaces.do not 
bea0: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
beb0: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 73   trigger firings
bec0: 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74  , but the.[count
bed0: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
bee0: 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54   does count INST
bef0: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
bf00: 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  iring.</p>..<h3>
bf10: 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  Examples</h3>..<
bf20: 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61  p>^(Assuming tha
bf30: 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72  t customer recor
bf40: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
bf50: 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22   the "customers"
bf60: 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74   table, and.that
bf70: 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61   order records a
bf80: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
bf90: 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c   "orders" table,
bfa0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
bfb0: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
bfc0: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
bfd0: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
bfe0: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
bff0: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
c000: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
c010: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
c030: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
c040: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
c050: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
c060: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
c070: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
c080: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
c090: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
c0a0: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
c0b0: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
c0c0: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
c0d0: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
c0e0: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
c0f0: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
c100: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
c110: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
c120: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
c130: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
c140: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
c150: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
c160: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
c170: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
c180: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
c190: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
c1a0: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
c1b0: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
c1c0: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
c1d0: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
c1e0: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
c1f0: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
c200: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
c210: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
c220: 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65  ent undef_before
c230: 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f   {undefined BEFO
c240: 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76  RE trigger behav
c250: 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ior}</tcl>.<h3>C
c260: 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55  autions On The U
c270: 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69  se Of BEFORE tri
c280: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ggers</h3>..<p>I
c290: 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54  f a BEFORE UPDAT
c2a0: 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45  E or BEFORE DELE
c2b0: 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66  TE trigger modif
c2c0: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
c2d0: 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f   row.that was to
c2e0: 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74   have been updat
c2f0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74  ed or deleted, t
c300: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
c310: 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  f the subsequent
c320: 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74  .update or delet
c330: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  e operation is u
c340: 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68  ndefined.  Furth
c350: 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46  ermore, if a BEF
c360: 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69  ORE trigger.modi
c370: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
c380: 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69  a row, then it i
c390: 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74  s undefined whet
c3a0: 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52  her or not AFTER
c3b0: 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77   triggers.that w
c3c0: 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77  ould have otherw
c3d0: 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65  ise run on those
c3e0: 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61   rows will in fa
c3f0: 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ct run..</p>..<p
c400: 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45  >The value of NE
c410: 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66  W.rowid is undef
c420: 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45  ined in a BEFORE
c430: 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20   INSERT trigger 
c440: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77  in which.the row
c450: 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63  id is not explic
c460: 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69  itly set to an i
c470: 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nteger.</p>..<p>
c480: 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62  Because of the b
c490: 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62  ehaviors describ
c4a0: 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61  ed above, progra
c4b0: 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
c4c0: 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41  aged to.prefer A
c4d0: 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76  FTER triggers ov
c4e0: 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  er BEFORE trigge
c4f0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65  rs.</p>..<h3>The
c500: 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
c510: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73  n</h3>..<p>^(A s
c520: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
c530: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
c540: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
c550: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
c560: 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  ,)^.with the fol
c570: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
c580: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
c590: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
c5a0: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
c5b0: 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41  ^(When one of RA
c5c0: 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e  ISE(ROLLBACK,...
c5d0: 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e  ), RAISE(ABORT,.
c5e0: 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49  ..) or RAISE(FAI
c5f0: 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64  L,...).is called
c600: 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d   during trigger-
c610: 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f  program.executio
c620: 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64  n, the specified
c630: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70   [ON CONFLICT] p
c640: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72  rocessing is per
c650: 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65  formed.the curre
c660: 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61  nt query termina
c670: 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20  tes.)^.An error 
c680: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
c690: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
c6a0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
c6b0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
c6c0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
c6d0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
c6e0: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
c6f0: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
c700: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
c710: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
c720: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
c730: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
c740: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
c750: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
c760: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
c770: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
c780: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
c790: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
c7a0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
c7b0: 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65  ted are abandone
c7c0: 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a  d. ^No database.
c7d0: 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c  changes are roll
c7e0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
c7f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
c800: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
c810: 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65  ger program.to e
c820: 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66  xecute is itself
c830: 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
c840: 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e  er program, then
c850: 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72   that trigger pr
c860: 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78  ogram.resumes ex
c870: 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62  ecution at the b
c880: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
c890: 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a  next step..</p>.
c8a0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
c8b0: 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50  t temptrig {TEMP
c8c0: 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e   triggers on non
c8d0: 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74  -TEMP tables}</t
c8e0: 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69  cl>.<h3>TEMP Tri
c8f0: 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d  ggers on Non-TEM
c900: 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  P Tables</h3>..<
c910: 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f  p>^(A trigger no
c920: 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e  rmally exists in
c930: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
c940: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
c950: 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20  named.after the 
c960: 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20  "ON" keyword in 
c970: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
c980: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45  ER statement.  E
c990: 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73  xcept, it is.pos
c9a0: 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20  sible to create 
c9b0: 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f  a TEMP TRIGGER o
c9c0: 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f  n a table in ano
c9d0: 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e  ther database.)^
c9e0: 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65    .Such a trigge
c9f0: 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65  r will only fire
ca00: 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72   when changes.ar
ca10: 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61  e made to the ta
ca20: 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68  rget table by th
ca30: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68  e application th
ca40: 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74  at defined the t
ca50: 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70  rigger..Other ap
ca60: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
ca70: 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
ca80: 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ase will not be 
ca90: 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a  able to see the.
caa0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64  TEMP trigger and
cab0: 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75   hence cannot ru
cac0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f  n the trigger.</
cad0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69  p>..<p>When defi
cae0: 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67  ning a TEMP trig
caf0: 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d  ger on a non-TEM
cb00: 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69  P table, it is i
cb10: 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63  mportant to.spec
cb20: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
cb30: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e   holding the non
cb40: 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f  -TEMP table.  Fo
cb50: 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68  r example,.in th
cb60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
cb70: 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70  ement, it is imp
cb80: 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d  ortant to say "m
cb90: 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61  ain.tab1" instea
cba0: 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22  d.of just "tab1"
cbb0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
cbc0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
cbd0: 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31  TEMP TRIGGER ex1
cbe0: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
cbf0: 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62   <b>main.</b>tab
cc00: 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72  1 BEGIN ....</pr
cc10: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
cc20: 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73  .<p>Failure to s
cc30: 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
cc40: 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20  ase name on the 
cc50: 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75  target table cou
cc60: 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65  ld result.in the
cc70: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65   TEMP trigger be
cc80: 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74  ing reattached t
cc90: 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  o a table with t
cca0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a  he same name in.
ccb0: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
ccc0: 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63   whenever any sc
ccd0: 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75  hema change occu
cce0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs.</p>..<tcl>.#
ccf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
cd40: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
cd50: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
cd60: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
cd70: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 52   view *views}..R
cd80: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
cd90: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65  agram create-vie
cda0: 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
cdb0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
cdc0: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
cdd0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
cde0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
cdf0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
ce00: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
ce10: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
ce20: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
ce30: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
ce40: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
ce50: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
ce60: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
ce70: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
ce80: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
ce90: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
cea0: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
ceb0: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
cec0: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
ced0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
cee0: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
cef0: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
cf00: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
cf10: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
cf20: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
cf30: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
cf40: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
cf50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
cf60: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
cf70: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
cf80: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
cf90: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
cfa0: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
cfb0: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
cfc0: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
cfd0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
cfe0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
cff0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
d000: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
d010: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
d020: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
d030: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
d040: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
d050: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
d060: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
d070: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
d080: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
d090: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
d0a0: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
d0b0: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
d0c0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
d0d0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
d0e0: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
d0f0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
d100: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
d110: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
d120: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
d130: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
d140: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
d150: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
d160: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
d170: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
d180: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
d190: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
d1a0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
d1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
d200: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
d210: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
d220: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
d230: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
d240: 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
d250: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
d260: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
d270: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
d280: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
d290: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
d2a0: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
d2b0: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
d2c0: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
d2d0: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
d2e0: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
d2f0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
d300: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
d310: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
d320: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
d330: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
d340: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
d350: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
d360: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
d370: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
d380: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
d390: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
d3a0: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
d3b0: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
d3c0: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
d3d0: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
d3e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
d3f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
d400: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
d410: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
d420: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
d430: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
d440: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
d450: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
d460: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
d470: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
d480: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
d490: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
d4a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
d4b0: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
d4c0: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
d4d0: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
d4e0: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
d4f0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d500: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
d510: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
d520: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
d530: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
d540: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d550: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d560: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d570: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d580: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d590: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d5a0: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d5b0: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d5c0: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d5d0: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d5e0: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d5f0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d600: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d610: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d620: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d630: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d640: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d650: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d660: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d670: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d680: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d690: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d6a0: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d6b0: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d6c0: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d6d0: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d6e0: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d6f0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d700: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d710: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d720: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d730: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d740: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d750: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d760: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d770: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d780: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d790: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d7a0: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d7b0: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d7c0: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d7d0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d7e0: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d7f0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d800: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d810: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d860: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d870: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d880: 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72  *DELETEs}..Recur
d890: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
d8a0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f  m delete-stmt.</
d8b0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c  tcl>..<p>The DEL
d8c0: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f  ETE command remo
d8d0: 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ves records from
d8e0: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
d8f0: 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20  ified by the.   
d900: 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62  <i>qualified-tab
d910: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c  le-name</i>. ..<
d920: 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20  p>^If the WHERE 
d930: 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72  clause is not pr
d940: 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72  esent, all recor
d950: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
d960: 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
d970: 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  ^If a WHERE clau
d980: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
d990: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
d9a0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
d9b0: 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66 20  he.   result of 
d9c0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57  evaluating the W
d9d0: 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20 61  HERE clause as a
d9e0: 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
d9f0: 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e  sion|.   boolean
da00: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
da10: 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65 64  rue] are deleted
da20: 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
da30: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74  ons on DELETE St
da40: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
da50: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
da60: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
da70: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
da80: 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45  ns apply to DELE
da90: 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
daa0: 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
dab0: 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61  the.   body of a
dac0: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
dad0: 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75  ] statement:..<u
dae0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
daf0: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
db00: 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
db10: 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54 45  part of a DELETE
db20: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
db30: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
db40: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
db50: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
db60: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
db70: 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65  .    <i>database
db80: 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
db90: 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
dba0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f  table name is no
dbb0: 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77  t allowed .    w
dbc0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
dbd0: 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20  ^ ^If the table 
dbe0: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
dbf0: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
dc00: 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74   is.    not in t
dc10: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
dc20: 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74  , then DELETE st
dc30: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
dc40: 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
dc50: 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74  body must operat
dc60: 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68  e on tables with
dc70: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
dc80: 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
dc90: 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f  the table.    to
dca0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
dcb0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
dcc0: 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
dcd0: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
dce0: 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64  .    unqualified
dcf0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
dd00: 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  le being deleted
dd10: 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
dd20: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a  the same way as.
dd30: 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61 20      it is for a 
dd40: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
dd50: 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e  ent (by searchin
dd60: 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50  g first the TEMP
dd70: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a   database, then.
dd80: 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74      the main dat
dd90: 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
dda0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
ddb0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
ddc0: 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61 63  y were.    attac
ddd0: 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69  hed)..    .  <li
dde0: 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  ><p>^The INDEXED
ddf0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
de00: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
de10: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44  not allowed on D
de20: 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d  ELETE.    statem
de30: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
de40: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
de50: 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
de60: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
de70: 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20 62  ses (described b
de80: 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70  elow) are unsupp
de90: 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45  orted for.    DE
dea0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
deb0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
dec0: 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  </p>.</ul>..<h3>
ded0: 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
dee0: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
def0: 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
df00: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
df10: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53  iled with the [S
df20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
df30: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
df40: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
df50: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ption, then the 
df60: 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45  syntax of the DE
df70: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
df80: 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68  s.extended by th
df90: 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70  e addition of op
dfa0: 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
dfb0: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
dfc0: 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  s:)^</p>..<tcl>B
dfd0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
dfe0: 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ete-stmt-limited
dff0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
e000: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e010: 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c  t has a LIMIT cl
e020: 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75  ause, the maximu
e030: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
e040: 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65   that.will be de
e050: 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62  leted is found b
e060: 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
e070: 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78   accompanying ex
e080: 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73  pression and cas
e090: 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e  ting.it to an in
e0a0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66  teger value. ^If
e0b0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
e0c0: 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  he evaluating th
e0d0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63  e LIMIT clause.c
e0e0: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
e0f0: 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
e100: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
e110: 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  e, it is an erro
e120: 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20  r. ^A .negative 
e130: 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69  LIMIT value is i
e140: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
e150: 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74  o limit". ^(If t
e160: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
e170: 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e  ent .also has an
e180: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
e190: 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
e1a0: 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
e1b0: 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e  nd cast to an.in
e1c0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61  teger value. Aga
e1d0: 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  in, it is an err
e1e0: 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  or if the value 
e1f0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
e200: 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74  ssly.converted t
e210: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20  o an integer.)^ 
e220: 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
e230: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f  OFFSET clause, o
e240: 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64  r the calculated
e250: 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69  .integer value i
e260: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20  s negative, the 
e270: 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45 54  effective OFFSET
e280: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a   value is zero..
e290: 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c  .<p>^(If the DEL
e2a0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
e2b0: 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  s an ORDER BY cl
e2c0: 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
e2d0: 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a  ows that would .
e2e0: 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
e2f0: 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
e300: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
e310: 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
e320: 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52  ng to the .ORDER
e330: 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c   BY. The first <
e340: 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68  i>M</i> rows, wh
e350: 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20  ere <i>M</i> is 
e360: 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  the value found 
e370: 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
e380: 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
e390: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
e3a0: 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65  skipped, and the
e3b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e   following .<i>N
e3c0: 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e  </i>, where <i>N
e3d0: 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
e3e0: 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65  e of the LIMIT e
e3f0: 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64  xpression, are d
e400: 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68  eleted.)^.^If th
e410: 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
e420: 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  n <i>N</i> rows 
e430: 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20  remaining after 
e440: 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45  taking the OFFSE
e450: 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63  T clause.into ac
e460: 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65  count, or if the
e470: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76   LIMIT clause ev
e480: 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67  aluated to a neg
e490: 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65  ative value, the
e4a0: 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20  n all.remaining 
e4b0: 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
e4c0: 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45  ...<p>^If the DE
e4d0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
e4e0: 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
e4f0: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
e500: 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
e510: 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
e520: 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
e530: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
e540: 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
e550: 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
e560: 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
e570: 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
e580: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
e590: 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65  o determine .the
e5a0: 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72 65   subset that are
e5b0: 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65   actually delete
e5c0: 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44  d...<p>^(The ORD
e5d0: 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
e5e0: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
e5f0: 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
e600: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
e610: 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
e620: 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
e630: 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
e640: 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  h rows are delet
e650: 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
e660: 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
e670: 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
e680: 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
e690: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e6a0: 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74  t truncateopt {t
e6b0: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
e6c0: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
e6d0: 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74  The Truncate Opt
e6e0: 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  imization</h3>..
e6f0: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45  <p>^When the WHE
e700: 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  RE is omitted fr
e710: 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  om a DELETE stat
e720: 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61  ement and the ta
e730: 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65  ble.being delete
e740: 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72  d has no trigger
e750: 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61  s,.SQLite uses a
e760: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74  n optimization t
e770: 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69  o erase the enti
e780: 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  re table content
e790: 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20  .without having 
e7a0: 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f  to visit each ro
e7b0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  w of the table i
e7c0: 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69  ndividually..Thi
e7d0: 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74  s "truncate" opt
e7e0: 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20  imization makes 
e7f0: 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d  the delete run m
e800: 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f  uch faster..Prio
e810: 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72  r to SQLite [ver
e820: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65  sion 3.6.5], the
e830: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
e840: 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e  zation.also mean
e850: 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  t that the [sqli
e860: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
e870: 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd.[sqlite3_tota
e880: 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
e890: 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20  erfaces.and the 
e8a0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
e8b0: 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20  ragma].will not 
e8c0: 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
e8d0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
e8e0: 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68  leted rows.  .Th
e8f0: 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
e900: 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20  een fixed as of 
e910: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e  [version 3.6.5].
e920: 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
e930: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
e940: 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
e950: 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
e960: 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
e970: 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
e980: 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
e990: 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
e9a0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
e9b0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
e9c0: 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
e9d0: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
e9e0: 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
e9f0: 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
ea00: 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
ea10: 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
ea20: 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
ea30: 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
ea40: 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
ea50: 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
ea60: 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
ea70: 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
ea80: 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
ea90: 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
eaa0: 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
eab0: 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
eac0: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
ead0: 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
eae0: 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
eaf0: 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
eb00: 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
eb10: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb60: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
eb70: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
eb80: 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
eb90: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
eba0: 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
ebb0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
ebc0: 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
ebd0: 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
ebe0: 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
ebf0: 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
ec00: 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
ec10: 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
ec20: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
ec30: 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
ec40: 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
ec50: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
ec60: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
ec70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
ec80: 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
ec90: 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
eca0: 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
ecb0: 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
ecc0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
ecd0: 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
ece0: 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
ecf0: 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
ed00: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
ed10: 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
ed20: 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
ed30: 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
ed40: 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
ed50: 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
ed60: 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
ed70: 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
ed80: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
ed90: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
eda0: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
edb0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
edc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
ee10: 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
ee20: 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
ee30: 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
ee40: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
ee50: 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
ee60: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
ee70: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
ee80: 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
ee90: 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
eea0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
eeb0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
eec0: 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
eed0: 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
eee0: 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
eef0: 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
ef00: 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
ef10: 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
ef20: 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
ef30: 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
ef40: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
efa0: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
efb0: 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
efc0: 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
efd0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
efe0: 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
eff0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
f000: 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
f010: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
f020: 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
f030: 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
f040: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
f050: 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
f060: 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
f070: 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
f080: 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
f090: 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
f0a0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
f0b0: 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
f0c0: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
f0d0: 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
f0e0: 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
f0f0: 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
f100: 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
f110: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
f120: 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
f130: 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
f140: 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
f150: 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
f160: 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
f170: 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
f180: 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
f190: 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
f1a0: 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
f1b0: 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
f1c0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
f1d0: 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
f1e0: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
f1f0: 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
f200: 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
f210: 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  E | DELETE FROM 
f220: 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f 6d  &lt;tbl&gt;] com
f230: 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f  mand before remo
f240: 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66  ving the.table f
f250: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
f260: 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72   schema. ^Any tr
f270: 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20  iggers attached 
f280: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  to the table are
f290: 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  .dropped from th
f2a0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
f2b0: 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70  a before the imp
f2c0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
f2d0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a 69  M &lt;tbl&gt; .i
f2e0: 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  s executed, so t
f2f0: 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65  his cannot cause
f300: 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f   any triggers to
f310: 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61   fire. By contra
f320: 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74  st, ^an.implicit
f330: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
f340: 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63 61  ;tbl&gt; does ca
f350: 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72  use any configur
f360: 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  ed.[foreign key 
f370: 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65  actions] to take
f380: 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65   place. .^If the
f390: 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
f3a0: 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
f3b0: 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61  ; executed.as pa
f3c0: 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42  rt of a DROP TAB
f3d0: 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61  LE command viola
f3e0: 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74  tes any immediat
f3f0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
f400: 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72  nstraints,.an er
f410: 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
f420: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
f430: 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49   not dropped. ^I
f440: 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20  f .the implicit 
f450: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
f460: 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20 61  tbl&gt; causes a
f470: 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72  ny .deferred for
f480: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
f490: 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61  ints to be viola
f4a0: 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f  ted, and the vio
f4b0: 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78  lations still.ex
f4c0: 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61  ist when the tra
f4d0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d  nsaction is comm
f4e0: 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20  itted, an error 
f4f0: 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74  is returned at t
f500: 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69  he time.of commi
f510: 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  t...<tcl>.######
f520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
f570: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
f580: 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
f590: 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65  OP TRIGGER}}..Re
f5a0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f5b0: 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65  gram drop-trigge
f5c0: 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  r-stmt.</tcl>..<
f5d0: 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47  p>^The DROP TRIG
f5e0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
f5f0: 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
f600: 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
f610: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
f620: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63   statement. ^Onc
f630: 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74  e removed, the t
f640: 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f  rigger definitio
f650: 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70  n is no.longer p
f660: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71  resent in the sq
f670: 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20  lite_master (or 
f680: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
f690: 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73  er) table and is
f6a0: 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e  .not fired by an
f6b0: 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53  y subsequent INS
f6c0: 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
f6d0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
f6e0: 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ...<p>^Note that
f6f0: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
f700: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70  tomatically drop
f710: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
f720: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
f730: 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e  .dropped...<tcl>
f740: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
f750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
f790: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
f7a0: 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
f7b0: 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75  ROP VIEW}}..Recu
f7c0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
f7d0: 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d  am drop-view-stm
f7e0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
f7f0: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
f800: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
f810: 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
f820: 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57  the [CREATE VIEW
f830: 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20  ] .  statement. 
f840: 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69  ^The view defini
f850: 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20  tion is removed 
f860: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
f870: 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20  e schema, but . 
f880: 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
f890: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
f8a0: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
f8b0: 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e   modified...<p>^
f8c0: 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f  (The view to dro
f8d0: 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  p is identified 
f8e0: 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65  by the view-name
f8f0: 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20   and optional . 
f900: 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73   database-name s
f910: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
f920: 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45   of the DROP VIE
f930: 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  W statement. Thi
f940: 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69  s .  reference i
f950: 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67  s resolved using
f960: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72   the standard pr
f970: 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a  ocedure for [obj
f980: 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e  ect resolution].
f990: 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68  )^..<p>.  ^If th
f9a0: 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77  e specified view
f9b0: 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
f9c0: 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53   and the IF EXIS
f9d0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  TS clause is not
f9e0: 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20   .  present, it 
f9f0: 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66  is an error. ^If
fa00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
fa10: 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
fa20: 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20  und and an IF.  
fa30: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
fa40: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
fa50: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
fa60: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74  ent, then the st
fa70: 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e  atement.  is a n
fa80: 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  o-op....<tcl>.##
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
fae0: 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f  tion {Database O
faf0: 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c  bject Name Resol
fb00: 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20  ution} {naming} 
fb10: 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74  {{object resolut
fb20: 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ion}}.</tcl>..<p
fb30: 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61  >.  In SQLite, a
fb40: 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
fb50: 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78   (a table, index
fb60: 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65  , trigger or vie
fb70: 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  w) is identified
fb80: 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  .  by the name o
fb90: 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64  f the object and
fba0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
fbb0: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69   database that i
fbc0: 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20  t resides in. . 
fbd0: 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   Database object
fbe0: 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20  s may reside in 
fbf0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
fc00: 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  e, the temp data
fc10: 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e  base, or in.  an
fc20: 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65   [ATTACH|attache
fc30: 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70  d database]...<p
fc40: 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f  >.  The syntax o
fc50: 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c  f the [DROP TABL
fc60: 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  E], [DROP INDEX]
fc70: 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b  , [DROP VIEW], [
fc80: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20  DROP TRIGGER],. 
fc90: 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54   [REINDEX], [ALT
fca0: 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61  ER TABLE] and ma
fcb0: 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  ny other command
fcc0: 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65  s all permit the
fcd0: 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69   user to.  speci
fce0: 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62  fy a database ob
fcf0: 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69  ject either by i
fd00: 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f  ts name alone, o
fd10: 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69  r by a combinati
fd20: 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65  on of.  its name
fd30: 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
fd40: 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e   its database. ^
fd50: 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  (If no database 
fd60: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
fd70: 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62  part.  of the ob
fd80: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
fd90: 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72  then SQLite sear
fda0: 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74  ches the main, t
fdb0: 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61  emp and all atta
fdc0: 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73  ched.  databases
fdd0: 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77   for an object w
fde0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
fdf0: 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61  ame. The temp da
fe00: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fe10: 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c  ed.  first, foll
fe20: 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e  owed by the main
fe30: 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f   database, follo
fe40: 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  wed all attached
fe50: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
fe60: 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74  e.  order that t
fe70: 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65  hey were attache
fe80: 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65  d. The reference
fe90: 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65   resolves to the
fea0: 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66   first match.  f
feb0: 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d  ound.)^ For exam
fec0: 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20  ple:..<pre>^(.  
fed0: 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62      /* Add a tab
fee0: 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f  le named 't1' to
fef0: 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20   the temp, main 
ff00: 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20  and an attached 
ff10: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
ff20: 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64    ATTACH 'file.d
ff30: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
ff40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
ff50: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
ff60: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
ff70: 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20  t1(x, y);.      
ff80: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
ff90: 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20  .t1(x, y);..    
ffa0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
ffb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
ffc0: 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64   table in temp d
ffd0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
ffe0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
fff0: 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
10000 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61  table in main da
10010 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
10020 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
10030 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
10040 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61  able in aux data
10050 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e  base */.)^</pre>
10060 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61  ..<p>.  ^If a da
10070 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73  tabase name is s
10080 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
10090 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65   of an object re
100a0 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74  ference, it must
100b0 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61   be.  either "ma
100c0 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f  in", or "temp" o
100d0 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
100e0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
100f0 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a  se. ^Like other.
10100 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72    SQL identifier
10110 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  s, database name
10120 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e  s are case-insen
10130 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61  sitive. ^If a da
10140 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73  tabase name.  is
10150 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
10160 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20   only the named 
10170 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72  database is sear
10180 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d  ched for the nam
10190 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a  ed object...<p>.
101a0 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65    Most object re
101b0 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
101c0 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73  y resolve to a s
101d0 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20  pecific type of 
101e0 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78  object (for.  ex
101f0 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63  ample a referenc
10200 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
10210 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73  f a DROP TABLE s
10220 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c  tatement may onl
10230 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61  y resolve.  to a
10240 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e   table object, n
10250 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69  ot an index, tri
10260 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48  gger or view). H
10270 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63  owever in some c
10280 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e  ontexts .  (e.g.
10290 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f   [REINDEX]) an o
102a0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20  bject reference 
102b0 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74  may be resolve t
102c0 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  o more than one 
102d0 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74  type.  of object
102e0 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e  . ^When searchin
102f0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
10300 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f  as for a named o
10310 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f  bject, objects o
10320 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63  f.  types that c
10330 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e  annot be used in
10340 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
10350 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72  the reference ar
10360 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f  e always .  igno
10370 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  red...<tcl>.####
10380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103c0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
103d0 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
103e0 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
103f0 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
10400 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
10410 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
10420 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
10430 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
10440 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
10450 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
10460 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
10470 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
10480 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
10490 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
104a0 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
104b0 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
104c0 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
104d0 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
104e0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
104f0 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
10500 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
10510 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
10520 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
10530 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  </p>..<p>The out
10540 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e  put from EXPLAIN
10550 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45   and EXPLAIN QUE
10560 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e  RY PLAN is inten
10570 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74  ded for.interact
10580 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64  ive analysis and
10590 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67   troubleshooting
105a0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61   only.  The deta
105b0 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70  ils of the .outp
105c0 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75  ut format are su
105d0 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
105e0 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65  from one release
105f0 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68   of SQLite to th
10600 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74  e next..Applicat
10610 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20  ions should not 
10620 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45  use EXPLAIN or E
10630 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
10640 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78  N since.their ex
10650 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  act behavior is 
10660 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c  variable and onl
10670 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75  y partially docu
10680 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mented.</p>..<p>
10690 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  ^When the EXPLAI
106a0 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  N keyword appear
106b0 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63  s by itself it c
106c0 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d  auses the statem
106d0 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73  ent.to behave as
106e0 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65   a query that re
106f0 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e  turns the sequen
10700 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20  ce of .[virtual 
10710 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74  machine instruct
10720 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68  ions] it would h
10730 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63  ave used to exec
10740 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  ute the command 
10750 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20  had.the EXPLAIN 
10760 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e  keyword not been
10770 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20   present. ^When 
10780 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
10790 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70  Y PLAN phrase.ap
107a0 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65  pears, the state
107b0 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67  ment returns hig
107c0 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74  h-level informat
107d0 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68  ion regarding th
107e0 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61  e query.plan tha
107f0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
10800 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50  n used...The EXP
10810 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10820 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72  command is descr
10830 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69  ibed in .[explai
10840 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72  n query plan|mor
10850 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a  e detail here]..
10860 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23 23 23 23 23 23 23  ################
108a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108b0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78  #####.Section ex
108c0 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a  pression expr {*
108d0 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72  expression {expr
108e0 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a  ession syntax}}.
108f0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
10900 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74  Diagram expr.</t
10910 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
10920 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
10930 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
10940 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
10950 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
10960 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
10970 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
10980 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
10990 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
109a0 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
109b0 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
109c0 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
109d0 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
109e0 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
109f0 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
10a00 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
10a10 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
10a20 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
10a30 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
10a40 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
10a50 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
10a60 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
10a70 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
10a80 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
10a90 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
10aa0 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
10ab0 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
10ac0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
10ad0 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
10ae0 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
10af0 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
10b00 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
10b10 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
10b20 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
10b30 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
10b40 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
10b50 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
10b60 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
10b70 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
10b80 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
10b90 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
10ba0 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
10bb0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
10bc0 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
10bd0 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
10be0 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
10bf0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
10c00 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
10c10 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
10c20 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
10c30 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
10c40 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
10c50 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
10c60 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
10c70 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
10c80 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
10c90 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
10ca0 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
10cb0 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
10cc0 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
10cd0 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
10ce0 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
10cf0 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
10d00 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
10d10 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
10d20 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
10d30 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
10d40 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny.binary operat
10d50 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79  or and any unary
10d60 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72   prefix operator
10d70 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f   except "~"..(CO
10d80 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72  LLATE and "~" ar
10d90 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f  e associative so
10da0 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f   their binding o
10db0 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  rder does not ma
10dc0 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c  tter.).^The coll
10dd0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73  ating sequence s
10de0 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  et by the COLLAT
10df0 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72  E operator overr
10e00 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69  ides the.collati
10e10 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65  ng sequence dete
10e20 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f  rmined by the CO
10e30 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
10e40 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20  a table.[column 
10e50 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65  definition]..See
10e60 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20   the [collating 
10e70 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c  sequence| detail
10e80 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e  ed discussion on
10e90 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10ea0 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61  nces].in the [da
10eb0 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70  tatype | Datatyp
10ec0 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f  e In SQLite3] do
10ed0 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
10ee0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10ef0 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  n..</p>..<tcl>hd
10f00 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20  _puts ".<p>^The 
10f10 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b  unary operator [
10f20 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61  Operator +] is a
10f30 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e   no-op.  ^It can
10f40 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73   be applied.to s
10f50 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c  trings, numbers,
10f60 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61   blobs or NULL a
10f70 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74  nd it always ret
10f80 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69  urns a result.wi
10f90 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  th the same valu
10fa0 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  e as the operand
10fb0 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .</p>"</tcl>..<p
10fc0 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65  >Note that there
10fd0 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69   are two variati
10fe0 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  ons of the equal
10ff0 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73  s and not equals
11000 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71  .operators.  ^Eq
11010 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68  uals can be eith
11020 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74  er..<tcl>.hd_put
11030 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
11040 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
11050 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c  ..^The non-equal
11060 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  s operator can b
11070 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74  e either.[Operat
11080 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61  or !=] or [Opera
11090 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e  tor {&lt;&gt;}].
110a0 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  .^The [Operator 
110b0 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ||] operator is 
110c0 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20  \"concatenate\" 
110d0 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74  - it joins toget
110e0 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69  her.the two stri
110f0 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61  ngs of its opera
11100 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74  nds..^The operat
11110 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
11120 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75  outputs the valu
11130 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  e of its left .o
11140 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
11150 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
11160 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
11170 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
11180 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65  ry operator is e
11190 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20  ither a numeric 
111a0 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20  value or .NULL, 
111b0 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b  except for the [
111c0 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
111d0 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
111e0 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73  tor which always
111f0 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65   .evaluates to e
11200 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
11210 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22  text value.</p>"
11220 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69  ..hd_fragment {i
11230 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72  sisnot} {IS oper
11240 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70  ator} {IS NOT op
11250 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73  erator}..hd_puts
11260 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61   "<p>^The [Opera
11270 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
11280 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
11290 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c  operators work.l
112a0 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ike [Operator =]
112b0 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21   and [Operator !
112c0 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f  =] except when o
112d0 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68  ne or both of th
112e0 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  e.operands are N
112f0 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ULL. ^In this ca
11300 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72  se, if both oper
11310 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  ands are NULL, t
11320 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
11330 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
11340 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68   1 (true) and th
11350 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
11360 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30  r evaluates.to 0
11370 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e   (false). ^If on
11380 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
11390 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  L and the other 
113a0 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65  is not, then the
113b0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
113c0 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c  luates to 0 (fal
113d0 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  se) and the IS N
113e0 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31  OT operator is 1
113f0 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20   (true)..^It is 
11400 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
11410 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54   an IS or IS NOT
11420 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
11430 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  valuate to NULL.
11440 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65  .^Operators [Ope
11450 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
11460 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
11470 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ] have the same 
11480 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b  .precedence as [
11490 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c  Operator =]."..<
114a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
114b0 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61  litvalue {litera
114c0 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  l value}</tcl>.<
114d0 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65  h3>Literal Value
114e0 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c 69  s</h3>.<p>.^A li
114f0 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20 61  teral value is a
11500 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f 6d   constant of som
11510 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61 6c  e kind..^Literal
11520 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69   values may be i
11530 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e  ntegers, floatin
11540 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c  g point numbers,
11550 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c   strings,.BLOBs,
11560 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a   or NULLs.</p>..
11570 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f  <p>The syntax fo
11580 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c  r integer and fl
11590 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
115a0 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76  erals (collectiv
115b0 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74  ely."numeric lit
115c0 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e  erals") is shown
115d0 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
115e0 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a  g diagram:</p>..
115f0 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
11600 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72  am numeric-liter
11610 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28  al</tcl>..<p>.^(
11620 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74  If a numeric lit
11630 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d  eral has a decim
11640 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65  al point or an e
11650 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c  xponentiation.cl
11660 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73  ause, then it is
11670 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
11680 74 20 6c 69 74 65 72 61 6c 2e 20 20 4f 74 68 65  t literal.  Othe
11690 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20 61  rwise is it is a
116a0 6e 20 0a 69 6e 74 65 67 65 72 20 6c 69 74 65 72  n .integer liter
116b0 61 6c 2e 29 5e 20 20 5e 54 68 65 20 22 45 22 20  al.)^  ^The "E" 
116c0 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20 62  character that b
116d0 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e 65  egins the expone
116e0 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20  ntiation.clause 
116f0 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  of a floating po
11700 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e 20  int literal can 
11710 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72 20  be either upper 
11720 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a 5e  or lower case..^
11730 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74  (The "." charact
11740 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
11750 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61  d .as the decima
11760 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20  l point even if 
11770 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  the locale setti
11780 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22  ng specifies ","
11790 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d   for.this role -
117a0 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20   the use of "," 
117b0 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20  for the decimal 
117c0 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75  point would resu
117d0 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20  lt in.syntactic 
117e0 61 6d 62 69 67 75 69 74 79 2e 29 5e 3c 2f 70 3e  ambiguity.)^</p>
117f0 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67 20  ..<p> ^A string 
11800 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d  constant is form
11810 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20  ed by enclosing 
11820 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69  the.string in si
11830 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e  ngle quotes (').
11840 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f 74    ^A single quot
11850 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72  e within the str
11860 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64  ing can.be encod
11870 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77  ed by putting tw
11880 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  o single quotes 
11890 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e  in a row - as in
118a0 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65   Pascal..C-style
118b0 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74   escapes using t
118c0 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61  he backslash cha
118d0 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73  racter are not s
118e0 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65  upported because
118f0 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74  .they are not st
11900 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f  andard SQL..^BLO
11910 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20 73  B literals are s
11920 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 63  tring literals c
11930 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64 65  ontaining hexade
11940 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a 70  cimal data and.p
11950 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e  receded by a sin
11960 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20 63  gle "x" or "X" c
11970 68 61 72 61 63 74 65 72 2e 20 20 5e 28 46 6f 72  haracter.  ^(For
11980 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c   example:</p>..<
11990 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
119a0 0a 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27  .X'53514C697465'
119b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
119c0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c  ote>)^..<p>.^A l
119d0 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e  iteral value can
119e0 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b   also be the tok
119f0 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a  en "NULL"..</p>.
11a00 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
11a10 74 20 76 61 72 70 61 72 61 6d 20 70 61 72 61 6d  t varparam param
11a20 65 74 65 72 20 70 61 72 61 6d 65 74 65 72 73 20  eter parameters 
11a30 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72  {bound parameter
11a40 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  } {bound paramet
11a50 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50  ers}</tcl>.<h3>P
11a60 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c  arameters</h3>.<
11a70 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22 20  p>.A "variable" 
11a80 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22 20 74  or "parameter" t
11a90 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20 61  oken.specifies a
11aa0 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20   placeholder in 
11ab0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66  the expression f
11ac0 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61 74  or a .value that
11ad0 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74   is filled in at
11ae0 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74   runtime using t
11af0 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  he.[sqlite3_bind
11b00 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65  _blob() | sqlite
11b10 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79  3_bind()] family
11b20 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66   of C/C++ interf
11b30 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72 73  aces..Parameters
11b40 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61   can take severa
11b50 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c  l forms:.</p>..<
11b60 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
11b70 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  le>.<tr>.<td ali
11b80 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
11b90 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
11ba0 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c  <i>NNN</i></td><
11bb0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
11bc0 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73  td>.<td>^(A ques
11bd0 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77  tion mark follow
11be0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c  ed by a number <
11bf0 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20  i>NNN</i> holds 
11c00 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e  a spot for the.N
11c10 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e  NN-th parameter.
11c20 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65    NNN must be be
11c30 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c  tween 1 and [SQL
11c40 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
11c50 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64  _NUMBER].)^.</td
11c60 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
11c70 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11c80 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
11c90 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
11ca0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11cb0 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  d>^A question ma
11cc0 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66  rk that is not f
11cd0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d  ollowed by a num
11ce0 62 65 72 20 63 72 65 61 74 65 73 20 61 20 70 61  ber creates a pa
11cf0 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20 6e  rameter.with a n
11d00 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74 65  umber one greate
11d10 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65  r than the large
11d20 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  st parameter num
11d30 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69  ber already assi
11d40 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d  gned..^If this m
11d50 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
11d60 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72 65  er number is gre
11d70 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54  ater than.[SQLIT
11d80 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
11d90 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61 6e  UMBER], it is an
11da0 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f   error..</td>.</
11db0 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
11dc0 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
11dd0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e  n="top"><b>:</b>
11de0 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
11df0 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
11e00 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f  /td>.<td>^A colo
11e10 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
11e20 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
11e30 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
11e40 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69  r a .[sqlite3_bi
11e50 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
11e60 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  e|named paramete
11e70 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  r] with the name
11e80 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65   :AAAA.  .^(Name
11e90 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  d parameters are
11ea0 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20   also numbered. 
11eb0 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67  The number assig
11ec0 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74  ned is one great
11ed0 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67  er than.the larg
11ee0 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
11ef0 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
11f00 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69  igned.)^ ^If thi
11f10 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61  s means the para
11f20 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61  meter.would be a
11f30 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72  ssigned a number
11f40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53   greater than [S
11f50 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
11f60 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
11f70 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61  s.an error. To a
11f80 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
11f90 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76  it is best to av
11fa0 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64  oid mixing named
11fb0 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61   and numbered.pa
11fc0 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c  rameters.</td>.<
11fd0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
11fe0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11ff0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62  gn="top"><b>@</b
12000 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
12010 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
12020 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61  </td>.<td>^An "a
12030 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78  t" sign works ex
12040 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c  actly like a col
12050 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  on, except that 
12060 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20  the name of.the 
12070 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74 65  parameter create
12080 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e  d is @AAAA.</td>
12090 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
120a0 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
120b0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c  lign="top"><b>$<
120c0 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
120d0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
120e0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64  "></td>.<td>^A d
120f0 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f  ollar-sign follo
12100 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
12110 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68  fier name also h
12120 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
12130 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65  a named.paramete
12140 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  r with the name 
12150 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64  $AAAA.  ^(The id
12160 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e  entifier name in
12170 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69   this case can i
12180 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f  nclude.one or mo
12190 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f  re occurrences o
121a0 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66  f "::" and a suf
121b0 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  fix enclosed in 
121c0 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69  "(...)" containi
121d0 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61  ng.any text at a
121e0 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74  ll.)^  This synt
121f0 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f  ax is the form o
12200 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  f a variable nam
12210 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f  e in the.[http:/
12220 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54  /www.tcl.tk/ | T
12230 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
12240 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
12250 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
12260 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
12270 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
12280 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
12290 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
122a0 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
122b0 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
122c0 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
122d0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
122e0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
122f0 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
12300 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
12310 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
12320 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
12330 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
12340 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
12350 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   NULL.</p>..<p>^
12360 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72 61  The maximum para
12370 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20  meter number is 
12380 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  set at compile-t
12390 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c 49  ime by.the [SQLI
123a0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
123b0 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20 20  NUMBER] macro.  
123c0 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c 20  ^(An individual 
123d0 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
123e0 74 69 6f 6e 73 5d 0a 44 20 63 61 6e 20 72 65 64  tions].D can red
123f0 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d 20  uce its maximum 
12400 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
12410 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69   below the compi
12420 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a  le-time maximum.
12430 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
12440 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51  e3_limit](D, [SQ
12450 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41  LITE_LIMIT_VARIA
12460 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29  BLE_NUMBER],...)
12470 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f   interface.)^.</
12480 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
12490 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45  ment like LIKE E
124a0 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  SCAPE</tcl>.<h3>
124b0 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  The LIKE and GLO
124c0 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  B operators</h3>
124d0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
124e0 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61  erator does a pa
124f0 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63  ttern matching c
12500 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20  omparison. ^The 
12510 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72  operand.to the r
12520 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b 45  ight of the LIKE
12530 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69   operator contai
12540 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  ns the pattern a
12550 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  nd the left hand
12560 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e  .operand contain
12570 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20  s the string to 
12580 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
12590 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c  e pattern...<tcl
125a0 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65 72  >hd_puts "^A per
125b0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25  cent symbol (\"%
125c0 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
125d0 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
125e0 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  any.sequence of 
125f0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
12600 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
12610 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65  tring.  ^An unde
12620 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69  rscore.(\"_\") i
12630 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
12640 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73  rn matches any s
12650 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
12660 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20  in the.string.  
12670 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61 72  ^(Any other char
12680 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69 74  acter matches it
12690 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77 65  self or its lowe
126a0 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71 75  r/upper case.equ
126b0 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61  ivalent (i.e. ca
126c0 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 6d  se-insensitive m
126d0 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41 20  atching).)^  (A 
126e0 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e 6c  bug: ^SQLite onl
126f0 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70  y.understands up
12700 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66  per/lower case f
12710 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
12720 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ers by default. 
12730 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61   ^The.LIKE opera
12740 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73  tor is case sens
12750 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  itive by default
12760 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68 61   for unicode cha
12770 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72 65  racters that are
12780 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43 49  .beyond the ASCI
12790 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65 78  I range.  For ex
127a0 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72  ample,.^the expr
127b0 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62  ession <b>'a'&nb
127c0 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27  sp;LIKE&nbsp;'A'
127d0 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74  </b>.is TRUE but
127e0 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62   <b>'&aelig;'&nb
127f0 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41  sp;LIKE&nbsp;'&A
12800 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41  Elig;'</b> is FA
12810 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a  LSE.)<p>"</tcl>.
12820 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
12830 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
12840 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
12850 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69  hen the expressi
12860 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  on.following the
12870 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20   ESCAPE keyword 
12880 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f  must evaluate to
12890 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73   a string consis
128a0 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65  ting of.a single
128b0 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68 69   character. ^Thi
128c0 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79 20  s character may 
128d0 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c  be used in the L
128e0 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69  IKE pattern.to i
128f0 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70  nclude literal p
12900 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73  ercent or unders
12910 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 2e  core characters.
12920 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68 61   ^The escape.cha
12930 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20  racter followed 
12940 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79 6d  by a percent sym
12950 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73 63  bol (%), undersc
12960 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73 65  ore (_), or a se
12970 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66  cond.instance of
12980 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61 72   the escape char
12990 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61 74  acter itself mat
129a0 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70  ches a.literal p
129b0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75  ercent symbol, u
129c0 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61 20  nderscore, or a 
129d0 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63 68  single escape ch
129e0 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63 74  aracter,.respect
129f0 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20  ively...<p>^The 
12a00 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61  infix LIKE opera
12a10 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
12a20 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
12a30 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  e.application-de
12a40 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
12a50 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f  ons [like(<i>Y</
12a60 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72  i>,<i>X</i>)] or
12a70 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c  .[like(<i>Y</i>,
12a80 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69  <i>X</i>,<i>Z</i
12a90 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70  >)]</a>.</p>..<p
12aa0 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  >^The LIKE opera
12ab0 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20  tor can be made 
12ac0 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 75  case sensitive u
12ad0 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f 73  sing the.[case_s
12ae0 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70 72  ensitive_like pr
12af0 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  agma].</p>..<tcl
12b00 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f  >hd_fragment glo
12b10 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e  b GLOB</tcl>.<p>
12b20 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61 74  ^The GLOB operat
12b30 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  or is similar to
12b40 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20 74   LIKE but uses t
12b50 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f  he Unix.file glo
12b60 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f 72  bbing syntax for
12b70 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e 20   its wildcards. 
12b80 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20   ^Also, GLOB is 
12b90 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c 20  case.sensitive, 
12ba0 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42  unlike LIKE.  ^B
12bb0 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b  oth GLOB and LIK
12bc0 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64 65  E may be precede
12bd0 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79  d by.the NOT key
12be0 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74  word to invert t
12bf0 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20  he sense of the 
12c00 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66 69  test.  ^The infi
12c10 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72  x GLOB .operator
12c20 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
12c30 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66  by calling the f
12c40 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69  unction.[glob(<i
12c50 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12c60 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64  ] and can be mod
12c70 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69 64  ified by overrid
12c80 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69 6f  ing.that functio
12c90 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  n.</p>..<tcl>hd_
12ca0 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70 20  fragment regexp 
12cb0 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e  REGEXP</tcl>.<p>
12cc0 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65 72  ^The REGEXP oper
12cd0 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61  ator is a specia
12ce0 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  l syntax for the
12cf0 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20 66   regexp().user f
12d00 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65  unction.  ^No re
12d10 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e 63  gexp() user func
12d20 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
12d30 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20 73  by default.and s
12d40 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45 47  o use of the REG
12d50 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  EXP operator wil
12d60 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c  l normally resul
12d70 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65  t in an.error me
12d80 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b  ssage.  ^If an [
12d90 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
12da0 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ned SQL function
12db0 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22  ] named "regexp"
12dc0 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75 6e  .is added at run
12dd0 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  -time, then the 
12de0 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50  "<i>X</i> REGEXP
12df0 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61   <i>Y</i>" opera
12e00 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c  tor will.be impl
12e10 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61 6c  emented as a cal
12e20 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69 3e  l to "regexp(<i>
12e30 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22  Y</i>,<i>X</i>)"
12e40 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12e50 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41  ragment match MA
12e60 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  TCH</tcl>.<p>^Th
12e70 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  e MATCH operator
12e80 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
12e90 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74  ntax for the mat
12ea0 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ch().application
12eb0 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
12ec0 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  n.  ^The default
12ed0 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f   match() functio
12ee0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
12ef0 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70  .raises an excep
12f00 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20  tion and is not 
12f10 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f  really useful fo
12f20 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74  r anything..^But
12f30 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20   extensions can 
12f40 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74  override the mat
12f50 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  ch() function wi
12f60 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20  th more.helpful 
12f70 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  logic.</p>..<tcl
12f80 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74  >hd_fragment bet
12f90 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63  ween BETWEEN</tc
12fa0 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45  l>.<h3>The BETWE
12fb0 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  EN operator</h3>
12fc0 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45  .<p>^(The BETWEE
12fd0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c 6f  N operator is lo
12fe0 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65  gically equivale
12ff0 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66 20  nt to a pair of 
13000 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69  comparisons.."<i
13010 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45  >x</i> <b>BETWEE
13020 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c  N</b> <i>y</i> <
13030 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f  b>AND</b> <i>z</
13040 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c 65  i>" is .equivale
13050 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e  nt to ."<i>x</i>
13060 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79  <b>&gt;=</b><i>y
13070 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20  </i> <b>AND</b> 
13080 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d  <i>x</i><b>&lt;=
13090 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78  </b><i>z</i>" ex
130a0 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20 42  cept.that with B
130b0 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78  ETWEEN, the <i>x
130c0 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
130d0 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65  is only evaluate
130e0 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70  d once.)^.^The p
130f0 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68 65  recedence of the
13100 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
13110 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  r is the same as
13120 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65 0a   the precedence.
13130 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e  as operators <b>
13140 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d  ==</b> and <b>!=
13150 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45  </b> and <b>LIKE
13160 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73 20  </b> and groups 
13170 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a  left to right...
13180 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
13190 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70 72   case {CASE expr
131a0 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
131b0 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72 65  3>The CASE expre
131c0 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20  ssion</h3>.<p>A 
131d0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
131e0 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73 69  serves a role si
131f0 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45 4e  milar to IF-THEN
13200 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a 70  -ELSE in other.p
13210 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
13220 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20  ages.  ..<p>The 
13230 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73 73  optional express
13240 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20  ion that occurs 
13250 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 43  in between the C
13260 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ASE keyword and 
13270 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20 6b  the.first WHEN k
13280 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65 64  eyword is called
13290 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70 72   the "base" expr
132a0 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61  ession. ^There a
132b0 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72  re two basic for
132c0 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20 65  ms.of the CASE e
132d0 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65  xpression: those
132e0 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78 70   with a base exp
132f0 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73  ression and thos
13300 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e  e without...<p>^
13310 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f 75  In a CASE withou
13320 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  t a base express
13330 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20 65  ion, each WHEN e
13340 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13350 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20 72  luated.and the r
13360 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61 73  esult treated as
13370 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72   a boolean, star
13380 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c 65  ting with the le
13390 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69  ftmost and conti
133a0 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69 67  nuing.to the rig
133b0 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
133c0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
133d0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65 76  ession is the ev
133e0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  aluation of the 
133f0 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  THEN.expression 
13400 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
13410 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57 48   to the first WH
13420 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
13430 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0a  at evaluates to.
13440 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f  true. ^Or, if no
13450 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
13460 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
13470 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68 65  ate to true, the
13480 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75   result of.evalu
13490 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
134a0 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e  xpression, if an
134b0 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  y. ^If there is 
134c0 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  no ELSE expressi
134d0 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74  on and.none of t
134e0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
134f0 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74 68  ons are true, th
13500 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72  en the overall r
13510 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a  esult is NULL...
13520 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c  <p>^A NULL resul
13530 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  t is considered 
13540 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61 6c  untrue when eval
13550 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d  uating WHEN term
13560 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  s...<p>^In a CAS
13570 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  E with a base ex
13580 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62 61  pression, the ba
13590 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  se expression is
135a0 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74 0a   evaluated just.
135b0 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65 73  once and the res
135c0 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64 20  ult is compared 
135d0 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61 6c  against the eval
135e0 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 57  uation of each W
135f0 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20  HEN .expression 
13600 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
13610 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
13620 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
13630 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a 65  ession is the .e
13640 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
13650 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   THEN expression
13660 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
13670 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
13680 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 66  HEN.expression f
13690 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  or which the com
136a0 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
136b0 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66   ^Or, if none of
136c0 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65 73   the WHEN.expres
136d0 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
136e0 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c 20  o a value equal 
136f0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
13700 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  ession, the resu
13710 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt.of evaluating
13720 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
13730 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49  sion, if any. ^I
13740 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c  f there is no EL
13750 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  SE expression an
13760 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  d.none of the WH
13770 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 70  EN expressions p
13780 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74 20  roduce a result 
13790 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73  equal to the bas
137a0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68  e expression,.th
137b0 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74  e overall result
137c0 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57   is NULL...<p>^W
137d0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61 20  hen comparing a 
137e0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
137f0 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20 65  against a WHEN e
13800 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 73  xpression, the s
13810 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ame.collating se
13820 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74 79  quence, affinity
13830 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c  , and NULL-handl
13840 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79 20  ing rules apply 
13850 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20 65  as if the.base e
13860 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57 48  xpression and WH
13870 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  EN expression ar
13880 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 74  e respectively t
13890 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67  he left- and.rig
138a0 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73  ht-hand operands
138b0 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d   of an <big><b>=
138c0 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61  </b></big> opera
138d0 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65  tor.</p> ^If the
138e0 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69 6f   base .expressio
138f0 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  n is NULL then t
13900 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
13910 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73 20   CASE is always 
13920 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20 65  the result .of e
13930 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
13940 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66  SE expression if
13950 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e   it exists, or N
13960 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ULL if it does n
13970 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f  ot...<p>^Both fo
13980 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45 20  rms of the CASE 
13990 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20 6c  expression use l
139a0 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69  azy, or short-ci
139b0 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74 69  rcuit, .evaluati
139c0 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e  on...<p>^(The on
139d0 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
139e0 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  tween the follow
139f0 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78 70  ing two CASE exp
13a00 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61 74  ressions is that
13a10 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65   .the <i>x</i> e
13a20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13a30 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20 6f  luated exactly o
13a40 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73 74  nce in the first
13a50 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69   example but .mi
13a60 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ght be evaluated
13a70 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
13a80 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a  in the second:..
13a90 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41  <ul><pre>.<li>CA
13aa0 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48 45  SE x WHEN w1 THE
13ab0 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48 45  N r1 WHEN w2 THE
13ac0 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
13ad0 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78  .<li>CASE WHEN x
13ae0 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e  =w1 THEN r1 WHEN
13af0 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c   x=w2 THEN r2 EL
13b00 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e  SE r3 END.</pre>
13b10 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68  </ul>)^...<tcl>h
13b20 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70  d_fragment in_op
13b30 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IN operator} {
13b40 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d  NOT IN operator}
13b50 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49  </tcl>.<h3>The I
13b60 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65  N and NOT IN ope
13b70 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
13b80 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49  The IN and NOT I
13b90 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b 65  N operators take
13ba0 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61 72   a single scalar
13bb0 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a   operand on the.
13bc0 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74 6f  left and a vecto
13bd0 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
13be0 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62 79   right.formed by
13bf0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 73   an explicit lis
13c00 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  t of zero or mor
13c10 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79 20  e scalars or by 
13c20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75 65  a .single subque
13c30 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ry..^When the ri
13c40 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
13c50 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
13c60 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
13c70 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
13c80 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  ery must have a 
13c90 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63 6f  single result co
13ca0 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20  lumn..^When the 
13cb0 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73  right operand is
13cc0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74   an empty set, t
13cd0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20  he result of IN 
13ce0 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65  is false and the
13cf0 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49  .result of NOT I
13d00 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61 72  N is true, regar
13d10 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66  dless of the lef
13d20 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76  t operand and ev
13d30 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f  en if the.left o
13d40 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
13d50 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  ^(The result of 
13d60 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13d70 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74 65  operator is dete
13d80 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66 6f  rmined by the fo
13d90 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a  llowing.matrix:.
13da0 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65  .<center>.<table
13db0 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a   border=1>.<tr>.
13dc0 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64  <th>Left operand
13dd0 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68   <br>is NULL.<th
13de0 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c  >Right operand <
13df0 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c  br>contains NULL
13e00 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
13e10 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70  nd <br>is an emp
13e20 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20  ty set.<th>Left 
13e30 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62  operand found <b
13e40 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20 6f  r>within right o
13e50 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c  perand.<th>Resul
13e60 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72  t of <br>IN oper
13e70 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20  ator.<th>Result 
13e80 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70  of <br>NOT IN op
13e90 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20  erator.<tr>.<td 
13ea0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13eb0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13ec0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13ed0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
13ee0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13ef0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
13f00 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
13f10 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13f20 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
13f30 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
13f40 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
13f50 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13f60 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13f70 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
13f80 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13f90 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13fa0 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69  r">false.<td ali
13fb0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
13fc0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
13fd0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
13fe0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13ff0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
14000 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
14010 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
14020 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
14030 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
14040 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  rue.<td align="c
14050 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72  enter">false.<tr
14060 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
14070 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
14080 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
14090 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
140a0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
140b0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
140c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
140d0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
140e0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a  nter">NULL.<tr>.
140f0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14100 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
14110 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
14120 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
14130 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
14140 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14150 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
14160 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
14170 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
14180 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
14190 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  LL.</table>.</ce
141a0 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74  nter>)^..<p>^Not
141b0 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61 6c  e that SQLite al
141c0 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74 68  lows the parenth
141d0 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 73  esized list of s
141e0 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a  calar values on.
141f0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
14200 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ide of an IN or 
14210 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
14220 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20 6c  to be an empty l
14230 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68  ist but.most oth
14240 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
14250 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
14260 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20 73   and the SQL92 s
14270 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 0a  tandard require.
14280 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74  the list to cont
14290 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  ain at least one
142a0 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c   element.</p>..<
142b0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
142c0 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70  in_op {EXISTS op
142d0 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49  erator} {NOT EXI
142e0 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  STS operator}</t
142f0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53  cl>.<h3>The EXIS
14300 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  TS operator</h3>
14310 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53  ..<p>^The EXISTS
14320 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73   operator always
14330 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e   evaluates to on
14340 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
14350 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31   values 0 .and 1
14360 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
14370 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
14380 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 61  ment specified a
14390 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  s the right-hand
143a0 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65   .operand of the
143b0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
143c0 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e   would return on
143d0 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20  e or more rows, 
143e0 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20  then the.EXISTS 
143f0 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14400 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65  es to 1. ^If exe
14410 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
14420 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e  T would return.n
14430 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74  o rows at all, t
14440 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f  hen the EXISTS o
14450 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
14460 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68  s to 0. ..<p>^Th
14470 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
14480 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20  mns in each row 
14490 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
144a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
144b0 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68  .(if any) and th
144c0 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65  e specific value
144d0 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65 20  s returned have 
144e0 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
144f0 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20   results.of the 
14500 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e  EXISTS operator.
14510 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c   ^In particular,
14520 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67   rows containing
14530 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
14540 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79  .not handled any
14550 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f   differently fro
14560 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e  m rows without N
14570 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33  ULL values...<h3
14580 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72 69  >Scalar Subqueri
14590 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b  es</h3>..<p>^A [
145a0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
145b0 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61  t enclosed in pa
145c0 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61 70  rentheses may ap
145d0 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61 72  pear as a scalar
145e0 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53  .quantity. ^A [S
145f0 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20 61  ELECT] used as a
14600 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79   scalar quantity
14610 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20 72   must return a r
14620 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20 61  esult set.with a
14630 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
14640 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
14650 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14660 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
14670 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e  e.only column in
14680 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 72   the first row r
14690 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
146a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
146b0 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20   ^If the SELECT 
146c0 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68 61  .yields more tha
146d0 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77  n one result row
146e0 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72  , all rows after
146f0 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20 69   the first are i
14700 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65 20  gnored. ^If.the 
14710 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f  SELECT yields no
14720 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20   rows, then the 
14730 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70  value of the exp
14740 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e  ression is NULL.
14750 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66 20  .^(The LIMIT of 
14760 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
14770 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a 41  y is always 1..A
14780 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20 76  ny other LIMIT v
14790 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74 68  alue given in th
147a0 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69 67  e SQL text is ig
147b0 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c  nored.)^..<p>^Al
147c0 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c 45  l types of [SELE
147d0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  CT] statement, i
147e0 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67 61  ncluding aggrega
147f0 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20  te and compound 
14800 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73 20 28  SELECT.queries (
14810 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79  queries with key
14820 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e  words like UNION
14830 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20   or EXCEPT) are 
14840 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61  allowed as scala
14850 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c  r.subqueries...<
14860 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20  h3>Table Column 
14870 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Names</h3>..<p>^
14880 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  A column name ca
14890 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20  n be any of the 
148a0 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e  names defined in
148b0 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
148c0 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  LE].statement or
148d0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
148e0 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
148f0 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
14900 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
14910 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
14920 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54  _ROWID_</b>"..^T
14930 68 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65  hese special ide
14940 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73  ntifiers all des
14950 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65  cribe the.unique
14960 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68   integer key (th
14970 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63  e [rowid]) assoc
14980 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79  iated with every
14990 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74   .row of every t
149a0 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63 69  able..^The speci
149b0 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  al identifiers o
149c0 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65  nly refer to the
149d0 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20   row key if the 
149e0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
149f0 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f  tatement does no
14a00 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20  t define a real 
14a10 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20  column with the 
14a20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  same name..^The 
14a30 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73 65  rowid can be use
14a40 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65 67  d anywhere a reg
14a50 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20  ular.column can 
14a60 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  be used.</p>..<p
14a70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
14a80 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65  tement used as e
14a90 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20 73  ither a scalar s
14aa0 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74 68  ubquery or as th
14ab0 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  e .right-hand op
14ac0 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20  erand of an IN, 
14ad0 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53  NOT IN or EXISTS
14ae0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
14af0 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e  contain .referen
14b00 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  ces to columns i
14b10 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  n the outer quer
14b20 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75 65  y. Such a subque
14b30 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61  ry is known as.a
14b40 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
14b50 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61  uery. ^A correla
14b60 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20  ted subquery is 
14b70 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63 68  reevaluated each
14b80 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74   time.its result
14b90 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41   is required. ^A
14ba0 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73  n uncorrelated s
14bb0 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c 75  ubquery is evalu
14bc0 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61  ated only once.a
14bd0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 65  nd the result re
14be0 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72  used as necessar
14bf0 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  y...<tcl>hd_frag
14c00 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43  ment castexpr {C
14c10 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20  AST expression} 
14c20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43  {CAST} {cast} {C
14c30 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  AST operator}</t
14c40 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70  cl>.<h3>CAST exp
14c50 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
14c60 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73  p>A CAST express
14c70 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
14c80 22 43 41 53 54 28 26 6c 74 3b 65 78 70 72 26 67  "CAST(&lt;expr&g
14c90 74 3b 20 54 4f 20 26 6c 74 3b 74 79 70 65 2d 6e  t; TO &lt;type-n
14ca0 61 6d 65 26 67 74 3b 29 22 0a 69 73 20 75 73 65  ame&gt;)".is use
14cb0 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  d to convert the
14cc0 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78   value of &lt;ex
14cd0 70 72 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66  pr&gt; to .a dif
14ce0 66 65 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20  ferent [storage 
14cf0 63 6c 61 73 73 5d 20 73 70 65 63 69 66 69 65 64  class] specified
14d00 20 62 79 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d   by &lt;type-nam
14d10 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53 54 20 63  e&gt;..^A CAST c
14d20 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d  onversion is sim
14d30 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76  ilar to the conv
14d40 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  ersion that take
14d50 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b  s.place when a [
14d60 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
14d70 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61   is applied to a
14d80 20 76 61 6c 75 65 20 65 78 63 65 70 74 20 74 68   value except th
14d90 61 74 20 77 69 74 68 0a 74 68 65 20 43 41 53 54  at with.the CAST
14da0 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f   operator the co
14db0 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20  nversion always 
14dc0 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e  takes place even
14dd0 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
14de0 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72  on.lossy and irr
14df0 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65  eversible, where
14e00 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  as column affini
14e10 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20  ty only changes 
14e20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66  the data type.of
14e30 20 61 20 76 61 6c 75 65 20 69 66 20 74 68 65 20   a value if the 
14e40 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65  change is lossle
14e50 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
14e60 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76  e...<p>^If the v
14e70 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14e80 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68  &gt; is NULL, th
14e90 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
14ea0 20 74 68 65 20 43 41 53 54 0a 65 78 70 72 65 73   the CAST.expres
14eb0 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c  sion is also NUL
14ec0 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  L. ^Otherwise, t
14ed0 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73  he storage class
14ee0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69   of the result.i
14ef0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
14f00 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75  applying the [ru
14f10 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e  les for determin
14f20 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  ing column affin
14f30 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b  ity] to.the &lt;
14f40 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 0a  type-name&gt;...
14f50 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
14f60 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66  .<tr>.  <th> Aff
14f70 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74 79 70  inity of &lt;typ
14f80 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68  e-name&gt;.  <th
14f90 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f  > Conversion Pro
14fa0 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c  cessing.<tr>.  <
14fb0 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e  td> NONE .  <td>
14fc0 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
14fd0 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d  e to a &lt;type-
14fe0 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e 6f  name&gt; with no
14ff0 20 61 66 66 69 6e 69 74 79 20 63 61 75 73 65 73   affinity causes
15000 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20   the value to.  
15010 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
15020 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74  o a BLOB.  ^Cast
15030 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f  ing to a BLOB co
15040 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20  nsists of first 
15050 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61  casting.  the va
15060 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74  lue to TEXT in t
15070 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
15080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
15090 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20  nnection, then. 
150a0 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
150b0 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65  e resulting byte
150c0 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42   sequence as a B
150d0 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61  LOB instead of a
150e0 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20  s TEXT...<tr>.  
150f0 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e  <td> TEXT.  <td>
15100 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42   ^To cast a BLOB
15110 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20   value to TEXT, 
15120 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
15130 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20  bytes that make 
15140 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73  up the.  BLOB is
15150 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
15160 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69  text encoded usi
15170 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
15180 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a  encoding..  <p>.
15190 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49     ^Casting an I
151a0 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76  NTEGER or REAL v
151b0 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72  alue into TEXT r
151c0 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65  enders the value
151d0 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20   as if via .    
151e0 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  [sqlite3_snprint
151f0 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74  f()] except that
15200 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54   the resulting T
15210 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e  EXT uses the [en
15220 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74  coding] of.    t
15230 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
15240 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20  ection...<tr>.  
15250 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e  <td> REAL.  <td>
15260 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
15270 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61   BLOB value to a
15280 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65   REAL, the value
15290 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
152a0 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
152b0 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
152c0 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
152d0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41  EXT value to REA
152e0 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  L, the longest p
152f0 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
15300 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
15310 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
15320 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
15330 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20   real number is 
15340 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
15350 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
15360 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
15370 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
15380 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
15390 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
153a0 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61      TEXT value a
153b0 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20  re ignored when 
153c0 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20  converging from 
153d0 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28  TEXT to REAL. ^(
153e0 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20  If there is.    
153f0 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68      no prefix th
15400 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
15410 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
15420 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
15430 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20  lt of the.      
15440 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20    conversion is 
15450 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c  0.0.)^..<tr>.  <
15460 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74  td> INTEGER.  <t
15470 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
15480 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
15490 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61   INTEGER, the va
154a0 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
154b0 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
154c0 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
154d0 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
154e0 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
154f0 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e  INTEGER, the lon
15500 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72  gest possible pr
15510 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20  efix of.        
15520 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63  the value that c
15530 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
15540 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
15550 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
15560 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
15570 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
15580 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
15590 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
155a0 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
155b0 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
155c0 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f  XT value when co
155d0 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45  nverting from TE
155e0 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72  XT to INTEGER ar
155f0 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74  e ignored. ^If t
15600 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73 20  here.        is 
15610 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63  no prefix that c
15620 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
15630 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
15640 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
15650 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68  lt.        of th
15660 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
15670 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20  0...      <p>^A 
15680 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76  cast of a REAL v
15690 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54  alue into an INT
156a0 45 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20  EGER results in 
156b0 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
156c0 20 20 62 65 74 77 65 65 6e 20 74 68 65 20 52 45    between the RE
156d0 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72  AL value and zer
156e0 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73  o that is closes
156f0 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61  t to the REAL va
15700 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61  lue..      ^If a
15710 20 52 45 41 4c 20 69 73 20 67 72 65 61 74 65 72   REAL is greater
15720 20 74 68 61 6e 20 74 68 65 20 67 72 65 61 74 65   than the greate
15730 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e  st possible sign
15740 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72  ed.      integer
15750 20 28 2b 39 32 32 33 33 37 32 30 33 36 38 35 34   (+9223372036854
15760 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
15770 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 67   result is the g
15780 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65  reatest possible
15790 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
157a0 74 65 67 65 72 20 61 6e 64 20 69 66 20 74 68 65  teger and if the
157b0 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68   REAL is less th
157c0 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  an the least pos
157d0 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20  sible signed.   
157e0 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32     integer (-922
157f0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
15800 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
15810 74 20 69 73 20 74 68 65 20 6c 65 61 73 74 20 70  t is the least p
15820 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69  ossible.      si
15830 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20  gned integer... 
15840 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f       <p>Prior to
15850 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
15860 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67 20 61  3.8.2, casting a
15870 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61   REAL value grea
15880 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b  ter than.      +
15890 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
158a0 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e  807.0 into an in
158b0 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20 69  teger resulted i
158c0 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74  n the most negat
158d0 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ive.      intege
158e0 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  r, -922337203685
158f0 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20 62  4775808.  This b
15900 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e  ehavior was mean
15910 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65  t to emulate the
15920 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20  .      behavior 
15930 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64 77  of x86/x64 hardw
15940 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74  are when doing t
15950 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61  he equivalent ca
15960 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  st...<tr>.  <td>
15970 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20   NUMERIC.  <td> 
15980 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20  ^Casting a TEXT 
15990 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  or BLOB value in
159a0 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74  to NUMERIC first
159b0 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20   does a forced. 
159c0 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74    conversion int
159d0 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20  o REAL but then 
159e0 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73  further converts
159f0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
15a00 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61   INTEGER if.   a
15a10 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63  nd only if the c
15a20 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52  onversion from R
15a30 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69  EAL to INTEGER i
15a40 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72  s lossless and r
15a50 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68  eversible..   Th
15a60 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  is is the only c
15a70 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65  ontext in SQLite
15a80 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52   where the NUMER
15a90 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b  IC and INTEGER [
15aa0 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62  affinities].   b
15ab0 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
15ac0 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69  y..   <p> ^Casti
15ad0 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54  ng a REAL or INT
15ae0 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55  EGER value to NU
15af0 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70  MERIC is a no-op
15b00 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c  , even if a real
15b10 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20  .   value could 
15b20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
15b30 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
15b40 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c  teger...</tr>..<
15b50 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74  /table>..<p>^Not
15b60 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  e that the resul
15b70 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
15b80 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75  ny non-BLOB valu
15b90 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61  e into a .BLOB a
15ba0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66 72  nd the result fr
15bb0 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42  om casting any B
15bc0 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
15bd0 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a   non-BLOB value.
15be0 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
15bf0 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
15c00 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62 61  ether the databa
15c10 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73  se [encoding] is
15c20 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65   UTF-8,.UTF-16be
15c30 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a  , or UTF-16le...
15c40 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15c50 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62  t booleanexpr {b
15c60 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
15c70 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f  n}</tcl>.<h3>Boo
15c80 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  lean Expressions
15c90 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  </h3>..<p>The SQ
15ca0 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
15cb0 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74  res several cont
15cc0 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65 78  exts where an ex
15cd0 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61  pression is .eva
15ce0 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
15cf0 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20  esult converted 
15d00 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72  to a boolean (tr
15d10 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c  ue or false) val
15d20 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78  ue. These.contex
15d30 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a  ts are:..  <ul>.
15d40 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45      <li> the WHE
15d50 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  RE clause of a S
15d60 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72  ELECT, UPDATE or
15d70 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
15d80 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
15d90 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
15da0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20  se of a join in 
15db0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15dc0 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
15dd0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f   HAVING clause o
15de0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
15df0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15e00 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
15e10 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72  f an SQL trigger
15e20 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74  , and.    <li> t
15e30 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
15e40 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d  r clauses of som
15e50 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
15e60 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e  ns..  </ul>..<p>
15e70 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  ^(To convert the
15e80 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53   results of an S
15e90 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  QL expression to
15ea0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
15eb0 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63  , SQLite.first c
15ec0 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  asts the result 
15ed0 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
15ee0 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
15ef0 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65  ay as a .[CAST e
15f00 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 4e 55  xpression]. A NU
15f10 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c 75 65  LL or zero value
15f20 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
15f30 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
15f40 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64 65 72  0.0) is.consider
15f50 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e 20  ed to be false. 
15f60 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  All other values
15f70 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
15f80 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f  true.)^..<p>^(Fo
15f90 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76  r example, the v
15fa0 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c  alues NULL, 0.0,
15fb0 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e   0, 'english' an
15fc0 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f  d '0' are all co
15fd0 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66  nsidered.to be f
15fe0 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73  alse.)^ ^(Values
15ff0 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30   1, 1.0, 0.1, -0
16000 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68  .1 and '1english
16010 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  ' are considered
16020 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a   to .be true.)^.
16030 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f  .<h3>Functions</
16040 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f  h3>.<p>^Both [co
16050 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61  refunc|simple] a
16060 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  nd [aggfunc|aggr
16070 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73  egate] functions
16080 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e 0a   are supported..
16090 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69 6f  (For presentatio
160a0 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d 70  n purposes, simp
160b0 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  le functions are
160c0 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76 69   further subdivi
160d0 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75  ded into.[corefu
160e0 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74 69  nc | core functi
160f0 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66 75  ons] and [datefu
16100 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20 66  nc | date-time f
16110 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73  unctions].).^A s
16120 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63  imple function c
16130 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e  an be used in an
16140 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e  y expression.  ^
16150 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  Simple functions
16160 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74   return.a result
16170 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73   immediately bas
16180 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75  ed on their inpu
16190 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  ts.  ^Aggregate 
161a0 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e  functions.may on
161b0 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20  ly be used in a 
161c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
161d0 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66 75  .  ^Aggregate fu
161e0 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a  nctions compute.
161f0 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63 72  their result acr
16200 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20  oss all rows of 
16210 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c  the result set.<
16220 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
16230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16270 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
16280 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e  n {Core Function
16290 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f  s} corefunc {*co
162a0 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e  refunc}.proc fun
162b0 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
162c0 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
162d0 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20  hd_puts {<tr>}. 
162e0 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73   regsub -all {\s
162f0 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim 
16300 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e  $syntax] {<br />
16310 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
16320 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d  b -all {\(([^*)]
16330 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28  +)\)} $syntax {(
16340 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74  <i>\1</i>)} synt
16350 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
16360 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f   {,} $syntax {</
16370 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20  i>,<i>} syntax. 
16380 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69   regsub -all {<i
16390 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79  >\.\.\.</i>} $sy
163a0 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61  ntax {...} synta
163b0 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64  x.  hd_puts "<td
163c0 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20   valign=\"top\" 
163d0 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20  align=\"right\" 
163e0 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a  width=\"120\">".
163f0 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
16400 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
16410 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
16420 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
16430 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
16440 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
16450 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
16460 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
16470 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
16480 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
16490 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
164a0 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
164b0 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
164c0 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
164d0 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
164e0 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
164f0 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
16500 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
16510 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
16520 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74  puts "$syntax</t
16530 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  d>".  hd_puts {<
16540 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
16550 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24  }.  hd_resolve $
16560 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b  desc.  hd_puts {
16570 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f  </td></tr>}.}.</
16580 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72  tcl>..<p>The cor
16590 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
165a0 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
165b0 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
165c0 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44  . .[datefunc | D
165d0 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66  ate &amp; Time f
165e0 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61  unctions] and.[a
165f0 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggfunc | aggrega
16600 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  te functions] ar
16610 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
16620 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
16630 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
16640 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
16650 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
16660 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
16670 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
16680 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
16690 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
166a0 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
166b0 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f  .</p>..<table bo
166c0 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
166d0 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e  ng=10>.<tcl>.fun
166e0 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d  cdef {abs(X)} {}
166f0 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29   {.  ^The abs(X)
16700 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16710 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  s the absolute v
16720 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65  alue of the nume
16730 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58  ric.  argument X
16740 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72  .  ^Abs(X) retur
16750 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20  ns NULL if X is 
16760 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58  NULL. .  ^(Abs(X
16770 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69 66 20  ) return 0.0 if 
16780 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  X is a string or
16790 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e   blob.  that can
167a0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
167b0 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61   to a numeric va
167c0 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73  lue.)^  ^If X is
167d0 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20   the .  integer 
167e0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
167f0 35 38 30 38 20 74 68 65 6e 20 61 62 73 28 58 29  5808 then abs(X)
16800 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
16810 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72  er overflow.  er
16820 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20  ror since there 
16830 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74  is no equivalent
16840 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74   positive 64-bit
16850 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20   two complement 
16860 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  value..}..funcde
16870 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  f {changes()} {}
16880 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65   {.  ^The change
16890 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  s() function ret
168a0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
168b0 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  of database rows
168c0 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67   that were chang
168d0 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64  ed.  or inserted
168e0 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
168f0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
16900 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52   completed INSER
16910 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20  T, DELETE,.  or 
16920 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
16930 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73  , exclusive of s
16940 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77  tatements in low
16950 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72  er-level trigger
16960 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65  s..  ^The change
16970 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
16980 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
16990 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
169a0 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
169b0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
169c0 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
169d0 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
169e0 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
169f0 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
16a00 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c  {char(X1,X2,...,
16a10 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68  XN)} {} {.  ^(Th
16a20 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e  e char(X1,X2,...
16a30 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ,XN) function re
16a40 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63  turns a string c
16a50 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61  omposed of chara
16a60 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68 65  cters having the
16a70 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65  .   unicode code
16a80 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66   point values of
16a90 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68 72   integers X1 thr
16aa0 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74  ough XN, respect
16ab0 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ively.)^.}..func
16ac0 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c  def {coalesce(X,
16ad0 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  Y,...)} {} {.  ^
16ae0 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66  The coalesce() f
16af0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
16b00 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
16b10 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
16b20 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
16b30 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74   if all argument
16b40 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f  s are NULL.  ^Co
16b50 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68 61  alesce() must ha
16b60 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32  ve at least .  2
16b70 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
16b80 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59  uncdef {glob(X,Y
16b90 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67  )} {} {.  ^The g
16ba0 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
16bb0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
16bc0 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73  to the.  express
16bd0 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58  ion "<b>Y GLOB X
16be0 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68  </b>"..  Note th
16bf0 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61  at the X and Y a
16c00 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76  rguments are rev
16c10 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f  ersed in the glo
16c20 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  b() function.  r
16c30 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
16c40 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72  nfix [GLOB] oper
16c50 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20  ator..  ^If the 
16c60 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
16c70 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
16c80 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f  rface is used to
16c90 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  .  override the 
16ca0 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
16cb0 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72  on with an alter
16cc0 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
16cd0 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65  ation then.  the
16ce0 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
16cf0 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65   will invoke the
16d00 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70   alternative imp
16d10 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a  lementation..}..
16d20 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28  funcdef {ifnull(
16d30 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
16d40 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
16d50 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
16d60 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
16d70 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
16d80 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
16d90 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61  both arguments a
16da0 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c  re NULL.  ^Ifnul
16db0 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78  l() must have ex
16dc0 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74  actly 2 argument
16dd0 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c  s..  ^The ifnull
16de0 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  () function is e
16df0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f  quivalent to [co
16e00 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74  alesce()] with t
16e10 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a  wo arguments..}.
16e20 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28  .funcdef {instr(
16e30 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
16e40 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e  e instr(X,Y) fun
16e50 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20  ction finds the 
16e60 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
16e70 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74   of string Y wit
16e80 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20  hin .  string X 
16e90 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
16ea0 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20  number of prior 
16eb0 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20  characters plus 
16ec0 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69  1, or 0 if.  Y i
16ed0 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20  s nowhere found 
16ee0 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c  within X..  ^Or,
16ef0 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20   if X and Y are 
16f00 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e  both BLOBs, then
16f10 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75   instr(X,Y) retu
16f20 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74  rns one.  more t
16f30 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62  han the number b
16f40 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68  ytes prior to th
16f50 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
16f60 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66  ce of Y, or 0 if
16f70 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63  .  Y does not oc
16f80 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74  cur anywhere wit
16f90 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74  hin X..  ^If bot
16fa0 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e  h arguments X an
16fb0 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59  d Y to instr(X,Y
16fc0 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ) are non-NULL a
16fd0 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73  nd are not BLOBs
16fe0 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65  .  then both are
16ff0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
17000 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65  strings..  ^If e
17010 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65  ither X or Y are
17020 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58   NULL in instr(X
17030 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ,Y) then the res
17040 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a  ult is NULL..}..
17050 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d  funcdef {hex(X)}
17060 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
17070 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
17080 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
17090 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
170a0 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
170b0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
170c0 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
170d0 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
170e0 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
170f0 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
17100 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
17110 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
17120 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
17130 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
17140 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
17150 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
17160 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
17170 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
17180 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
17190 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
171a0 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
171b0 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
171c0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
171d0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
171e0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
171f0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
17200 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
17210 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
17220 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
17230 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
17240 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
17250 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
17260 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
17270 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17280 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
17290 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
172a0 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
172b0 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
172c0 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
172d0 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
172e0 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
172f0 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
17300 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
17310 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
17320 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
17330 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
17340 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
17350 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
17360 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
17370 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
17380 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
17390 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
173a0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
173b0 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
173c0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
173d0 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
173e0 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
173f0 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
17400 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
17410 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
17420 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
17430 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
17440 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
17450 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
17460 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
17470 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
17480 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
17490 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
174a0 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
174b0 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
174c0 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
174d0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
174e0 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
174f0 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
17500 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
17510 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
17520 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
17530 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
17540 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
17550 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
17560 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
17570 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
17580 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
17590 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
175a0 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
175b0 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
175c0 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
175d0 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
175e0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
175f0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
17600 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
17610 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
17620 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
17630 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
17640 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
17650 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
17660 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
17670 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
17680 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
17690 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
176a0 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
176b0 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
176c0 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
176d0 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
176e0 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
176f0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
17700 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
17710 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
17720 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
17730 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
17740 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
17750 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
17760 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
17770 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a   specified..}...
17780 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68  funcdef {likelih
17790 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ood(X,Y)} {} {. 
177a0 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
177b0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
177c0 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20  eturns argument 
177d0 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
177e0 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20  (The value Y in 
177f0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
17800 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
17810 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e  ng point constan
17820 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20  t.  between 0.0 
17830 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69  and 1.0, inclusi
17840 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b  ve.)^.  ^The lik
17850 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74  elihood(X) funct
17860 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
17870 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
17880 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
17890 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
178a0 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
178b0 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67  PU cycles during
178c0 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61   run-time.  (tha
178d0 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
178e0 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
178f0 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
17900 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
17910 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
17920 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
17930 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
17940 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
17950 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
17960 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
17970 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74  lean that is.  t
17980 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61  rue with a proba
17990 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78  bility of approx
179a0 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54  imately Y..  ^(T
179b0 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  he [unlikely(X)]
179c0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
179d0 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
179e0 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29  lihood(X,0.0625)
179f0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
17a00 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
17a10 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  ) load_extension
17a20 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
17a30 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
17a40 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  n(X,Y) function 
17a50 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78  loads [SQLite ex
17a60 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66  tensions] out of
17a70 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69   the shared.  li
17a80 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64  brary file named
17a90 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74   X using the ent
17aa0 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68  ry point Y.  ^Th
17ab0 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64  e result of load
17ac0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69  _extension().  i
17ad0 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e  s always a NULL.
17ae0 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74    ^If Y is omitt
17af0 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  ed then the defa
17b00 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ult entry point 
17b10 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20  name is used..  
17b20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
17b30 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
17b40 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69  aises an excepti
17b50 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  on if the extens
17b60 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c  ion fails to.  l
17b70 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a  oad or initializ
17b80 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20  e correctly...  
17b90 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  <p>^The load_ext
17ba0 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
17bb0 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  n will fail if t
17bc0 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74  he extension att
17bd0 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69  empts to .  modi
17be0 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20  fy or delete an 
17bf0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  SQL function or 
17c00 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17c10 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65  ce.  ^The.  exte
17c20 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65  nsion can add ne
17c30 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  w functions or c
17c40 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17c50 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20  es, but cannot. 
17c60 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
17c70 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74  e existing funct
17c80 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
17c90 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63 61  g sequences beca
17ca0 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63  use.  those func
17cb0 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c  tions and/or col
17cc0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
17cd0 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 65   might be used e
17ce0 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68  lsewhere.  in th
17cf0 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  e currently runn
17d00 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ing SQL statemen
17d10 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65  t.  To load an e
17d20 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20  xtension that.  
17d30 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74  changes or delet
17d40 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  es functions or 
17d50 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17d60 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b  ces, use the.  [
17d70 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
17d80 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67  ension()] C-lang
17d90 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20  uage API.</p>.. 
17da0 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79   <p>For security
17db0 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73   reasons, extens
17dc0 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75  ion loaded is tu
17dd0 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66 61  rned off by defa
17de0 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62  ult and must.  b
17df0 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70  e enabled by a p
17e00 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71  rior call to [sq
17e10 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
17e20 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c  d_extension()].<
17e30 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  /p>.}..funcdef {
17e40 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20  lower(X)} {} {. 
17e50 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66   ^The lower(X) f
17e60 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
17e70 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67  a copy of string
17e80 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49   X with all ASCI
17e90 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63  I characters.  c
17ea0 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65  onverted to lowe
17eb0 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65  r case.  ^The de
17ec0 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c  fault built-in l
17ed0 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20  ower() function 
17ee0 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49  works.  for ASCI
17ef0 49 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c  I characters onl
17f00 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63  y.  To do case c
17f10 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f  onversions on no
17f20 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63  n-ASCII.  charac
17f30 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49  ters, load the I
17f40 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a  CU extension..}.
17f50 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28  .funcdef {ltrim(
17f60 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) ltrim(X,Y)} {
17f70 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d  } {.  ^The ltrim
17f80 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
17f90 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
17fa0 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
17fb0 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
17fc0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
17fd0 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
17fe0 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  m the left side 
17ff0 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
18000 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
18010 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20  itted, ltrim(X) 
18020 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
18030 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
18040 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  e.  of X..}..fun
18050 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e  cdef {max(X,Y,..
18060 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e  .)} {*maxCoreFun
18070 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51  c *max {max() SQ
18080 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  L function}} {. 
18090 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
180a0 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
180b0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
180c0 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
180d0 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c  e .  maximum val
180e0 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55  ue, or return NU
180f0 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65  LL if any argume
18100 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e  nt is NULL. .  ^
18110 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
18120 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f  nt max() functio
18130 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61  n searches its a
18140 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
18150 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f  ft to right.  fo
18160 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
18170 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  at defines a col
18180 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
18190 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
181a0 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69  llating.  functi
181b0 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
181c0 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  g comparisons.  
181d0 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  ^If none of the 
181e0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78  arguments to max
181f0 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f  ().  define a co
18200 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
18210 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52  , then the BINAR
18220 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  Y collating func
18230 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  tion is used..  
18240 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78  Note that <b>max
18250 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
18260 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
18270 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
18280 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
18290 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
182a0 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c  .  [minAggFunc |
182b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
182c0 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e  ion] if given on
182d0 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
182e0 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
182f0 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {min(X,Y,...)} 
18300 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d  {*minCoreFunc *m
18310 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75  in {min() SQL fu
18320 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
18330 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
18340 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
18350 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
18360 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20  ment with the.  
18370 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20  minimum value.. 
18380 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
18390 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74  ment min() funct
183a0 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
183b0 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
183c0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
183d0 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
183e0 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
183f0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
18400 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
18410 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
18420 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
18430 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
18440 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
18450 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
18460 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  in().  define a 
18470 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18480 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
18490 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
184a0 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
184b0 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
184c0 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  in()</b> is a si
184d0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
184e0 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
184f0 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
18500 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20  but operates as 
18510 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e  an .  [maxAggFun
18520 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75  c | aggregate fu
18530 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e  nction] if given
18540 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  .  only a single
18550 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75   argument..}..fu
18560 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c  ncdef {nullif(X,
18570 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
18580 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63  nullif(X,Y) func
18590 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73  tion returns its
185a0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
185b0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
185c0 20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74   are.  different
185d0 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65   and NULL if the
185e0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
185f0 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e  he same.  ^The n
18600 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
18610 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69  ion.  searches i
18620 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
18630 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
18640 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
18650 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20  that defines a. 
18660 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
18670 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
18680 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
18690 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
186a0 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e  ing.  comparison
186b0 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20  s.  ^If neither 
186c0 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c  argument to null
186d0 69 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63  if() defines a c
186e0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
186f0 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e  n.  then the BIN
18700 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a  ARY is used..}..
18710 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28  funcdef {printf(
18720 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20  FORMAT,...)} {} 
18730 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66  {.  ^(The printf
18740 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c  (FORMAT,...) SQL
18750 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20   function works 
18760 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65  like the [sqlite
18770 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c  3_mprintf()] C-l
18780 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69  anguage.  functi
18790 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74  on and the print
187a0 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f  f() function fro
187b0 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
187c0 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68   library.)^.  Th
187d0 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
187e0 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72   is a format str
187f0 69 6e 67 20 74 68 61 74 20 73 70 65 63 69 66 69  ing that specifi
18800 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72  es how to constr
18810 75 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20  uct the output. 
18820 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61   string using va
18830 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  lues taken from 
18840 73 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d  subsequent argum
18850 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46  ents.  ^If the F
18860 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69  ORMAT argument i
18870 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e  s.  missing or N
18880 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
18890 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54  ult is NULL.  ^T
188a0 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20  he %n format is 
188b0 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
188c0 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20   and.  does not 
188d0 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d  consume an argum
188e0 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f  ent.  ^The %p fo
188f0 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73  rmat is an alias
18900 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25   for %X.  ^The %
18910 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e  z format.  is in
18920 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69  terchangeable wi
18930 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65  th %s.  ^(If the
18940 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61  re are too few a
18950 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  rguments in the 
18960 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20  argument list,. 
18970 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e   missing argumen
18980 74 73 20 61 72 65 20 61 73 73 75 6d 65 64 20 74  ts are assumed t
18990 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61  o have a NULL va
189a0 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20 74 72  lue, which is tr
189b0 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20  anslated into.  
189c0 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d  0 or 0.0 for num
189d0 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20  eric formats or 
189e0 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
189f0 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a  for %s.)^.}.  ..
18a00 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
18a10 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71  )} {} {.  ^The q
18a20 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  uote(X) function
18a30 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78   returns the tex
18a40 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65  t of an SQL lite
18a50 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74  ral which.  is t
18a60 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
18a70 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c  argument suitabl
18a80 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20  e for inclusion 
18a90 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74  into an SQL stat
18aa0 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67  ement..  ^String
18ab0 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64  s are surrounded
18ac0 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65   by single-quote
18ad0 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f  s with escapes o
18ae0 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65  n interior quote
18af0 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20  s.  as needed.  
18b00 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64  ^BLOBs are encod
18b10 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
18b20 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53  l literals..  ^S
18b30 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65  trings with embe
18b40 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74  dded NUL charact
18b50 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ers cannot be re
18b60 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72  presented as str
18b70 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69  ing.  literals i
18b80 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20  n SQL and hence 
18b90 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72  the returned str
18ba0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74  ing literal is t
18bb0 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20  runcated prior. 
18bc0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
18bd0 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  L..}..funcdef {r
18be0 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
18bf0 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75  ^The random() fu
18c00 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18c10 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69   pseudo-random i
18c20 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e  nteger.  between
18c30 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
18c40 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33  75808 and +92233
18c50 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a  72036854775807..
18c60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
18c70 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  omblob(N)} {} {.
18c80 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f    ^The randomblo
18c90 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
18ca0 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62  turn an N-byte b
18cb0 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
18cc0 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62  seudo-random.  b
18cd0 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c  ytes. ^If N is l
18ce0 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20  ess than 1 then 
18cf0 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20  a 1-byte random 
18d00 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64  blob is returned
18d10 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
18d20 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
18d30 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
18d40 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
18d50 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
18d60 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
18d70 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
18d80 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
18d90 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
18da0 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
18db0 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
18dc0 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
18dd0 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
18de0 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
18df0 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
18e00 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
18e10 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
18e20 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58    ^The replace(X
18e30 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
18e40 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18e50 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69  formed by substi
18e60 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20  tuting.  string 
18e70 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75  Z for every occu
18e80 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67  rrence of string
18e90 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20   Y in string X. 
18ea0 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20   ^The [BINARY]. 
18eb0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
18ec0 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
18ed0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
18ee0 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a  f Y is an empty.
18ef0 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65    string then re
18f00 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64  turn X unchanged
18f10 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20  .  ^If Z is not 
18f20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74  initially.  a st
18f30 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74  ring, it is cast
18f40 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69   to a UTF-8 stri
18f50 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63  ng prior to proc
18f60 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64  essing..}..funcd
18f70 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75  ef {round(X) rou
18f80 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  nd(X,Y)} {} {.  
18f90 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20  ^The round(X,Y) 
18fa0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18fb0 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
18fc0 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
18fd0 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
18fe0 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
18ff0 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
19000 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
19010 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
19020 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65  ed, it is assume
19030 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75  d to be 0..}..fu
19040 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
19050 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
19060 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
19070 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19080 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
19090 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
190a0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
190b0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
190c0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
190d0 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
190e0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
190f0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
19100 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
19110 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
19120 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
19130 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
19140 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
19150 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
19160 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
19170 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
19180 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
19190 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
191a0 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
191b0 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
191c0 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
191d0 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
191e0 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
191f0 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
19200 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
19210 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
19220 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
19230 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
19240 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
19250 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
19260 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
19270 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
19280 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
19290 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
192a0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
192b0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
192c0 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
192d0 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
192e0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
192f0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
19300 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
19310 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19320 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
19330 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
19340 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
19350 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
19360 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
19370 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
19380 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
19390 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
193a0 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
193b0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
193c0 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
193d0 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
193e0 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
193f0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
19400 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
19410 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
19420 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
19430 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
19440 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
19450 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
19460 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
19470 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
19480 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
19490 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
194a0 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
194b0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
194c0 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
194d0 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
194e0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
194f0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
19500 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
19510 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
19520 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
19530 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
19540 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
19550 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
19560 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
19570 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
19580 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
19590 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
195a0 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
195b0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
195c0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
195d0 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
195e0 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
195f0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
19600 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
19610 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
19620 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
19630 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
19640 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
19650 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
19660 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20  ) begins with.  
19670 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
19680 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63  e that the sourc
19690 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b  e code was check
196a0 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c  ed in and is fol
196b0 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41  lows by.  an SHA
196c0 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71  1 hash that uniq
196d0 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
196e0 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e  the source tree.
196f0 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
19700 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
19710 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
19720 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
19730 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
19740 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
19750 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
19760 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
19770 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
19780 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
19790 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
197a0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
197b0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
197c0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
197d0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
197e0 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
197f0 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
19800 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
19810 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
19820 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
19830 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
19840 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19850 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
19860 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19870 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
19880 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
19890 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
198a0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
198b0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
198c0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
198d0 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
198e0 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
198f0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
19900 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
19910 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
19920 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
19930 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
19940 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
19950 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
19960 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
19970 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
19980 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
19990 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
199a0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
199b0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
199c0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
199d0 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
199e0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
199f0 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
19a00 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
19a10 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
19a20 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
19a30 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
19a40 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
19a50 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
19a60 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
19a70 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
19a80 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
19a90 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
19aa0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
19ab0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
19ac0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
19ad0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
19ae0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
19af0 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
19b00 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
19b10 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
19b20 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
19b30 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
19b40 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
19b50 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
19b60 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
19b70 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
19b80 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
19b90 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
19ba0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
19bb0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
19bc0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
19bd0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
19be0 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
19bf0 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
19c00 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
19c10 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
19c20 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19c30 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
19c40 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
19c50 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
19c60 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
19c70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
19c80 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
19c90 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
19ca0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
19cb0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
19cc0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
19cd0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
19ce0 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
19cf0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
19d00 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
19d10 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
19d20 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
19d30 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
19d40 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
19d50 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
19d60 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
19d70 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
19d80 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
19d90 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
19da0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
19db0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
19dc0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
19dd0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
19de0 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
19df0 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
19e00 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
19e10 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
19e20 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
19e30 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
19e40 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
19e50 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
19e60 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
19e70 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
19e80 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
19e90 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
19ea0 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
19eb0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
19ec0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
19ed0 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
19ee0 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
19ef0 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
19f00 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
19f10 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
19f20 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
19f30 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
19f40 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
19f50 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
19f60 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
19f70 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
19f80 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
19f90 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
19fa0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19fb0 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
19fc0 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
19fd0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
19fe0 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
19ff0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1a000 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1a010 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1a020 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1a030 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1a040 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1a050 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1a060 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1a070 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1a080 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1a090 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1a0a0 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1a0b0 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1a0c0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1a0d0 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1a0e0 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1a0f0 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1a100 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1a110 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1a120 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1a130 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1a140 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1a150 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1a160 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1a170 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1a180 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1a190 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1a1a0 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1a1b0 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1a1c0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1a1d0 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1a1e0 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1a1f0 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1a200 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1a210 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1a220 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1a230 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1a240 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1a250 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1a260 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1a270 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1a280 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1a290 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
1a2a0 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
1a2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2f0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1a300 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
1a310 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
1a320 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d  func {*datefunc}
1a330 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61  .hd_keywords {da
1a340 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  te() SQL functio
1a350 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66  n} {time() SQL f
1a360 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
1a370 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29  ords {datetime()
1a380 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
1a390 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20  julianday() SQL 
1a3a0 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
1a3b0 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28  words {strftime(
1a3c0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1a3d0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
1a3e0 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
1a3f0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1a400 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
1a410 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
1a420 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61  ol>.<li> ^(<b>da
1a430 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  te(</b><i>timest
1a440 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a450 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a460 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a470 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65  >.<li> ^(<b>time
1a480 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1a490 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1a4a0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1a4b0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1a4c0 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69  <li> ^(<b>dateti
1a4d0 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1a4e0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a4f0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a500 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a510 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69  >.<li> ^(<b>juli
1a520 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d  anday(</b><i>tim
1a530 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a540 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a550 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a560 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73  /li>.<li> ^(<b>s
1a570 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66  trftime(</b><i>f
1a580 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e  ormat, timestrin
1a590 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1a5a0 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1a5b0 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1a5c0 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66  /ol>..<p>.^All f
1a5d0 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
1a5e0 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65  e functions take
1a5f0 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61   a time string a
1a600 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a  s an argument. .
1a610 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
1a620 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
1a630 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
1a640 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74  ifiers. .^The st
1a650 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  rftime() functio
1a660 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66  n also takes a f
1a670 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20  ormat string as 
1a680 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
1a690 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  nt..</p>..<p>.Th
1a6a0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a6b0 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
1a6c0 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a  subset of.[http:
1a6d0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1a6e0 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31  rg/wiki/ISO_8601
1a6f0 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74   | IS0-8601] dat
1a700 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61  e and time.forma
1a710 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20  ts..^The date() 
1a720 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a730 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69   the date in thi
1a740 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d  s format: YYYY-M
1a750 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65  M-DD. .^The time
1a760 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1a770 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20  rns the time as 
1a780 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20  HH:MM:SS. .^The 
1a790 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74  datetime() funct
1a7a0 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59  ion returns "YYY
1a7b0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1a7c0 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e  ". .^(The julian
1a7d0 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  day() function r
1a7e0 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74  eturns the .[htt
1a7f0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a800 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
1a810 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
1a820 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20  y] - the.number 
1a830 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f  of days since no
1a840 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20  on in Greenwich 
1a850 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20  on November 24, 
1a860 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74  4714 B.C. .([htt
1a870 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a880 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70  .org/wiki/Prolep
1a890 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61  tic_Gregorian_ca
1a8a0 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74  lendar | Prolept
1a8b0 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c  ic Gregorian cal
1a8c0 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20  endar]).)^.^The 
1a8d0 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69  strftime() routi
1a8e0 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  ne returns the d
1a8f0 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63  ate formatted ac
1a900 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20  cording to .the 
1a910 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70  format string sp
1a920 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66  ecified as the f
1a930 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e  irst argument..^
1a940 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
1a950 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d  g supports the m
1a960 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74  ost common subst
1a970 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69  itutions found i
1a980 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f  n the .[http://o
1a990 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c  pengroup.org/onl
1a9a0 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39  inepubs/00790879
1a9b0 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68  9/xsh/strftime.h
1a9c0 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29  tml | strftime()
1a9d0 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20   function].from 
1a9e0 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1a9f0 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20  ibrary plus two 
1aa00 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e  new substitution
1aa10 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28  s, %f and %J..^(
1aa20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73  The following is
1aa30 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74   a complete list
1aa40 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69   of valid strfti
1aa50 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f  me() substitutio
1aa60 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ns:.</p>..<block
1aa70 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f  quote>.<table bo
1aa80 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64  rder="0" cellpad
1aa90 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61  ding="0" cellspa
1aaa0 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74  cing="0">.<tr><t
1aab0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22  d><td width="10"
1aac0 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  ><td></tr>..<tr>
1aad0 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e  <td> %d <td><td>
1aae0 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30   day of month: 0
1aaf0 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74  0.<tr><td> %f <t
1ab00 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61  d><td> fractiona
1ab10 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53  l seconds: SS.SS
1ab20 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74  S.<tr><td> %H <t
1ab30 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d  d><td> hour: 00-
1ab40 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20  24 .<tr><td> %j 
1ab50 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
1ab60 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74  year: 001-366.<t
1ab70 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74  r><td> %J <td><t
1ab80 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  d> Julian day nu
1ab90 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d  mber.<tr><td> %m
1aba0 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a   <td><td> month:
1abb0 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20   01-12.<tr><td> 
1abc0 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75  %M <td><td> minu
1abd0 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  te: 00-59.<tr><t
1abe0 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %s <td><td> s
1abf0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1ac00 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e  0-01-01.<tr><td>
1ac10 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %S <td><td> sec
1ac20 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  onds: 00-59.<tr>
1ac30 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e  <td> %w <td><td>
1ac40 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36   day of week 0-6
1ac50 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a   with Sunday==0.
1ac60 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e  <tr><td> %W <td>
1ac70 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61  <td> week of yea
1ac80 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64  r: 00-53.<tr><td
1ac90 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65  > %Y <td><td> ye
1aca0 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74  ar: 0000-9999.<t
1acb0 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74  r><td> %% <td><t
1acc0 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  d> %.</table>.</
1acd0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1ace0 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74  p>.^(Notice that
1acf0 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20   all other date 
1ad00 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1ad10 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73  ns can be expres
1ad20 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20  sed.in terms of 
1ad30 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e  strftime():.</p>
1ad40 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
1ad50 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
1ad60 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
1ad70 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
1ad80 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e  >.<tr><td><b>Fun
1ad90 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64  ction</b><td wid
1ada0 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45  th="30"><td><b>E
1adb0 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69  quivalent strfti
1adc0 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64  me()</b>.<tr><td
1add0 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20  >   date(...)   
1ade0 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1adf0 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27  ftime('%Y-%m-%d'
1ae00 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1ae10 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20    time(...)     
1ae20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1ae30 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20  ime('%H:%M:%S', 
1ae40 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1ae50 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c  datetime(...)  <
1ae60 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1ae70 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  e('%Y-%m-%d %H:%
1ae80 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
1ae90 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79  <td>   julianday
1aea0 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20  (...) <td><td>  
1aeb0 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e  strftime('%J', .
1aec0 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  ..).</table>.</b
1aed0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
1aee0 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f  >.The only reaso
1aef0 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67  ns for providing
1af00 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72   functions other
1af10 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29   than strftime()
1af20 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65   is.for convenie
1af30 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69  nce and for effi
1af40 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ciency..</p>..<h
1af50 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f  3>Time Strings</
1af60 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65  h3>..<p>^(A time
1af70 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
1af80 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
1af90 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
1afa0 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
1afb0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
1afc0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1afd0 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
1afe0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1aff0 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
1b000 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1b010 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</i
1b020 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1b030 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
1b040 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1b050 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b060 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1b070 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1b080 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1b090 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1b0a0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1b0b0 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
1b0c0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
1b0d0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
1b0e0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1b0f0 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
1b100 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
1b110 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  /i>.</ol>)^..<p>
1b120 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74  .^In formats 5 t
1b130 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54  hrough 7, the "T
1b140 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63  " is a literal c
1b150 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74  haracter separat
1b160 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e  ing .the date an
1b170 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72  d the time, as r
1b180 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74  equired by .[htt
1b190 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f  p://www.w3c.org/
1b1a0 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65  TR/NOTE-datetime
1b1b0 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e   | ISO-8601]. .^
1b1c0 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67  Formats 8 throug
1b1d0 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66  h 10 that specif
1b1e0 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73  y only a time as
1b1f0 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a  sume a date of .
1b200 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d  2000-01-01. Form
1b210 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e  at 11, the strin
1b220 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76  g 'now', is conv
1b230 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a  erted into the .
1b240 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64  current date and
1b250 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65   time as obtaine
1b260 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72  d from the xCurr
1b270 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f  entTime method.o
1b280 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76  f the [sqlite3_v
1b290 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73  fs] object in us
1b2a0 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72  e..^The 'now' ar
1b2b0 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61  gument to date a
1b2c0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1b2d0 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  s always returns
1b2e0 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d   exactly the.sam
1b2f0 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74  e value for mult
1b300 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73  iple invocations
1b310 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
1b320 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
1b330 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f  ] call..^[http:/
1b340 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1b350 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74  g/wiki/Coordinat
1b360 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d  ed_Universal_Tim
1b370 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f  e | Universal Co
1b380 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1b390 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a  UTC)] is used. .
1b3a0 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68  ^Format 12 is th
1b3b0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1b3c0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1b3d0 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
1b3e0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d  lian day number]
1b3f0 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61 20  .expressed as a 
1b400 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1b410 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  alue..</p>..<p>.
1b420 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f 75 67  Formats 2 throug
1b430 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70 74 69  h 10 may be opti
1b440 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20  onally followed 
1b450 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e  by a timezone in
1b460 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65 20 66  dicator of the f
1b470 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26  orm."<i>&#91;+-&
1b480 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f  #93;HH:MM</i>" o
1b490 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e  r just "<i>Z</i>
1b4a0 22 2e 20 20 54 68 65 20 64 61 74 65 20 61 6e 64  ".  The date and
1b4b0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1b4c0 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75 6c 75  use UTC or "zulu
1b4d0 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c  ".time internall
1b4e0 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 22 5a  y, and so the "Z
1b4f0 22 20 73 75 66 66 69 78 20 69 73 20 61 20 6e 6f  " suffix is a no
1b500 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65  -op.  Any non-ze
1b510 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66 66 69  ro "HH:MM" suffi
1b520 78 20 69 73 0a 73 75 62 74 72 61 63 74 65 64 20  x is.subtracted 
1b530 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63 61 74  from the indicat
1b540 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ed date and time
1b550 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
1b560 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a  pute zulu time..
1b570 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c  For example, all
1b580 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1b590 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73 20 61  g time strings a
1b5a0 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c  re equivalent:.<
1b5b0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1b5c0 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 38 3a  >.2013-10-07 08:
1b5d0 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30  23:19.120<br>.20
1b5e0 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a 31  13-10-07T08:23:1
1b5f0 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d  9.120Z<br>.2013-
1b600 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31  10-07 08:23:19.1
1b610 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35  20-04:00<br>.245
1b620 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f  6572.84952685.</
1b630 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
1b640 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c  .^(In formats 4,
1b650 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20   7, and 10, the 
1b660 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e  fractional secon
1b670 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20  ds value SS.SSS 
1b680 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20  can have.one or 
1b690 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c  more digits foll
1b6a0 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61  owing the decima
1b6b0 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c  l point.  Exactl
1b6c0 79 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61  y three digits a
1b6d0 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20  re.shown in the 
1b6e0 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65  examples because
1b6f0 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
1b700 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65  three digits are
1b710 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20   significant.to 
1b720 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20  the result, but 
1b730 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67  the input string
1b740 20 63 61 6e 20 68 61 76 65 20 66 65 77 65 72 20   can have fewer 
1b750 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72  or more than thr
1b760 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68  ee digits.and th
1b770 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  e date/time func
1b780 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c  tions will still
1b790 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65 63 74   operate correct
1b7a0 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c  ly.)^.Similarly,
1b7b0 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68   format 12 is sh
1b7c0 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e  own with 10 sign
1b7d0 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20  ificant digits, 
1b7e0 62 75 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d  but the date/tim
1b7f0 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  e.functions will
1b800 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61   really accept a
1b810 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77  s many or as few
1b820 20 64 69 67 69 74 73 20 61 73 20 61 72 65 20 6e   digits as are n
1b830 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72  ecessary to.repr
1b840 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e  esent the Julian
1b850 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70   day number..</p
1b860 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73  >..<h3>Modifiers
1b870 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74  </h3>..<p>^The t
1b880 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
1b890 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  e followed by ze
1b8a0 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
1b8b0 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72  iers that .alter
1b8c0 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
1b8d0 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65  e. ^Each modifie
1b8e0 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d  r.is a transform
1b8f0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70  ation that is ap
1b900 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d  plied to the tim
1b910 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c  e value to its l
1b920 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20  eft..^Modifiers 
1b930 61 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d  are applied from
1b940 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20   left to right; 
1b950 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61  order is importa
1b960 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61  nt..^(The availa
1b970 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72  ble modifiers ar
1b980 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70  e as follows.</p
1b990 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e  >..<ol>.<li> NNN
1b9a0 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68   days.<li> NNN h
1b9b0 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69  ours.<li> NNN mi
1b9c0 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e  nutes.<li> NNN.N
1b9d0 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e  NNN seconds.<li>
1b9e0 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e   NNN months.<li>
1b9f0 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20   NNN years.<li> 
1ba00 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c  start of month.<
1ba10 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61  li> start of yea
1ba20 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  r.<li> start of 
1ba30 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79  day.<li> weekday
1ba40 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63   N.<li> unixepoc
1ba50 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65  h.<li> localtime
1ba60 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e  .<li> utc .</ol>
1ba70 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73  )^..<p>^The firs
1ba80 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20  t six modifiers 
1ba90 28 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73  (1 through 6) .s
1baa0 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73 70  imply add the sp
1bab0 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f  ecified amount o
1bac0 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61  f time to the da
1bad0 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65  te and time .spe
1bae0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 70 72  cified by the pr
1baf0 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69  eceding timestri
1bb00 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73  ng and modifiers
1bb10 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70  ..^Note that "&p
1bb20 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73  lusmn;NNN months
1bb30 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65  " works by rende
1bb40 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ring the origina
1bb50 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20  l date into.the 
1bb60 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61  YYYY-MM-DD forma
1bb70 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70  t, adding the &p
1bb80 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65  lusmn;NNN to the
1bb90 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c   MM month value,
1bba0 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e   then.normalizin
1bbb0 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e  g the result.  ^
1bbc0 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c  Thus, for exampl
1bbd0 65 2c 20 74 68 65 20 64 61 74 61 20 32 30 30 31  e, the data 2001
1bbe0 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a  -03-31 modified.
1bbf0 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e  by '+1 month' in
1bc00 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32  itially yields 2
1bc10 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41  001-04-31, but A
1bc20 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30  pril only has 30
1bc30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74   days.so the dat
1bc40 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20  e is normalized 
1bc50 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20  to 2001-05-01.  
1bc60 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63  ^A similar effec
1bc70 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68  t occurs when.th
1bc80 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20  e original date 
1bc90 69 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f  is February 29 o
1bca0 66 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64  f a leapyear and
1bcb0 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73   the modifier is
1bcc0 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73  .&plusmn;N years
1bcd0 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20   where N is not 
1bce0 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f  a multiple of fo
1bcf0 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ur.</p>..<p>^The
1bd00 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69   "start of" modi
1bd10 66 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68  fiers (7 through
1bd20 20 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61   9) shift the da
1bd30 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f  te backwards .to
1bd40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
1bd50 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
1bd60 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79  nth, year or day
1bd70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1bd80 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65  weekday" modifie
1bd90 72 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64  r advances the d
1bda0 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74  ate forward to t
1bdb0 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68  he next date .wh
1bdc0 65 72 65 20 74 68 65 20 77 65 65 6b 64 61 79 20  ere the weekday 
1bdd0 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e  number is N. Sun
1bde0 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79  day is 0, Monday
1bdf0 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f   is 1, and so fo
1be00 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  rth.</p>..<p>^Th
1be10 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1be20 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79  difier (11) only
1be30 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d   works if it imm
1be40 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
1be50 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69   .a timestring i
1be60 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  n the DDDDDDDDDD
1be70 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20   format. .^This 
1be80 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20  modifier causes 
1be90 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74  the DDDDDDDDDD t
1bea0 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  o be interpreted
1beb0 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61   not .as a Julia
1bec0 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20  n day number as 
1bed0 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c  it normally woul
1bee0 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74  d be, but as.[ht
1bef0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1bf00 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f  a.org/wiki/Unix_
1bf10 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65  time | Unix Time
1bf20 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20  ] - the .number 
1bf30 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
1bf40 20 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22   1970.  If the "
1bf50 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1bf60 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c  ier does not.fol
1bf70 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67  low a timestring
1bf80 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44   of the form DDD
1bf90 44 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78  DDDDDDD which ex
1bfa0 70 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62  presses the numb
1bfb0 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er.of seconds si
1bfc0 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f  nce 1970 or if o
1bfd0 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73  ther modifiers.s
1bfe0 65 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69  eparate the "uni
1bff0 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1c000 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44   from prior DDDD
1c010 44 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a  DDDDDD then the.
1c020 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
1c030 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72  fined..Due to pr
1c040 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69  ecision limitati
1c050 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74  ons imposed by t
1c060 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
1c070 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74  ns use.of 64-bit
1c080 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22   integers, the "
1c090 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1c0a0 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ier only works f
1c0b0 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e  or.dates between
1c0c0 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
1c0d0 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31  0:00 and 5352-11
1c0e0 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e  -01 10:52:47 (un
1c0f0 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31  ix times.of -621
1c100 36 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68  67219200 through
1c110 20 31 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f   10675199167).</
1c120 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63  p>..<p>^The "loc
1c130 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72  altime" modifier
1c140 20 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68   (12) assumes th
1c150 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f  e time string to
1c160 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a   its left is in.
1c170 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69  Universal Coordi
1c180 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29  nated Time (UTC)
1c190 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65   and adjusts the
1c1a0 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20   time.string so 
1c1b0 74 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73  that it displays
1c1c0 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20   localtime.  If 
1c1d0 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c  "localtime".foll
1c1e0 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20  ows a time that 
1c1f0 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e  is not UTC, then
1c200 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
1c210 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68   undefined..^(Th
1c220 65 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f  e "utc" is the o
1c230 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61  pposite of "loca
1c240 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61  ltime".  "utc" a
1c250 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20  ssumes that the 
1c260 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65  string.to its le
1c270 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63  ft is in the loc
1c280 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20  al timezone and 
1c290 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72  adjusts that str
1c2a0 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43  ing to be in UTC
1c2b0 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72  .)^.If the prior
1c2c0 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69   string is not i
1c2d0 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65  n localtime, the
1c2e0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1c2f0 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e  "utc" is.undefin
1c300 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ed.</p>..<h3>Exa
1c310 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70  mples</h3>..^(<p
1c320 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72  >Compute the cur
1c330 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c  rent date.<p>..<
1c340 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
1c350 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f  T date('now');</
1c360 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c370 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c380 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20  last day of the 
1c390 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f  current month.</
1c3a0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c3b0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1c3c0 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  ','start of mont
1c3d0 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d  h','+1 month','-
1c3e0 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  1 day');.</block
1c3f0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1c400 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1c410 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61  and time given a
1c420 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20   unix timestamp 
1c430 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a  1092941466.</p>.
1c440 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1c450 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
1c460 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
1c470 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c  nixepoch');.</bl
1c480 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c490 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1c4a0 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1c4b0 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1c4c0 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61  mp 1092941466, a
1c4d0 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66  nd .compensate f
1c4e0 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69  or your local ti
1c4f0 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  mezone.</p>..<bl
1c500 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c510 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
1c520 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
1c530 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27  ch', 'localtime'
1c540 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1c550 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1c560 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69   the current uni
1c570 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e  x timestamp.</p>
1c580 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1c590 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
1c5a0 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f  ('%s','now');.</
1c5b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c5c0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c5d0 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
1c5e0 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67  ince the signing
1c5f0 20 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61   of the US Decla
1c600 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65  ration.of Indepe
1c610 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  ndence.</p>..<bl
1c620 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c630 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  CT julianday('no
1c640 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28  w') - julianday(
1c650 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c  '1776-07-04');.<
1c660 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c670 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c680 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e   number of secon
1c690 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74 69  ds since a parti
1c6a0 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20  cular moment in 
1c6b0 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  2004:</p>..<bloc
1c6c0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c6d0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1c6e0 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65  now') - strftime
1c6f0 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30  ('%s','2004-01-0
1c700 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f  1 02:34:56');.</
1c710 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c720 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65  (<p>.Compute the
1c730 20 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72   date of the fir
1c740 73 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63  st Tuesday in Oc
1c750 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75  tober.for the cu
1c760 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e  rrent year..</p>
1c770 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1c780 20 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f   SELECT date('no
1c790 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61  w','start of yea
1c7a0 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27  r','+9 months','
1c7b0 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62  weekday 2');.</b
1c7c0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1c7d0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74  <p>Compute the t
1c7e0 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e  ime since the un
1c7f0 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f  ix epoch in seco
1c800 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74  nds .(like strft
1c810 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
1c820 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20  except includes 
1c830 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29  fractional part)
1c840 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
1c850 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75  te>.  SELECT (ju
1c860 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
1c870 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30   2440587.5)*8640
1c880 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  0.0;.</blockquot
1c890 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74  e>)^..<h3>Caveat
1c8a0 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a  s And Bugs</h3>.
1c8b0 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74  .<p>The computat
1c8c0 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d  ion of local tim
1c8d0 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c  e depends heavil
1c8e0 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f  y on the whim .o
1c8f0 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e  f politicians an
1c900 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63  d is thus diffic
1c910 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65  ult to get corre
1c920 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61  ct for .all loca
1c930 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d  les. ^In this im
1c940 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
1c950 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1c960 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c  rary .function l
1c970 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20  ocaltime_r() is 
1c980 75 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69  used to assist i
1c990 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  n the calculatio
1c9a0 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65  n of .local time
1c9b0 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74  .  ^(The .localt
1c9c0 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69  ime_r() C functi
1c9d0 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79  on normally only
1c9e0 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73   works for years
1c9f0 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e  .between 1970 an
1ca00 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65  d 2037. For date
1ca10 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20 72  s outside this r
1ca20 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74  ange, SQLite .at
1ca30 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68  tempts to map th
1ca40 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65  e year into an e
1ca50 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77  quivalent year w
1ca60 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67  ithin .this rang
1ca70 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c  e, do the calcul
1ca80 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20  ation, then map 
1ca90 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e  the year back.)^
1caa0 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73  </p>...<p>^(Thes
1cab0 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79  e functions only
1cac0 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20   work for dates 
1cad0 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d  between 0000-01-
1cae0 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20  01 00:00:00.and 
1caf0 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39  9999-12-31 23:59
1cb00 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79  :59 (julidan day
1cb10 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35 39   numbers 1721059
1cb20 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37 33 34  .5 through 53734
1cb30 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74  84.5).)^.For dat
1cb40 65 73 20 6f 75 74 73 69 64 65 20 74 68 61 74 20  es outside that 
1cb50 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c  range, the resul
1cb60 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63  ts of these.func
1cb70 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69  tions are undefi
1cb80 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e  ned.</p>..<p>Non
1cb90 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
1cba0 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75  latforms only su
1cbb0 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66  pport one set of
1cbc0 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73   DST rules. .Vis
1cbd0 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73  ta only supports
1cbe0 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c   two. Therefore,
1cbf0 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f   on these platfo
1cc00 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c  rms, .historical
1cc10 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e   DST calculation
1cc20 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72  s will be incorr
1cc30 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c  ect. .For exampl
1cc40 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e  e, in the US, in
1cc50 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75   2007 the DST ru
1cc60 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f  les changed. .No
1cc70 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
1cc80 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20  platforms apply 
1cc90 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54  the new 2007 DST
1cca0 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70   rules .to all p
1ccb0 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73  revious years as
1ccc0 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65   well. Vista doe
1ccd0 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65  s somewhat bette
1cce0 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74  r.getting result
1ccf0 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74  s correct back t
1cd00 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65  o 1986, when the
1cd10 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f   rules were also
1cd20 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c   changed.</p>..<
1cd30 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63  p>All internal c
1cd40 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75  omputations assu
1cd50 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  me the .[http://
1cd60 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1cd70 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f  /wiki/Gregorian_
1cd80 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f  calendar | Grego
1cd90 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73  rian calendar].s
1cda0 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c  ystem.  It is al
1cdb0 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  so assumed that 
1cdc0 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61  every.day is exa
1cdd0 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e  ctly 86400 secon
1cde0 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c  ds in duration.<
1cdf0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
1ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1ce50 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e  n {Aggregate Fun
1ce60 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20  ctions} aggfunc 
1ce70 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c  {*aggfunc}.</tcl
1ce80 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  >..<p>.The aggre
1ce90 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1cea0 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
1ceb0 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1cec0 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
1ced0 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
1cee0 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
1cef0 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
1cf00 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74  sing the .[sqlit
1cf10 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1cf20 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  on()]</a>.API.</
1cf30 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20  p>..<p>.^In any 
1cf40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1cf50 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20  on that takes a 
1cf60 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c  single argument,
1cf70 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63   that argument.c
1cf80 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
1cf90 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49  y the keyword DI
1cfa0 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63  STINCT.  ^In suc
1cfb0 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61  h cases, duplica
1cfc0 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  te.elements are 
1cfd0 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20  filtered before 
1cfe0 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74  being passed int
1cff0 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  o the aggregate 
1d000 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  function..^For e
1d010 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
1d020 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
1d030 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
1d040 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
1d050 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
1d060 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
1d070 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
1d080 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
1d090 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
1d0a0 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
1d0b0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
1d0c0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
1d0d0 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b  .<tcl>.funcdef {
1d0e0 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61  avg(X)} {*avg {a
1d0f0 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66  vg() aggregate f
1d100 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d110 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f  he avg() functio
1d120 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
1d130 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66  average value of
1d140 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69   all non-NULL <i
1d150 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a  >X</i> within a.
1d160 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e    group.  ^Strin
1d170 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
1d180 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
1d190 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
1d1a0 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65  are.  interprete
1d1b0 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72  d as 0..  ^The r
1d1c0 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
1d1d0 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
1d1e0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  ing point value 
1d1f0 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20  as long as.  at 
1d200 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73  there is at leas
1d210 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  t one non-NULL i
1d220 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c  nput even if all
1d230 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  .  inputs are in
1d240 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65  tegers.  ^The re
1d250 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
1d260 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
1d270 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65  y if.  there are
1d280 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1d290 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65  uts.  .}..funcde
1d2a0 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e  f {count(X) coun
1d2b0 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63  t(*)} {*count {c
1d2c0 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
1d2d0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d2e0 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75  ^The count(X) fu
1d2f0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
1d300 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20   a count of the 
1d310 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a  number of times.
1d320 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20    that <i>X</i> 
1d330 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61  is not NULL in a
1d340 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f   group.  ^The co
1d350 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a  unt(*) function.
1d360 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d    (with no argum
1d370 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68  ents) returns th
1d380 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1d390 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  f rows in the gr
1d3a0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1d3b0 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29  {group_concat(X)
1d3c0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c   group_concat(X,
1d3d0 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63  Y)} {.  *group_c
1d3e0 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e  oncat {group_con
1d3f0 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20  cat() aggregate 
1d400 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
1d410 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ^The group_conca
1d420 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
1d430 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1d440 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
1d450 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
1d460 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1d470 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
1d480 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20    ^If parameter 
1d490 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73  <i>Y</i> is pres
1d4a0 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73  ent then.  it is
1d4b0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70   used as the sep
1d4c0 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e  arator.  between
1d4d0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69   instances of <i
1d4e0 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d  >X</i>.  ^A comm
1d4f0 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20  a (",") is used 
1d500 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
1d510 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69  .  if <i>Y</i> i
1d520 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20  s omitted.  The 
1d530 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e  order of the con
1d540 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e  catenated elemen
1d550 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72  ts is.  arbitrar
1d560 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  y..}..funcdef {m
1d570 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46  ax(X)} {*maxAggF
1d580 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61  unc *agg_max {ma
1d590 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
1d5a0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1d5b0 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  e max() aggregat
1d5c0 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
1d5d0 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  urns the maximum
1d5e0 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
1d5f0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1d600 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75  p..  ^The maximu
1d610 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76  m value is the v
1d620 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
1d630 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74  be returned last
1d640 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42   in an.  ORDER B
1d650 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f  Y on the same co
1d660 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74  lumn.  ^Aggregat
1d670 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20  e max() returns 
1d680 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f  NULL .  if and o
1d690 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
1d6a0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c   no non-NULL val
1d6b0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1d6c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
1d6d0 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75  n(X)} {*minAggFu
1d6e0 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e  nc *agg_min {min
1d6f0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1d700 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1d710 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65   min() aggregate
1d720 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
1d730 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  rns the minimum 
1d740 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f  non-NULL value o
1d750 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
1d760 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
1d770 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20  e minimum value 
1d780 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  is the first non
1d790 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74  -NULL value that
1d7a0 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20   would appear.  
1d7b0 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f  in an ORDER BY o
1d7c0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20  f the column..  
1d7d0 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29  ^Aggregate min()
1d7e0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
1d7f0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
1d800 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
1d810 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74  LL.  values in t
1d820 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
1d830 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74  cdef {sum(X) tot
1d840 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46  al(X)} {.  *sumF
1d850 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a  unc *sum *total.
1d860 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61    {sum() aggrega
1d870 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b  te function}.  {
1d880 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
1d890 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
1d8a0 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64    ^The sum() and
1d8b0 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61   total() aggrega
1d8c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72  te functions.  r
1d8d0 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c  eturn sum of all
1d8e0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
1d8f0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1d900 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e   ^If there are n
1d910 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
1d920 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
1d930 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
1d940 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
1d950 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
1d960 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
1d970 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
1d980 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
1d990 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
1d9a0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
1d9b0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
1d9c0 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
1d9d0 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1d9e0 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
1d9f0 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
1da00 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
1da10 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
1da20 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
1da30 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
1da40 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
1da50 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
1da60 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
1da70 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
1da80 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
1da90 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
1daa0 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
1dab0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
1dac0 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
1dad0 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77  f total() is alw
1dae0 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
1daf0 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54  oint value..  ^T
1db00 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d  he result of sum
1db10 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  () is an integer
1db20 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f   value if all no
1db30 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72  n-NULL inputs ar
1db40 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49  e integers..  ^I
1db50 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73  f any input to s
1db60 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20  um() is neither 
1db70 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
1db80 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28  NULL.  then sum(
1db90 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  ) returns a floa
1dba0 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
1dbb0 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  .  which might b
1dbc0 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  e an approximati
1dbd0 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73  on to the true s
1dbe0 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53  um.</p>..  <p>^S
1dbf0 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20  um() will throw 
1dc00 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72  an "integer over
1dc10 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20  flow" exception 
1dc20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  if all inputs.  
1dc30 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20  are integers or 
1dc40 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e  NULL.  and an in
1dc50 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f  teger overflow o
1dc60 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69  ccurs at any poi
1dc70 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  nt during the co
1dc80 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f  mputation..  ^To
1dc90 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
1dca0 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
1dcb0 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e  erflow..}.</tcl>
1dcc0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e  .</table>..<tcl>
1dcd0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1dd20 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69  Section INSERT i
1dd30 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49  nsert {INSERT *I
1dd40 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69  NSERTs}..Recursi
1dd50 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
1dd60 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63  insert-stmt.</tc
1dd70 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52  l>..<p>The INSER
1dd80 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65  T statement come
1dd90 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69 63  s in three basic
1dda0 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c   forms.  .<ul>.<
1ddb0 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74  li><p>^The first
1ddc0 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20   form (with the 
1ddd0 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64  "VALUES" keyword
1dde0 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72  ) creates one or
1ddf0 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69   more.new rows i
1de00 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n.an existing ta
1de10 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75  ble. ^If no colu
1de20 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
1de30 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  fied then the nu
1de40 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69  mber.of values i
1de50 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63  nserted into eac
1de60 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68  h row.must be th
1de70 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
1de80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1de90 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
1dea0 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
1deb0 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
1dec0 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
1ded0 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  st expression in
1dee0 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68   each term of.th
1def0 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73  e VALUES list is
1df00 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
1df10 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
1df20 75 6d 6e 20 6f 66 20 74 68 65 20 65 61 63 68 20  umn of the each 
1df30 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72  new row,.and for
1df40 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62 73  th for each subs
1df50 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f  equent expressio
1df60 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d  n. ^If a.column-
1df70 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
1df80 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
1df90 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
1dfa0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
1dfb0 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74  .VALUE list must
1dfc0 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
1dfd0 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63  r of.specified c
1dfe0 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66  olumns. ^Each of
1dff0 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d   the named colum
1e000 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  ns of the new ro
1e010 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77  w is populated.w
1e020 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20  ith the results 
1e030 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
1e040 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1e050 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f  VALUES expressio
1e060 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e  n. ^Table.column
1e070 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s that do not ap
1e080 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75  pear in the colu
1e090 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75  mn list are popu
1e0a0 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20 64  lated with the d
1e0b0 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61  efault.column va
1e0c0 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20 61  lue (specified a
1e0d0 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52  s part of the CR
1e0e0 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
1e0f0 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e  ment), or with N
1e100 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c  ULL if.no defaul
1e110 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
1e120 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  fied...<li><p>Th
1e130 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
1e140 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
1e150 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61  ement contains a
1e160 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e170 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
1e180 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
1e190 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
1e1a0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
1e1b0 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
1e1c0 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
1e1d0 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
1e1e0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1e1f0 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
1e200 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
1e210 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
1e220 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1e230 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
1e240 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
1e250 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
1e260 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
1e270 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
1e280 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
1e290 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
1e2a0 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
1e2b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1e2c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
1e2d0 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
1e2e0 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
1e2f0 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
1e300 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1e310 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
1e320 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e330 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70  , including.comp
1e340 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 61 6e 64  ound SELECTs and
1e350 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e360 74 73 20 77 69 74 68 20 4f 52 44 45 52 20 42 59  ts with ORDER BY
1e370 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c   and/or LIMIT cl
1e380 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75  auses, .may be u
1e390 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  sed in an INSERT
1e3a0 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68   statement of th
1e3b0 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70  is form...<li><p
1e3c0 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20  >The third form 
1e3d0 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  of an INSERT sta
1e3e0 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44  tement is with D
1e3f0 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e  EFAULT VALUES..^
1e400 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20  (The INSERT ... 
1e410 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73  DEFAULT VALUES s
1e420 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73  tatement inserts
1e430 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f   a single new ro
1e440 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64  w into the.named
1e450 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20   table.)^ ^Each 
1e460 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
1e470 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
1e480 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66 61  ed with its defa
1e490 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69  ult value,.or wi
1e4a0 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  th a NULL if no 
1e4b0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
1e4c0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
1e4d0 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  rt of the column
1e4e0 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74  .definition in t
1e4f0 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
1e500 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c  statement...</ul
1e510 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
1e520 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
1e530 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
1e540 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
1e550 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
1e560 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
1e570 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
1e580 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
1e590 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49  uring this one I
1e5a0 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53  NSERT command..S
1e5b0 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
1e5c0 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
1e5d0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
1e5e0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
1e5f0 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
1e600 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74  y with MySQL, ^t
1e610 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
1e620 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
1e630 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
1e640 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
1e650 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
1e660 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
1e670 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
1e680 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70  OR REPLACE"...<p
1e690 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
1e6a0 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
1e6b0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
1e6c0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
1e6d0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
1e6e0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
1e6f0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1e700 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
1e710 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
1e720 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
1e730 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
1e740 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
1e750 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
1e760 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
1e770 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
1e780 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
1e790 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
1e7a0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
1e7b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
1e7c0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
1e7d0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
1e7e0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
1e7f0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
1e800 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1e810 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
1e820 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1e830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e870 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
1e880 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1e890 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
1e8a0 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
1e8b0 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65  N CONFLICT}}..Re
1e8c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
1e8d0 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
1e8e0 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
1e8f0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
1e900 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
1e910 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
1e920 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
1e930 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
1e940 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
1e950 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
1e960 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
1e970 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
1e980 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
1e990 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
1e9a0 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
1e9b0 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
1e9c0 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
1e9d0 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
1e9e0 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
1e9f0 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
1ea00 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1ea10 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
1ea20 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
1ea30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
1ea40 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
1ea50 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
1ea60 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
1ea70 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
1ea80 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
1ea90 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
1eaa0 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
1eab0 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
1eac0 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
1ead0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
1eae0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
1eaf0 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
1eb00 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
1eb10 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
1eb20 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
1eb30 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1eb40 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
1eb50 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
1eb60 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
1eb70 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1eb80 61 70 70 6c 69 65 73 20 74 6f 20 55 4e 49 51 55  applies to UNIQU
1eb90 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 63  E and NOT NULL.c
1eba0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
1ebb0 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
1ebc0 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
1ebd0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
1ebe0 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
1ebf0 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
1ec00 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
1ec10 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
1ec20 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1ec30 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
1ec40 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
1ec50 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
1ec60 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
1ec70 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
1ec80 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ec90 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
1eca0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
1ecb0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
1ecc0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
1ecd0 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
1ece0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ecf0 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
1ed00 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
1ed10 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
1ed20 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
1ed30 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1ed40 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1ed50 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1ed60 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1ed70 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
1ed80 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1ed90 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1eda0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1edb0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
1edc0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1edd0 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
1ede0 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
1edf0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
1ee00 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1ee10 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
1ee20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
1ee30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
1ee40 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
1ee50 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
1ee60 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
1ee70 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1ee80 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
1ee90 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
1eea0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
1eeb0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
1eec0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
1eed0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1eee0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1eef0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1ef00 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
1ef10 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1ef20 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
1ef30 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1ef40 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
1ef50 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
1ef60 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20  error and backs 
1ef70 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a  out any changes.
1ef80 6d 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72  made by the curr
1ef90 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
1efa0 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63  t; but changes c
1efb0 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53  aused.by prior S
1efc0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
1efd0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  thin the same tr
1efe0 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72  ansaction are pr
1eff0 65 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a  eserved and the.
1f000 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
1f010 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73  ins active..This
1f020 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
1f030 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65  behavior and the
1f040 20 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66   behavior specif
1f050 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73  ied by the SQL.s
1f060 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64  tandard.</p></dd
1f070 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
1f080 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1f090 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1f0a0 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1f0b0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1f0c0 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75   the FAIL.resolu
1f0d0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1f0e0 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1f0f0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
1f100 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43  with an.SQLITE_C
1f110 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e  ONSTRAINT error.
1f120 20 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20    ^But the FAIL 
1f130 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20  resolution does 
1f140 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69  not.back out pri
1f150 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68  or changes of th
1f160 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1f170 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20  that failed nor 
1f180 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20  does.it end the 
1f190 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f  transaction..^Fo
1f1a0 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
1f1b0 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
1f1c0 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
1f1d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1f1e0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
1f1f0 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
1f200 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
1f210 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
1f220 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
1f230 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
1f240 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
1f250 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
1f260 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
1f270 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
1f280 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
1f290 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
1f2a0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
1f2b0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1f2c0 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e  occurs, .the IGN
1f2d0 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORE resolution a
1f2e0 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74  lgorithm skips t
1f2f0 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
1f300 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
1f310 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1f320 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  n and continues 
1f330 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65  processing subse
1f340 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68  quent rows.of th
1f350 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1f360 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65  as if nothing we
1f370 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20  nt wrong..Other 
1f380 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20  rows before and 
1f390 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68  after the row th
1f3a0 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65  at.contained the
1f3b0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1f3c0 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74  ation are insert
1f3d0 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f  ed or updated.no
1f3e0 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f  rmally. ^No erro
1f3f0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68  r is returned wh
1f400 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f  en the IGNORE co
1f410 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1f420 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  n.algorithm is u
1f430 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  sed.</p></dd>..<
1f440 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62  dt><b>REPLACE</b
1f450 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1f460 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  When a UNIQUE co
1f470 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1f480 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1f490 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d  EPLACE algorithm
1f4a0 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69  .deletes pre-exi
1f4b0 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20  sting rows that 
1f4c0 61 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20  are causing the 
1f4d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1f4e0 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e  tion.prior to in
1f4f0 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74  serting or updat
1f500 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
1f510 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d  row and the comm
1f520 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65  and continues .e
1f530 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
1f540 79 2e 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  y..^If a NOT NUL
1f550 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  L constraint vio
1f560 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
1f570 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1f580 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72  ict.resolution r
1f590 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c  eplaces the NULL
1f5a0 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20   value with.the 
1f5b0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
1f5c0 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f  r that column, o
1f5d0 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  r if the column 
1f5e0 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76  has no default.v
1f5f0 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41  alue, then the A
1f600 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69  BORT algorithm i
1f610 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 43 48  s used..^If a CH
1f620 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ECK constraint v
1f630 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1f640 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
1f650 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1f660 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79  .algorithm alway
1f670 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f  s works like ABO
1f680 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  RT.</p>..<p>^Whe
1f690 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  n the REPLACE co
1f6a0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1f6b0 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74  n strategy delet
1f6c0 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72  es rows in order
1f6d0 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f   to.satisfy a co
1f6e0 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54  nstraint, [CREAT
1f6f0 45 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65  E TRIGGER | dele
1f700 74 65 20 74 72 69 67 67 65 72 73 5d 20 66 69 72  te triggers] fir
1f710 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  e if and only if
1f720 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  .[recursive_trig
1f730 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65  gers pragma | re
1f740 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
1f750 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f  ] are enabled.</
1f760 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c  p>..<p>^The [sql
1f770 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
1f780 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20   | update hook] 
1f790 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66  is not invoked f
1f7a0 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65  or rows that.are
1f7b0 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
1f7c0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1f7d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
1f7e0 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73  tegy.  ^Nor does
1f7f0 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65  .REPLACE increme
1f800 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nt the [sqlite3_
1f810 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65  changes | change
1f820 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65   counter]..The e
1f830 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76  xceptional behav
1f840 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20  iors defined in 
1f850 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d  this paragraph m
1f860 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20  ight change .in 
1f870 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
1f880 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  .</p>.</dl>..<p>
1f890 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  ^The algorithm s
1f8a0 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
1f8b0 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20  OR clause of an 
1f8c0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
1f8d0 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
1f8e0 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
1f8f0 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
1f900 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
1f910 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
1f920 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
1f930 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
1f940 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
1f950 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1f960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9a0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
1f9b0 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
1f9c0 4e 44 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42  NDEX..RecursiveB
1f9d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
1f9e0 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
1f9f0 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45  ..<p>^The REINDE
1fa00 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
1fa10 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
1fa20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
1fa30 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
1fa40 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
1fa50 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
1fa60 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
1fa70 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
1fa80 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
1fa90 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1faa0 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66  keyword is not f
1fab0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1fac0 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1fad0 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a  or database .obj
1fae0 65 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ect identifier, 
1faf0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1fb00 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
1fb10 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
1fb20 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20  ebuilt...<p>^If 
1fb30 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
1fb40 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ord is followed 
1fb50 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1fb60 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68  equence name, th
1fb70 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en.all indices i
1fb80 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1fb90 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
1fba0 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1fbb0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a  ation sequences.
1fbc0 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a  are recreated. .
1fbd0 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20  .<p>^Or, if the 
1fbe0 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65  argument attache
1fbf0 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58  d to the REINDEX
1fc00 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1fc10 65 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65  ecific .database
1fc20 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
1fc30 20 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65   indices attache
1fc40 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
1fc50 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
1fc60 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65  ilt. .^If it ide
1fc70 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
1fc80 69 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  ic database inde
1fc90 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61  x, then just tha
1fca0 74 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65  t index is recre
1fcb0 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f  ated...<p>^If no
1fcc0 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
1fcd0 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
1fce0 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
1fcf0 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
1fd00 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
1fd10 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1fd20 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
1fd30 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65  ied name, SQLite
1fd40 20 69 6e 74 65 72 70 72 65 74 73 0a 74 68 69 73   interprets.this
1fd50 20 61 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   as a request to
1fd60 20 72 65 62 75 69 6c 64 20 74 68 65 20 69 6e 64   rebuild the ind
1fd70 69 63 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ices that use th
1fd80 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e named collatio
1fd90 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54 68 69 73  n sequence..This
1fda0 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
1fdb0 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
1fdc0 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
1fdd0 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
1fde0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1fdf0 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78  /i> when reindex
1fe00 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20 74  ing a specific t
1fe10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a  able or index...
1fe20 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1fe30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe70 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45  #####.Section RE
1fe80 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45  PLACE replace RE
1fe90 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c  PLACE..</tcl>..<
1fea0 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63  p>^The REPLACE c
1feb0 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69  ommand is an ali
1fec0 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20  as for the "[ON 
1fed0 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52  CONFLICT | INSER
1fee0 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76  T OR REPLACE]".v
1fef0 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49  ariant of the [I
1ff00 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20  NSERT] command. 
1ff10 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
1ff20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
1ff30 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72  patibility other
1ff40 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1ff50 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20  gines.  See the 
1ff60 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e  .[INSERT] comman
1ff70 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
1ff80 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1ff90 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
1ffa0 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
1ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fff0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
20000 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20 77   {WITH clause} w
20010 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62  ith {{common tab
20020 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 7d  le expressions}}
20030 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
20040 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63 6c  eDiagram with-cl
20050 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
20060 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
20070 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45 73  ressions or CTEs
20080 20 61 72 65 20 74 65 6d 70 6f 72 61 72 79 20 76   are temporary v
20090 69 65 77 73 20 6f 72 20 74 61 62 6c 65 73 20 74  iews or tables t
200a0 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66  hat exist.only f
200b0 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20  or the duration 
200c0 6f 66 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  of a single SQL 
200d0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72  statement.  Ther
200e0 65 20 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20  e are two kinds 
200f0 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  of.common table 
20100 65 78 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72  expressions: "or
20110 64 69 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63  dinary" and "rec
20120 75 72 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72  ursive". Ordinar
20130 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  y .common table 
20140 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
20150 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69  helpful for maki
20160 6e 67 0a 71 75 65 72 69 65 73 20 65 61 73 69 65  ng.queries easie
20170 72 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20  r to understand 
20180 62 79 20 66 61 63 74 6f 72 69 6e 67 0a 73 75 62  by factoring.sub
20190 71 75 65 72 69 65 73 20 6f 75 74 20 6f 66 20 74  queries out of t
201a0 68 65 20 6d 61 69 6e 20 53 51 4c 20 73 74 61 74  he main SQL stat
201b0 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73 69 76 65  ement..Recursive
201c0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
201d0 70 72 65 73 73 69 6f 6e 0a 70 72 6f 76 69 64 65  pression.provide
201e0 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20   the ability to 
201f0 64 6f 20 61 20 68 69 65 72 61 72 63 68 69 63 61  do a hierarchica
20200 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65 20 71  l or.recursive q
20210 75 65 72 69 65 73 20 6f 66 20 74 72 65 65 73 20  ueries of trees 
20220 61 6e 64 20 67 72 61 70 68 73 2c 20 61 20 63 61  and graphs, a ca
20230 70 61 62 69 6c 69 74 79 0a 74 68 61 74 20 69 73  pability.that is
20240 20 6e 6f 74 20 6f 74 68 65 72 77 69 73 65 20 61   not otherwise a
20250 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
20260 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 0a 41  SQL language...A
20270 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ll common table 
20280 65 78 70 72 65 73 73 69 6f 6e 73 20 28 6f 72 64  expressions (ord
20290 69 6e 61 72 79 20 61 6e 64 20 72 65 63 75 72 73  inary and recurs
202a0 69 76 65 29 20 61 72 65 20 0a 63 72 65 61 74 65  ive) are .create
202b0 64 20 62 79 20 70 72 65 70 65 6e 64 69 6e 67 20  d by prepending 
202c0 61 20 57 49 54 48 20 63 6c 61 75 73 65 20 69 6e  a WITH clause in
202d0 20 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45 4c   front of a [SEL
202e0 45 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ECT], [INSERT], 
202f0 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55 50  [DELETE],.or [UP
20300 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
20310 20 20 41 20 73 69 6e 67 6c 65 20 57 49 54 48 20    A single WITH 
20320 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63 69  clause can speci
20330 66 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 63  fy one or more.c
20340 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
20350 65 73 73 69 6f 6e 73 2e 0a 0a 3c 74 63 6c 3e 68  essions...<tcl>h
20360 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 69 6e  d_fragment ordin
20370 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61 72 79  arycte {ordinary
20380 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20390 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  pressions}</tcl>
203a0 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20 43 6f  .<h3>Ordinary Co
203b0 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65  mmon Table Expre
203c0 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
203d0 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
203e0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
203f0 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69 66 20  ion works as if 
20400 69 74 20 77 68 65 72 65 20 61 20 5b 76 69 65 77  it where a [view
20410 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20 66 6f  ] that.exists fo
20420 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
20430 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74 65  f a single state
20440 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79 20  ment.  Ordinary 
20450 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70  common table.exp
20460 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73 65  ressions are use
20470 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69 6e  ful for factorin
20480 67 20 6f 75 74 20 73 75 62 71 75 65 72 69 65 73  g out subqueries
20490 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65 20   and making the 
204a0 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74  overall.SQL stat
204b0 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f 20  ement easier to 
204c0 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73 74  read and underst
204d0 61 6e 64 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66  and...<tcl>.hd_f
204e0 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76  ragment recursiv
204f0 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65 20  ecte {recursive 
20500 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
20510 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63  ressions} \.{rec
20520 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f  ursive query}.</
20530 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69  tcl>.<h3>Recursi
20540 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  ve Common Table 
20550 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
20560 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65  ..<p>A recursive
20570 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20580 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
20590 75 73 65 64 20 74 6f 20 77 72 69 74 65 20 61 20  used to write a 
205a0 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73  query that.walks
205b0 20 61 20 74 72 65 65 20 6f 72 20 67 72 61 70 68   a tree or graph
205c0 2e 20 20 41 20 72 65 63 75 72 73 69 76 65 20 63  .  A recursive c
205d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
205e0 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73  ession has the s
205f0 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78  ame.basic syntax
20600 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20   as an ordinary 
20610 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
20620 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74  ression, but wit
20630 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  h the following.
20640 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75  additional featu
20650 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  res:..<ol>.<li> 
20660 54 68 65 20 22 73 65 6c 65 63 74 2d 73 74 6d 74  The "select-stmt
20670 22 20 61 66 74 65 72 20 74 68 65 20 41 53 20 6b  " after the AS k
20680 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20 63 6f  eyword in the co
20690 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
206a0 73 73 69 6f 6e 0a 20 20 20 20 20 6d 75 73 74 20  ssion.     must 
206b0 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  be a [compound s
206c0 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65  elect] where the
206d0 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6d 70   right-most comp
206e0 6f 75 6e 64 20 6f 70 65 72 61 74 6f 72 20 69 73  ound operator is
206f0 0a 20 20 20 20 20 65 69 74 68 65 72 20 55 4e 49  .     either UNI
20700 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e  ON or UNION ALL.
20710 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20  .<li> The table 
20720 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66  named on the lef
20730 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
20740 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75  he AS keyword mu
20750 73 74 20 61 70 70 65 61 72 0a 20 20 20 20 20 65  st appear.     e
20760 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
20770 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
20780 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
20790 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
207a0 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f  t.     of the co
207b0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61  mpound select, a
207c0 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e  nd nowhere else.
207d0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75  .</ol>..<p>To pu
207e0 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79  t it another way
207f0 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  , a recursive co
20800 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20810 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20  ssion must.look 
20820 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
20830 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73  ng:..<tcl>Recurs
20840 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
20850 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f   recursive-cte</
20860 74 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68  tcl>..<p>Call th
20870 65 20 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65  e cte-table-name
20880 20 66 6f 72 20 61 20 72 65 63 75 72 73 69 76 65   for a recursive
20890 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
208a0 70 72 65 73 73 69 6f 6e 0a 74 68 65 20 22 72 65  pression.the "re
208b0 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e 20  cursive table". 
208c0 20 49 6e 20 74 68 65 20 62 75 62 62 6c 65 20 64   In the bubble d
208d0 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74 68  iagram above, th
208e0 65 20 72 65 63 75 72 73 69 76 65 0a 74 61 62 6c  e recursive.tabl
208f0 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 65 78  e must appear ex
20900 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
20910 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
20920 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
20930 65 6c 65 63 74 0a 61 6e 64 20 6d 75 73 74 20 6e  elect.and must n
20940 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  ot appear anywhe
20950 72 65 20 65 6c 73 65 20 69 6e 20 65 69 74 68 65  re else in eithe
20960 72 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  r the initial-se
20970 6c 65 63 74 20 6f 72 20 74 68 65 0a 72 65 63 75  lect or the.recu
20980 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 69 6e  rsive-select, in
20990 63 6c 75 64 69 6e 67 20 73 75 62 71 75 65 72 69  cluding subqueri
209a0 65 73 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c  es.  The initial
209b0 2d 73 65 6c 65 63 74 20 6d 61 79 20 62 65 0a 61  -select may be.a
209c0 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
209d0 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74  , but it may not
209e0 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
209f0 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20  R BY, LIMIT, or 
20a00 4f 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75  OFFSET..The recu
20a10 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73  rsive-select mus
20a20 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65  t be a simple se
20a30 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70  lect, not a comp
20a40 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72  ound.  The.recur
20a50 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61  sive-select is a
20a60 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64  llowed to includ
20a70 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c  e an ORDER BY, L
20a80 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46  IMIT, and/or OFF
20a90 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  SET...<p>The bas
20aa0 69 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ic algorithm for
20ab0 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63   computing the c
20ac0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65  ontent of the re
20ad0 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73  cursive table.is
20ae0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
20af0 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20  l>.<li> Run the 
20b00 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61  initial-select a
20b10 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75 6c  nd add the resul
20b20 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c  ts to a queue..<
20b30 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75  li> While the qu
20b40 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  eue is not empty
20b50 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a  :.<ol type="a">.
20b60 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20 73  <li> Extract a s
20b70 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74  ingle row from t
20b80 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57  he queue..<li> W
20b90 72 69 74 65 20 74 68 61 74 20 73 69 6e 67 6c 65  rite that single
20ba0 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72 65   row into the re
20bb0 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c  cursive table.<l
20bc0 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74 20  i> Pretend that 
20bd0 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a  the single row j
20be0 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69 73  ust extracted is
20bf0 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72   the only.     r
20c00 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ow in the recurs
20c10 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72 75  ive table and ru
20c20 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
20c30 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64 64  select,.     add
20c40 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73 20  ing all results 
20c50 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f  to the queue..</
20c60 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ol>.</ol>..<p>Th
20c70 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75 72  e basic procedur
20c80 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69  e above may modi
20c90 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c  fied by the foll
20ca0 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
20cb0 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
20cc0 69 3e 3c 70 3e 0a 20 20 49 66 20 74 68 65 20 74  i><p>.  If the t
20cd0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
20ce0 74 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  t and the recurs
20cf0 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20 63  ive-select are c
20d00 6f 6e 6e 65 63 74 65 64 20 62 79 0a 20 20 55 4e  onnected by.  UN
20d10 49 4f 4e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61  ION, then only a
20d20 64 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71  dd rows to the q
20d30 75 65 75 65 20 69 66 20 6e 6f 20 69 64 65 6e 74  ueue if no ident
20d40 69 63 61 6c 20 72 6f 77 20 68 61 73 20 62 65 65  ical row has bee
20d50 6e 0a 20 20 70 72 65 76 69 6f 75 73 6c 79 20 61  n.  previously a
20d60 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
20d70 65 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f 77  e.  Repeated row
20d80 73 20 61 72 65 20 64 69 73 63 61 72 64 65 64 20  s are discarded 
20d90 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61  before being.  a
20da0 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
20db0 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 72 65  e even if the re
20dc0 70 65 61 74 65 64 20 72 6f 77 73 20 68 61 76 65  peated rows have
20dd0 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78   already been ex
20de0 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74  tracted.  from t
20df0 68 65 20 71 75 65 75 65 20 62 79 20 74 68 65 20  he queue by the 
20e00 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 2e 20  recursion stop. 
20e10 20 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   If the operator
20e20 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20   is UNION ALL,. 
20e30 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67   then all rows g
20e40 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74 68  enerated by both
20e50 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c   the initial-sel
20e60 65 63 74 20 61 6e 64 20 74 68 65 0a 20 20 72 65  ect and the.  re
20e70 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 61  cursive-select a
20e80 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20  re always added 
20e90 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
20ea0 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 20 72  n if there are r
20eb0 65 70 65 61 74 73 2e 0a 3c 6c 69 3e 3c 70 3e 0a  epeats..<li><p>.
20ec0 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
20ed0 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
20ee0 72 65 73 74 72 69 63 74 73 20 77 68 69 63 68 20  restricts which 
20ef0 72 6f 77 73 20 61 72 65 20 61 64 64 65 64 0a 20  rows are added. 
20f00 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76   to the recursiv
20f10 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20  e table in step 
20f20 32 62 2e 20 20 49 66 20 61 20 4c 49 4d 49 54 20  2b.  If a LIMIT 
20f30 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
20f40 74 2c 20 69 74 20 0a 20 20 72 65 73 74 72 69 63  t, it .  restric
20f50 74 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ts the total num
20f60 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
20f70 20 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20 74   will be added t
20f80 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
20f90 74 61 62 6c 65 2e 0a 20 20 4f 6e 63 65 20 74 68  table..  Once th
20fa0 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68  e limit is reach
20fb0 65 64 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f  ed, the recursio
20fc0 6e 20 73 74 6f 70 73 2e 20 20 28 41 73 20 69 73  n stops.  (As is
20fd0 20 61 6c 77 61 79 73 20 74 68 65 20 63 61 73 65   always the case
20fe0 20 0a 20 20 77 69 74 68 20 4c 49 4d 49 54 2c 20   .  with LIMIT, 
20ff0 61 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20  a limit of zero 
21000 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f  means that no ro
21010 77 73 20 61 72 65 20 65 76 65 72 20 61 64 64 65  ws are ever adde
21020 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75 72  d to the.  recur
21030 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64 20  sive table, and 
21040 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69 74  a negative limit
21050 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69   means an unlimi
21060 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ted number of ro
21070 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64 65  ws.  may be adde
21080 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
21090 76 65 20 74 61 62 6c 65 2e 29 0a 3c 6c 69 3e 3c  ve table.).<li><
210a0 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20  p>.  The OFFSET 
210b0 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69 73  clause, if it is
210c0 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61 73   present and has
210d0 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75   a positive valu
210e0 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74 68  e N, prevents th
210f0 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77 73  e.  first N rows
21100 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64 65   from being adde
21110 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
21120 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65 20  ve table..  The 
21130 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72 65  first N rows are
21140 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65 64   still processed
21150 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69 76   by the recursiv
21160 65 2d 73 65 6c 65 63 74 3b 20 74 68 65 79 0a 20  e-select; they. 
21170 20 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64   just are not ad
21180 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
21190 73 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77  sive table.  Row
211a0 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65  s are not counte
211b0 64 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69  d toward.  fulfi
211c0 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lling the LIMIT 
211d0 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54  until all OFFSET
211e0 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
211f0 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e  skipped..<li><p>
21200 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
21210 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
21220 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
21230 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
21240 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
21250 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
21260 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
21270 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
21280 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
21290 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
212a0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
212b0 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
212c0 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
212d0 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
212e0 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
212f0 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
21300 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
21310 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
21320 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
21330 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
21340 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
21350 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
21360 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
21370 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
21380 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
21390 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c  nt rcex1</tcl>.<
213a0 68 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65  h4>Recursive Que
213b0 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
213c0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
213d0 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
213e0 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65   all integers be
213f0 74 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30  tween 1 and 1000
21400 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  000:..<blockquot
21410 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
21420 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
21430 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e  AS (VALUES(1) UN
21440 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78  ION ALL SELECT x
21450 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52  +1 FROM cnt WHER
21460 45 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c  E x<1000000).SEL
21470 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
21480 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
21490 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  te>..<p>Consider
214a0 20 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20   how this query 
214b0 77 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74  works.  The init
214c0 69 61 6c 2d 73 65 6c 65 63 74 2c 20 77 68 69 63  ial-select, whic
214d0 68 20 69 73 20 74 68 69 73 0a 63 61 73 65 20 69  h is this.case i
214e0 73 20 6a 75 73 74 20 22 56 41 4c 55 45 53 28 31  s just "VALUES(1
214f0 29 22 2c 20 72 75 6e 73 20 66 69 72 73 74 20 61  )", runs first a
21500 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e  nd returns a sin
21510 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73  gle row.with a s
21520 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22  ingle column "1"
21530 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20  .  This one row 
21540 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
21550 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20  queue.  In.step 
21560 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77  2a, that one row
21570 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72   is extracted fr
21580 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e 64  om the queue and
21590 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e   added to "cnt".
215a0 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75 72 73  .Then the recurs
215b0 69 76 65 20 71 75 65 72 79 20 69 73 20 72 75 6e  ive query is run
215c0 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77   in accordance w
215d0 69 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65  ith step 2c gene
215e0 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20  rating.a single 
215f0 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c  new row with val
21600 75 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f  ue "2" to add to
21610 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65   the queue.  The
21620 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73   queue still.has
21630 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65   one row, so ste
21640 70 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68  p 2 repeats.  Th
21650 65 20 32 20 69 73 20 65 78 74 72 61 63 74 65 64  e 2 is extracted
21660 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
21670 65 0a 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e.recursive tabl
21680 65 20 62 79 20 73 74 65 70 73 20 32 61 20 61 6e  e by steps 2a an
21690 64 20 32 62 2e 20 20 54 68 65 6e 20 74 68 65 20  d 2b.  Then the 
216a0 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32  row containing 2
216b0 20 69 73 20 75 73 65 64 20 0a 61 73 20 69 66 20   is used .as if 
216c0 77 68 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65  where the comple
216d0 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  te content of th
216e0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
216f0 65 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72  e and the .recur
21700 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
21710 75 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74  un again, result
21720 69 6e 67 20 69 6e 20 61 20 76 61 6c 75 65 20 6f  ing in a value o
21730 66 20 33 20 62 65 69 6e 67 20 61 64 64 65 64 0a  f 3 being added.
21740 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
21750 68 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39  his repeats 9999
21760 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66  99 times until f
21770 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32  inally at step 2
21780 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65  a the.only value
21790 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73   on the queue is
217a0 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e   a row containin
217b0 67 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74  g 1000000.  That
217c0 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65   row is.extracte
217d0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
217e0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
217f0 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69  le.  But this ti
21800 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c  me, the.WHERE cl
21810 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
21820 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
21830 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f   to return no ro
21840 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65  ws, so the.queue
21850 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61   remains empty a
21860 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  nd the recursion
21870 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f   stops...<p><b>O
21880 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65  ptimization note
21890 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73  :</b>.In the dis
218a0 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 77  cussion above, w
218b0 68 65 6e 20 77 65 20 73 61 79 20 74 68 69 6e 67  hen we say thing
218c0 73 20 6c 69 6b 65 20 22 77 72 69 74 65 20 74 68  s like "write th
218d0 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20 72  e row into.the r
218e0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2c  ecursive table",
218f0 20 77 65 20 6d 65 61 6e 20 74 68 61 6e 20 63 6f   we mean than co
21900 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20  nceptually, not 
21910 69 6e 20 72 65 61 6c 69 74 79 2e 0a 52 65 61 64  in reality..Read
21920 20 6c 69 74 65 72 61 6c 6c 79 2c 20 69 74 20 73   literally, it s
21930 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69  ounds as if SQLi
21940 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69  te is accumulati
21950 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a  ng a huge table.
21960 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d  containing one m
21970 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65  illion rows, the
21980 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64  n going back and
21990 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74   scanning that t
219a0 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f  able.from top to
219b0 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72   bottom to gener
219c0 61 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ate the result. 
219d0 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70   What really hap
219e0 70 65 6e 73 20 74 68 6f 75 67 68 2c 0a 69 6e 20  pens though,.in 
219f0 74 68 69 73 20 63 61 73 65 2c 20 69 73 20 74 68  this case, is th
21a00 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  at the query opt
21a10 69 6d 69 7a 65 72 20 72 65 61 6c 69 7a 65 73 20  imizer realizes 
21a20 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e 20 74  that values in t
21a30 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72 73 69  he."cnt" recursi
21a40 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c  ve table are onl
21a50 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f  y used once.  So
21a60 20 61 73 20 65 61 63 68 20 72 6f 77 20 69 73 20   as each row is 
21a70 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72 65 63  added to.the rec
21a80 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 69 74  ursive table, it
21a90 20 69 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   is immediately 
21aa0 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 72 65  returned as a re
21ab0 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45  sult of the.SELE
21ac0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
21ad0 20 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e   then discarded.
21ae0 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65    SQLite does <e
21af0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d  m>not</em> accum
21b00 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72  ulate.a temporar
21b10 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  y table containi
21b20 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77  ng a million row
21b30 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20  s.  Very little 
21b40 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64  memory is.needed
21b50 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76   to run the abov
21b60 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  e example.  Howe
21b70 76 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d  ver, if the exam
21b80 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49  ple had used.UNI
21b90 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e  ON instead of UN
21ba0 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51  ION ALL, then SQ
21bb0 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20  Lite would have 
21bc0 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75  had to keep arou
21bd0 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  nd.all previousl
21be0 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74  y generated cont
21bf0 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ent in order to 
21c00 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63  check for duplic
21c10 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72  ates..For this r
21c20 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  eason, programme
21c30 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65  rs should strive
21c40 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c   to use UNION AL
21c50 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49  L instead.of UNI
21c60 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65  ON when feasible
21c70 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
21c80 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
21c90 20 73 61 6d 65 20 65 78 61 6d 70 6c 65 3a 0a 0a   same example:..
21ca0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
21cb0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
21cc0 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a 20  .  cnt(x) AS (. 
21cd0 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
21ce0 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
21cf0 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d   SELECT x+1 FROM
21d00 20 63 6e 74 20 4c 49 4d 49 54 20 31 30 30 30 30   cnt LIMIT 10000
21d10 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 78 20  00.  ).SELECT x 
21d20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
21d30 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
21d40 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  p>There are two 
21d50 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e 20 74  differences in t
21d60 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e 20 20  his variation.  
21d70 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
21d80 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20 31 22  ct is."SELECT 1"
21d90 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56 41 4c   instead of "VAL
21da0 55 45 53 28 31 29 22 2e 20 20 42 75 74 20 74 68  UES(1)".  But th
21db0 6f 73 65 20 61 72 65 20 72 65 61 6c 6c 79 20 6a  ose are really j
21dc0 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79  ust different.sy
21dd0 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e  ntaxes for sayin
21de0 67 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  g exactly the sa
21df0 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f  me thing.  The o
21e00 74 68 65 72 20 63 68 61 6e 67 65 20 69 73 20 74  ther change is t
21e10 68 61 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f  hat the.recursio
21e20 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62 79 20  n is stopped by 
21e30 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74  a LIMIT rather t
21e40 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75  han a WHERE clau
21e50 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  se.  The use of.
21e60 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74  LIMIT means that
21e70 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69   when the one-mi
21e80 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61  llionth row is a
21e90 64 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74  dded to the "cnt
21ea0 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 69 6d 6d  " table.(and imm
21eb0 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65  ediately returne
21ec0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2c  d by the SELECT,
21ed0 20 74 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71   thanks to the q
21ee0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a  uery optimizer).
21ef0 74 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69  then the recursi
21f00 6f 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61  on stops immedia
21f10 74 65 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20  tely regardless 
21f20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73  of how many rows
21f30 20 6d 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69   might be.left i
21f40 6e 20 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e  n the queue.  On
21f50 20 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75   more complex qu
21f60 65 72 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f  eries, it can so
21f70 6d 65 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69  metimes be.diffi
21f80 63 75 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74  cult to ensure t
21f90 68 61 74 20 74 68 65 20 57 48 45 52 45 20 63 6c  hat the WHERE cl
21fa0 61 75 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75  ause will eventu
21fb0 61 6c 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71  ally cause the.q
21fc0 75 65 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e  ueue to drain an
21fd0 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  d the recursion 
21fe0 74 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42  to terminate.  B
21ff0 75 74 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  ut the LIMIT cla
22000 75 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20  use will.always 
22010 73 74 6f 70 20 74 68 65 20 72 65 63 75 72 73 69  stop the recursi
22020 6f 6e 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f  on.  So it is go
22030 6f 64 20 70 72 61 63 74 69 63 65 20 74 6f 20 61  od practice to a
22040 6c 77 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a  lways include a.
22050 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20  LIMIT clause as 
22060 61 20 73 61 66 65 74 79 20 69 66 20 61 6e 20 75  a safety if an u
22070 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
22080 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65  e size of the re
22090 63 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77  cursion .is know
220a0 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  n...<tcl>hd_frag
220b0 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e  ment rcex2</tcl>
220c0 0a 3c 68 34 3e 48 69 65 72 61 72 63 68 69 63 61  .<h4>Hierarchica
220d0 6c 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  l Query Examples
220e0 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64  </h4>..<p>Consid
220f0 65 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  er a table that 
22100 64 65 73 63 72 69 62 65 73 20 74 68 65 20 6d 65  describes the me
22110 6d 62 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61  mbers of an orga
22120 6e 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c  nization as.well
22130 20 61 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66   as the chain-of
22140 2d 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20  -command within 
22150 74 68 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f  that organizatio
22160 6e 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  n...<blockquote>
22170 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
22180 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54  LE org(.  name T
22190 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
221a0 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46  .  boss TEXT REF
221b0 45 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68  ERENCES org,.  h
221c0 65 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20  eight INT,.  -- 
221d0 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d  other content om
221e0 69 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c  itted.);.</pre><
221f0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
22200 3e 45 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e  >Every member in
22210 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f   the organizatio
22220 6e 20 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e  n has a name, an
22230 64 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68  d most members h
22240 61 76 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73  ave.a single bos
22250 73 2e 20 20 54 68 65 20 68 65 61 64 20 6f 66 20  s.  The head of 
22260 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  the organization
22270 20 68 61 73 20 6e 6f 20 62 6f 73 73 20 61 6e 64   has no boss and
22280 20 73 6f 20 74 68 65 20 0a 62 6f 73 73 20 66 69   so the .boss fi
22290 65 6c 64 20 77 6f 75 6c 64 20 62 65 20 4e 55 4c  eld would be NUL
222a0 4c 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 72  L for that one r
222b0 6f 77 2e 20 20 54 68 65 20 72 6f 77 73 20 6f 66  ow.  The rows of
222c0 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65   the "org" table
222d0 0a 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a 3c  .form a tree...<
222e0 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72  p>Here is a quer
222f0 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  y that computes 
22300 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69 67  the average heig
22310 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e 65  ht over everyone
22320 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67 61  .in Alice's orga
22330 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75 64  nization, includ
22340 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f  ing Alice:..<blo
22350 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
22360 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 77  TH RECURSIVE.  w
22370 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28 6e  orks_for_alice(n
22380 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
22390 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20 55  S('Alice').    U
223a0 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
223b0 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20 77  name FROM org, w
223c0 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a 20  orks_for_alice. 
223d0 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62 6f      WHERE org.bo
223e0 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  ss=works_for_ali
223f0 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54 20  ce.n.  ).SELECT 
22400 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f 4d  avg(height) FROM
22410 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67 2e   org. WHERE org.
22420 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66 6f  name IN works_fo
22430 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
22440 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
22450 3e 4e 65 78 74 20 77 65 20 63 6f 6e 73 69 64 65  >Next we conside
22460 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 74 68 61  r an example tha
22470 74 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d 6d  t uses two .comm
22480 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22490 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65  ions in a single
224a0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20 0a   WITH clause.  .
224b0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  The following ta
224c0 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66 61  ble records a fa
224d0 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f  mily tree:..<blo
224e0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
224f0 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69 6c  EATE TABLE famil
22500 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  y(.  name TEXT P
22510 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 6f  RIMARY KEY,.  mo
22520 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45  m TEXT REFERENCE
22530 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64 20  S family,.  dad 
22540 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
22550 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20 44  family,.  born D
22560 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64 20  ATETIME,.  died 
22570 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c  DATETIME, -- NUL
22580 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76 65  L if still alive
22590 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74  .  -- other cont
225a0 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ent.);.</pre></b
225b0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
225c0 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62 6c  he "family" tabl
225d0 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
225e0 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72 67  the earlier "org
225f0 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20 74  " table except t
22600 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20 61  hat .now there a
22610 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20 74  re two parents t
22620 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 20 28 61  o each member (a
22630 73 20 74 68 65 72 65 20 6e 6f 72 6d 61 6c 6c 79  s there normally
22640 20 69 73 20 69 6e 20 72 65 61 6c 20 6c 69 66 65   is in real life
22650 29 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e  )..We want to kn
22660 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e  ow all living an
22670 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69 63 65  cestors of Alice
22680 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f  , from oldest to
22690 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72   youngest..An or
226a0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
226b0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
226c0 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20  "parent_of", is 
226d0 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e 20 20  defined first.  
226e0 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20 43 54  That.ordinary CT
226f0 45 20 69 73 20 61 20 76 69 65 77 20 74 68 61 74  E is a view that
22700 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
22710 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e 74 73  find all parents
22720 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69 64 75   of any.individu
22730 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69 6e 61  al.  That ordina
22740 72 79 20 43 54 45 20 69 73 20 74 68 65 6e 20 75  ry CTE is then u
22750 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e 63 65  sed in the "ance
22760 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72  stor_of_alice".r
22770 65 63 75 72 73 69 76 65 20 43 54 45 2e 20 20 54  ecursive CTE.  T
22780 68 65 20 72 65 63 75 72 73 69 76 65 20 43 54 45  he recursive CTE
22790 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e   is then used in
227a0 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65 72 79   the final query
227b0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
227c0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
227d0 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28  IVE.  parent_of(
227e0 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20 41 53  name, parent) AS
227f0 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61 6d  .    (SELECT nam
22800 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69  e, mom FROM fami
22810 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  ly UNION SELECT 
22820 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d 20 66  name, dad FROM f
22830 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74  amily),.  ancest
22840 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65  or_of_alice(name
22850 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
22860 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72   parent FROM par
22870 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d  ent_of WHERE nam
22880 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20 20 55  e='Alice'.     U
22890 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45  NION ALL.     SE
228a0 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
228b0 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20   parent_of JOIN 
228c0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
228d0 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53  e USING(name)).S
228e0 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d  ELECT family.nam
228f0 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f  e FROM ancestor_
22900 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79  of_alice, family
22910 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72  . WHERE ancestor
22920 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66  _of_alice.name=f
22930 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e  amily.name.   AN
22940 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20  D died IS NULL. 
22950 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c  ORDER BY born;.<
22960 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
22970 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
22980 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e  ment rcex2</tcl>
22990 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41 67 61  .<h4>Queries Aga
229a0 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f 68 34  inst A Graph</h4
229b0 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20  >..<p>A version 
229c0 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 20 28  control system (
229d0 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69 63 61  VCS) will typica
229e0 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20 65 76  lly store the ev
229f0 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20  olving.versions 
22a00 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61 73 20  of a project as 
22a10 61 20 64 69 72 65 63 74 65 64 20 61 63 79 63 6c  a directed acycl
22a20 69 63 20 67 72 61 70 68 20 28 44 41 47 29 2e 20  ic graph (DAG). 
22a30 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72 73 69   Call each.versi
22a40 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63  on of the projec
22a50 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e 20 20  t a "checkin".  
22a60 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e  A single.checkin
22a70 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f   can have zero o
22a80 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20  r more parents. 
22a90 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73 20 28   Most checkins (
22aa0 65 78 63 65 70 74 20 74 68 65 0a 66 69 72 73 74  except the.first
22ab0 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20  ) have a single 
22ac0 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e 20 74  parent, but in t
22ad0 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d 65 72  he case of a mer
22ae0 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69  ge, a checkin.mi
22af0 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f 72 20  ght have two or 
22b00 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 70 61  three or more pa
22b10 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65 6d 61  rents.  A schema
22b20 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f   to keep track o
22b30 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64 20 74  f.checkins and t
22b40 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
22b50 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d 69 67  h they occur mig
22b60 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e  ht look somethin
22b70 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62  g like.this:..<b
22b80 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
22b90 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 68 65  CREATE TABLE che
22ba0 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54 45 47  ckin(.  id INTEG
22bb0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
22bc0 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45 52 20    mtime INTEGER 
22bd0 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77 68 65  -- timestamp whe
22be0 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e 20 6f  n this checkin o
22bf0 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45 41 54  ccurred.);.CREAT
22c00 45 20 54 41 42 4c 45 20 64 65 72 69 76 65 64 66  E TABLE derivedf
22c10 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54  rom(.  xfrom INT
22c20 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
22c30 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
22c40 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68 65 63  , -- parent chec
22c50 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45 47 45  kin.  xto INTEGE
22c60 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
22c70 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 20  ENCES checkin,  
22c80 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68 65 63   -- derived chec
22c90 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  kin.  PRIMARY KE
22ca0 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a  Y(xfrom,xto).);.
22cb0 43 52 45 41 54 45 20 49 4e 44 45 58 20 64 65 72  CREATE INDEX der
22cc0 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e  ivedfrom_back ON
22cd0 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78 74 6f   derivedfrom(xto
22ce0 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c  ,xfrom);.</pre><
22cf0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
22d00 3e 54 68 69 73 20 67 72 61 70 68 20 69 73 20 61  >This graph is a
22d10 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77 65 20  cyclic.  And we 
22d20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
22d30 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79 0a 63  mtime of every.c
22d40 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69 73 20  hild checkin is 
22d50 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
22d60 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74   mtime of all it
22d70 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75 74 0a  s parents.  But.
22d80 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72 6c 69  unlike the earli
22d90 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68 65  er examples, the
22da0 72 65 20 6d 69 67 68 74 20 62 65 20 6d 75 6c 74  re might be mult
22db0 69 70 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69  iple paths of.di
22dc0 66 66 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20  ffering lengths 
22dd0 62 65 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20  between any two 
22de0 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65  checkins...<p>We
22df0 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68   want to know th
22e00 65 20 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65  e twenty most re
22e10 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69  cent ancestors i
22e20 6e 20 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74  n time (out of.t
22e30 68 65 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64  he thousands and
22e40 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e   thousands of an
22e50 63 65 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77  cestors in the w
22e60 68 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68  hole DAG) for.ch
22e70 65 63 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45  eckin "@BASELINE
22e80 22 2e 20 20 28 41 20 71 75 65 72 79 20 73 69 6d  ".  (A query sim
22e90 69 6c 61 72 20 74 6f 20 74 68 69 73 20 69 73 20  ilar to this is 
22ea0 75 73 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68  used.by the <a h
22eb0 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  ref="http://www.
22ec0 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22  fossil-scm.org/"
22ed0 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20  >Fossil</a> VCS 
22ee0 74 6f 0a 73 68 6f 77 20 74 68 65 20 32 30 20 6d  to.show the 20 m
22ef0 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73  ost recent ances
22f00 74 6f 72 73 20 6f 66 20 61 20 63 68 65 63 6b 2e  tors of a check.
22f10 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c    For example:.<
22f20 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77  a href="http://w
22f30 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72  ww.sqlite.org/sr
22f40 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75  c/timeline?p=tru
22f50 6e 6b 26 6e 3d 32 30 22 3e 68 74 74 70 3a 2f 2f  nk&n=20">http://
22f60 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
22f70 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72  rc/timeline?p=tr
22f80 75 6e 6b 26 6e 3d 32 30 3c 2f 61 3e 2e 29 0a 0a  unk&n=20</a>.)..
22f90 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
22fa0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
22fb0 0a 20 20 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d  .  ancestor(id,m
22fc0 74 69 6d 65 29 20 41 53 20 28 0a 20 20 20 20 53  time) AS (.    S
22fd0 45 4c 45 43 54 20 69 64 2c 20 6d 74 69 6d 65 20  ELECT id, mtime 
22fe0 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48 45  FROM checkin WHE
22ff0 52 45 20 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a  RE id=@BASELINE.
23000 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45      UNION.    SE
23010 4c 45 43 54 20 64 65 72 69 76 65 64 66 72 6f 6d  LECT derivedfrom
23020 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e  .xfrom, checkin.
23030 6d 74 69 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d  mtime.      FROM
23040 20 61 6e 63 65 73 74 6f 72 2c 20 64 65 72 69 76   ancestor, deriv
23050 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a  edfrom, checkin.
23060 20 20 20 20 20 57 48 45 52 45 20 61 6e 63 65 73       WHERE ances
23070 74 6f 72 2e 69 64 3d 64 65 72 69 76 65 64 66 72  tor.id=derivedfr
23080 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20 20 41 4e  om.xto.       AN
23090 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72  D checkin.id=der
230a0 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20  ivedfrom.xfrom. 
230b0 20 20 20 20 4f 52 44 45 52 20 42 59 20 63 68 65      ORDER BY che
230c0 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a  ckin.mtime DESC.
230d0 20 20 20 20 20 4c 49 4d 49 54 20 32 30 0a 20 20       LIMIT 20.  
230e0 29 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ).SELECT * FROM 
230f0 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63  checkin JOIN anc
23100 65 73 74 6f 72 20 4f 4e 20 69 64 3d 78 66 72 6f  estor ON id=xfro
23110 6d 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  m;.</pre></block
23120 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20  quote>..<p>.The 
23130 22 4f 52 44 45 52 42 59 20 63 68 65 63 6b 69 6e  "ORDERBY checkin
23140 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74 65 72  .mtime DESC" ter
23150 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  m in the recursi
23160 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a  ve-select makes.
23170 74 68 65 20 71 75 65 72 79 20 72 75 6e 20 6d 75  the query run mu
23180 63 68 20 66 61 73 74 65 72 20 62 79 20 70 72 65  ch faster by pre
23190 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  venting it from 
231a0 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68  following.branch
231b0 65 73 20 74 68 61 74 20 6d 65 72 67 65 20 63 68  es that merge ch
231c0 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67  eckins.from long
231d0 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44 45 52   ago.  The ORDER
231e0 20 42 59 20 66 6f 72 63 65 73 20 74 68 65 20 72   BY forces the r
231f0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
23200 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20  to focus.on the 
23210 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68 65 63  most recent chec
23220 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73 20 77  kins, the ones w
23230 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f 75 74  e want.  Without
23240 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e   the ORDER BY.on
23250 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
23260 65 6c 65 63 74 2c 20 77 65 20 77 6f 75 6c 64 20  elect, we would 
23270 62 65 20 66 6f 72 63 65 64 20 74 6f 20 66 69 6e  be forced to fin
23280 64 20 61 6c 6c 20 61 6e 63 65 73 74 6f 72 73 0a  d all ancestors.
23290 6f 66 20 74 68 65 20 64 65 73 69 72 65 64 20 63  of the desired c
232a0 68 65 63 6b 2d 69 6e 2c 20 73 6f 72 74 20 74 68  heck-in, sort th
232b0 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c  em all by mtime,
232c0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74   then take the t
232d0 6f 70 0a 74 77 65 6e 74 79 2e 20 20 54 68 65 20  op.twenty.  The 
232e0 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74 69  ORDER BY essenti
232f0 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20 70  ally sets up a p
23300 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74 68  riority queue th
23310 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65  at.forces the re
23320 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74 6f  cursive query to
23330 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73   look at the mos
23340 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
23350 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69  rs first,.allowi
23360 6e 67 20 75 73 20 74 6f 20 69 6e 73 65 72 74 20  ng us to insert 
23370 61 20 4c 49 4d 49 54 20 63 6c 6f 73 65 20 61 6e  a LIMIT close an
23380 64 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73  d restrict the s
23390 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72  cope of the.quer
233a0 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68  y to just the ch
233b0 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65  eckins of intere
233c0 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  st...<tcl>hd_fra
233d0 67 6d 65 6e 74 20 72 63 65 78 33 3c 2f 74 63 6c  gment rcex3</tcl
233e0 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68  >.<h4>Outlandish
233f0 20 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79   Recursive Query
23400 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a   Examples</h4>..
23410 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
23420 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20   query computes 
23430 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
23440 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72   of the Mandelbr
23450 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75  ot Set.and outpu
23460 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73  ts the result as
23470 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c   ASCII-art:..<bl
23480 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
23490 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
234a0 78 61 78 69 73 28 78 29 20 41 53 20 28 56 41 4c  xaxis(x) AS (VAL
234b0 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20  UES(-2.0) UNION 
234c0 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30  ALL SELECT x+0.0
234d0 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45  5 FROM xaxis WHE
234e0 52 45 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78  RE x<1.2),.  yax
234f0 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53  is(y) AS (VALUES
23500 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-1.0) UNION ALL
23510 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52   SELECT y+0.1 FR
23520 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79  OM yaxis WHERE y
23530 3c 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c  <1.0),.  m(iter,
23540 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41   cx, cy, x, y) A
23550 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30  S (.    SELECT 0
23560 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30  , x, y, 0.0, 0.0
23570 20 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78   FROM xaxis, yax
23580 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  is.    UNION ALL
23590 0a 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72  .    SELECT iter
235a0 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d  +1, cx, cy, x*x-
235b0 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a  y*y + cx, 2.0*x*
235c0 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20  y + cy FROM m . 
235d0 20 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b      WHERE (x*x +
235e0 20 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20   y*y) < 4.0 AND 
235f0 69 74 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d  iter<28.  ),.  m
23600 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20  2(iter, cx, cy) 
23610 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
23620 6d 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63  max(iter), cx, c
23630 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42  y FROM m GROUP B
23640 59 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20  Y cx, cy.  ),.  
23650 61 28 74 29 20 41 53 20 28 0a 20 20 20 20 53 45  a(t) AS (.    SE
23660 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61  LECT group_conca
23670 74 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23  t( substr(' .+*#
23680 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c  ', 1+min(iter/7,
23690 34 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20  4), 1), '') .   
236a0 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42   FROM m2 GROUP B
236b0 59 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20  Y cy.  ).SELECT 
236c0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72  group_concat(rtr
236d0 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f  im(t),x'0a') FRO
236e0 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  M a;.</pre></blo
236f0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20  ckquote>..<p>In 
23700 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65 20  this query, the 
23710 22 78 61 78 69 73 22 20 61 6e 64 20 22 79 61 78  "xaxis" and "yax
23720 69 73 22 20 43 54 45 73 20 64 65 66 69 6e 65 20  is" CTEs define 
23730 74 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e  the grid of poin
23740 74 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65  ts for.which the
23750 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20   Mandelbrot Set 
23760 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d  will be approxim
23770 61 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20  ated.  Each row 
23780 69 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63  in the."m(iter,c
23790 78 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d  x,cy,x,y)" CTE m
237a0 65 61 6e 73 20 74 68 61 74 20 61 66 74 65 72 20  eans that after 
237b0 22 69 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e  "iter" iteration
237c0 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  s, the Mandelbro
237d0 74 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72  t.iteration star
237e0 74 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61  ting at cx,cy ha
237f0 73 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20  s reached point 
23800 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72  x,y.  The number
23810 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69   of iterations.i
23820 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69  n this example i
23830 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20  s limited to 28 
23840 28 77 68 69 63 68 20 73 65 76 65 72 65 6c 79 20  (which severely 
23850 6c 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c  limits the resol
23860 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d  ution of.the com
23870 70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 74 68  putation, but th
23880 69 73 20 69 73 20 6a 75 73 74 20 61 6e 20 65 78  is is just an ex
23890 61 6d 70 6c 65 2c 20 61 66 74 65 72 20 61 6c 6c  ample, after all
238a0 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c  )..The "m2(iter,
238b0 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64  cx,cy)" CTE hold
238c0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
238d0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
238e0 6e 73 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a  ns reached when.
238f0 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e  starting at poin
23900 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79  t cx,cy..Finally
23910 2c 20 74 68 65 20 65 6e 74 72 79 20 69 6e 20 74  , the entry in t
23920 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68 6f  he "a(t)" CTE ho
23930 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77 68  lds a string .wh
23940 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ich is a single 
23950 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70  line of the outp
23960 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54 68  ut ASCII-art..Th
23970 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
23980 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a 75  nt at the end ju
23990 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20 22  st queries the "
239a0 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69 65  a" CTE to.retrie
239b0 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20  ve all lines of 
239c0 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62  ASCII-art, one b
239d0 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 49 66 20 79 6f  y one...<p>If yo
239e0 75 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  u copy/paste the
239f0 20 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e 74   query above int
23a00 6f 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d  o an SQLite [com
23a10 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
23a20 2c 0a 74 68 65 20 6f 75 74 70 75 74 20 73 68 6f  ,.the output sho
23a30 75 6c 64 20 62 65 20 74 68 65 20 66 6f 6c 6c 6f  uld be the follo
23a40 77 69 6e 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  wing:..<blockquo
23a50 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20  te><pre>.       
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
23a80 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  .#.             
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20        ..#*...   
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
23ad0 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  +####+..        
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
23b00 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20  ....   +.       
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23      ..##+*######
23b30 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20  ####+.++++.     
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23       .+.########
23b60 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
23b70 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
23b80 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
23b90 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
23bb0 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
23bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23bd0 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
23be0 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23  ...+#######++###
23bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c00 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20  ####..          
23c10 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
23c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c30 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23  ######.. #######
23c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c60 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20  ######....      
23c70 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23      ....+*######
23c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c90 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20  ##########..    
23ca0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23           ...+###
23cb0 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23  ####++##########
23cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20  #############.. 
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
23ce0 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
23cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
23d00 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d10 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23  .............+##
23d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23d30 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20  #+.+.           
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
23d50 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +.##############
23d60 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23    ..##+*########
23d90 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20  ##+.++++.       
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
23dc0 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23             ..+##
23df0 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20          ..#*... 
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e40 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20     ....#.       
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a               +..
23e70 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
23e80 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  te>..<tcl>hd_fra
23e90 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74  gment mandelbrot
23ea0 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e  </tcl>.<p>This n
23eb0 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73  ext query solves
23ec0 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65   a Sudoku puzzle
23ed0 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  .  The state of 
23ee0 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65  the puzzle is.de
23ef0 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63  fined by an 81-c
23f00 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
23f10 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e  formed by readin
23f20 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  g entries from t
23f30 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f  he.puzzle box ro
23f40 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65  w by row from le
23f50 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20  ft to right and 
23f60 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f  then from top to
23f70 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73   bottom..Blank s
23f80 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75  quares in the pu
23f90 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64  zzle are denoted
23fa0 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63   by a "." charac
23fb0 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20  ter.  .Thus the 
23fc0 69 6e 70 75 74 20 73 74 72 69 6e 67 0a 0a 3c 62  input string..<b
23fd0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37  lockquote>.53..7
23fe0 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
23ff0 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
24000 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
24010 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
24020 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62  ..5....8..79.</b
24030 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
24040 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20  orresponds to a 
24050 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73  puzzle like this
24060 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
24070 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31  <table border="1
24080 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
24090 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e  ">.<tr><td>5<td>
240a0 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  3<td> <td> <td>7
240b0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
240c0 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64  td>.<tr><td>6<td
240d0 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e  > <td> <td>1<td>
240e0 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20  9<td>5<td> <td> 
240f0 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  <td>.<tr><td> <t
24100 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d>9<td>8<td> <td
24110 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
24120 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c  6<td>.<tr><td>8<
24130 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
24140 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
24150 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e  > <td>3.<tr><td>
24160 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38  4<td> <td> <td>8
24170 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td> <td>3<td> <
24180 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74  td> <td>1.<tr><t
24190 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>7<td> <td> <td
241a0 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e  > <td>2<td> <td>
241b0 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e   <td> <td>6.<tr>
241c0 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c  <td> <td>6<td> <
241d0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
241e0 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72  d>2<td>8<td>.<tr
241f0 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
24200 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td>4<td>1<td>9<
24210 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c  td> <td> <td>5.<
24220 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
24230 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
24240 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39   <td> <td>7<td>9
24250 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
24260 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
24270 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74 68   is the query th
24280 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75  at solves the pu
24290 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  zzle:..<blockquo
242a0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
242b0 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28  CURSIVE.  input(
242c0 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56 41  sud) AS (.    VA
242d0 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36  LUES('53..7....6
242e0 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
242f0 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
24300 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
24310 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
24320 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20  ..8..79').  ),. 
24330 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41   digits(z, lp) A
24340 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
24350 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e  1', 1).    UNION
24360 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20   ALL SELECT.    
24370 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58  CAST(lp+1 AS TEX
24380 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69  T), lp+1 FROM di
24390 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c 39 0a  gits WHERE lp<9.
243a0 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29    ),.  x(s, ind)
243b0 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
243c0 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
243d0 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
243e0 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
243f0 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20     SELECT.      
24400 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64  substr(s, 1, ind
24410 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73  -1) || z || subs
24420 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20  tr(s, ind+1),.  
24430 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
24440 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
24450 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
24460 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20   ind+1), '.' ). 
24470 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69      FROM x, digi
24480 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52  ts AS z.    WHER
24490 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e  E ind>0.      AN
244a0 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20  D NOT EXISTS (. 
244b0 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
244c0 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20  T 1.            
244d0 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53    FROM digits AS
244e0 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20   lp.            
244f0 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
24500 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
24510 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20  9)*9 + lp, 1).  
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
24530 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
24540 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28   ((ind-1)%9) + (
24550 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a  lp-1)*9 + 1, 1).
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
24580 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20  s, (((ind-1)/3) 
24590 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20  % 3) * 3.       
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
245c0 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20  * 27 + lp.      
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29    + ((lp-1) / 3)
245f0 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20   * 6, 1).       
24600 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73    ).  ).SELECT s
24610 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
24620 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d=0;.</pre></blo
24630 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
24640 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66   "input" CTE def
24650 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70  ines the input p
24660 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69  uzzle..The "digi
24670 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20  ts" CTE defines 
24680 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  a table that hol
24690 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65  ds all digits be
246a0 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54  tween 1 and 9..T
246b0 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69  he work of solvi
246c0 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  ng the puzzle is
246d0 20 75 6e 64 65 72 74 61 6b 69 6e 67 20 62 79 20   undertaking by 
246e0 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20  the "x" CTE..An 
246f0 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64  entry in x(s,ind
24700 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
24710 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
24720 72 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61  ring "s" is a va
24730 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c  lid.sudoku puzzl
24740 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e  e (it has no con
24750 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74  flicts) and that
24760 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f   the first unkno
24770 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20  wn character.is 
24780 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64  at position "ind
24790 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20  ", or ind==0 if 
247a0 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f  all character po
247b0 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c  sitions are fill
247c0 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c  ed in..The goal,
247d0 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d   then, is to com
247e0 70 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72  pute entries for
247f0 20 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e   "x" with an "in
24800 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65  d" of 0...<p>The
24810 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79   solver works by
24820 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72   adding new entr
24830 69 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72  ies to the "x" r
24840 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
24850 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72  Given prior entr
24860 69 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69  ies, the recursi
24870 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20  ve-select tries 
24880 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e  to fill in a sin
24890 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e  gle new.position
248a0 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73   with all values
248b0 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
248c0 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77   that actually w
248d0 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69  ork in that.posi
248e0 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c  tion.  The compl
248f0 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53  icated "NOT EXIS
24900 54 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20  TS" subquery is 
24910 74 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66  the magic that.f
24920 69 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68  igures out wheth
24930 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63  er or not each c
24940 61 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72  andidate "s" str
24950 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73  ing is a valid.s
24960 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20  udoku puzzle or 
24970 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e  not...<p>The fin
24980 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75  al answer is fou
24990 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f  nd by looking fo
249a0 72 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20  r a string with 
249b0 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f  ind==0..If the o
249c0 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70  riginal sudoku p
249d0 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68  roblem did not h
249e0 61 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c  ave a unique sol
249f0 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20  ution, then.the 
24a00 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72  query will retur
24a10 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73  n all possible s
24a20 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68  olutions.  If th
24a30 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c  e original probl
24a40 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c  em.was unsolvabl
24a50 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20  e, then no rows 
24a60 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
24a70 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
24a80 20 74 68 65 0a 61 6e 73 77 65 72 20 6f 66 3a 0a   the.answer of:.
24a90 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33  .<blockquote>.53
24aa0 34 36 37 38 39 31 32 36 37 32 31 39 35 33 34 38  4678912672195348
24ab0 31 39 38 33 34 32 35 36 37 38 35 39 37 36 31 34  1983425678597614
24ac0 32 33 34 32 36 38 35 33 37 39 31 37 31 33 39 32  2342685379171392
24ad0 34 38 35 36 39 36 31 35 33 37 32 38 34 32 38 37  4856961537284287
24ae0 34 31 39 36 33 35 33 34 35 32 38 36 31 37 39 0a  419635345286179.
24af0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
24b00 70 3e 49 73 20 63 6f 6d 70 75 74 65 64 20 69 6e  p>Is computed in
24b10 20 61 62 6f 75 74 20 33 30 30 20 6d 69 6c 6c 69   about 300 milli
24b20 73 65 63 6f 6e 64 73 2e 0a 0a 3c 68 33 3e 4c 69  seconds...<h3>Li
24b30 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61  mitations And Ca
24b40 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e  veats</h3>..<ul>
24b50 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
24b60 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  H clause cannot 
24b70 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
24b80 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
24b90 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  ]..<li><p>.The W
24ba0 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20  ITH clause must 
24bb0 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65  appear at the be
24bc0 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70  ginning of a top
24bd0 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20  -level [SELECT] 
24be0 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20  statement.or at 
24bf0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
24c00 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68   a subquery.  Th
24c10 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
24c20 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65  nnot be prepende
24c30 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20  d to.the second 
24c40 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45  or subsequent SE
24c50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
24c60 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  f a [compound se
24c70 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  lect]..<li><p>.T
24c80 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63  he SQL:1999 spec
24c90 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
24ca0 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
24cb0 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48  word follow WITH
24cc0 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61   in any.WITH cla
24cd0 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65  use that include
24ce0 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  s a recursive co
24cf0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
24d00 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ssion.  However,
24d10 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
24d20 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65  ty with SqlServe
24d30 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51  r and Oracle, SQ
24d40 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e  Lite does not en
24d50 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e  force this rule.
24d60 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  .</ul>..<tcl>.##
24d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24db0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
24dc0 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
24dd0 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
24de0 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  y}..RecursiveBub
24df0 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
24e00 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a  t-stmt.</tcl>...
24e10 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
24e20 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
24e30 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
24e40 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
24e50 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
24e60 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
24e70 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
24e80 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
24e90 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
24ea0 20 63 6f 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e   columns.  ..<p>
24eb0 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
24ec0 6d 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74  ment is the most
24ed0 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d   complicated com
24ee0 6d 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20  mand in the SQL 
24ef0 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b  language..To mak
24f00 65 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f  e the descriptio
24f10 6e 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c  n easier to foll
24f20 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  ow, some of the 
24f30 70 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64  passages below d
24f40 65 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20  escribe.the way 
24f50 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
24f60 64 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74  d by a SELECT st
24f70 61 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72  atement is deter
24f80 6d 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65  mined as a serie
24f90 73 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69  s of.steps. It i
24fa0 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b  s important to k
24fb0 65 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74  eep in mind that
24fc0 20 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20   this is purely 
24fd0 69 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69  illustrative -.i
24fe0 6e 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68  n practice neith
24ff0 65 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e  er SQLite nor an
25000 79 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69  y other SQL engi
25010 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
25020 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f  o follow .this o
25030 72 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63  r any other spec
25040 69 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c  ific process...<
25050 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74  h3>Simple Select
25060 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e   Processing</h3>
25070 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20  ..<p>Generating 
25080 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
25090 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73   simple SELECT.s
250a0 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73  tatement is pres
250b0 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20  ented as a four 
250c0 73 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20  step process in 
250d0 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
250e0 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  below:..<ol>.  <
250f0 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61  li> <p>[FROM cla
25100 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  use] processing:
25110 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   The input data 
25120 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
25130 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20  ELECT is.       
25140 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20  determined. The 
25150 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69  input data is ei
25160 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20  ther implicitly 
25170 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74  a single row wit
25180 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d  h 0.       colum
25190 6e 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ns (if there is 
251a0 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20  no FROM clause) 
251b0 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  or is determined
251c0 20 62 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20   by the FROM.   
251d0 20 20 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c      clause..  <l
251e0 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61  i> <p>[WHERE cla
251f0 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  use] processing:
25200 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   The input data 
25210 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e  is filtered usin
25220 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20 20  g the WHERE.    
25230 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65 73     clause expres
25240 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c  sion.  .  <li> <
25250 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55  p>[GROUP BY|GROU
25260 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64  P BY, HAVING and
25270 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65   result-column e
25280 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65  xpression] proce
25290 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54  ssing: .       T
252a0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
252b0 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65   rows is compute
252c0 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e 67  d by aggregating
252d0 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72 64   the data accord
252e0 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e  ing to.       an
252f0 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  y GROUP BY claus
25300 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e  e and calculatin
25310 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  g the result-set
25320 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72   expressions for
25330 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73   the.       rows
25340 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65 64   of the filtered
25350 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20   input dataset. 
25360 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53   .  <li> <p>[DIS
25370 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41  TINCT|DISTINCT/A
25380 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63  LL keyword] proc
25390 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71  essing: If the q
253a0 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45 43  uery is a "SELEC
253b0 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e 43  T.       DISTINC
253c0 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63  T" query, duplic
253d0 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
253e0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65  oved from the se
253f0 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
25400 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72  ..</ol>..<p>Ther
25410 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73 20  e are two types 
25420 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  of simple SELECT
25430 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67   statement - agg
25440 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d  regate and .non-
25450 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65  aggregate querie
25460 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c  s. ^A simple SEL
25470 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
25480 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
25490 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69  ery if.it contai
254a0 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f 55  ns either a GROU
254b0 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f  P BY clause or o
254c0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
254d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69  gate functions.i
254e0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
254f0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
25500 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
25510 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67   contains no agg
25520 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73  regate.functions
25530 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 63   or a GROUP BY c
25540 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e  lause, it is a n
25550 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
25560 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65  ry...<p><b>1. De
25570 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69  termination of i
25580 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20  nput data (FROM 
25590 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e  clause processin
255a0 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
255b0 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61  fragment fromcla
255c0 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  use</tcl>.<tcl>h
255d0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d  d_keywords {FROM
255e0 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a   clause}</tcl>..
255f0 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74  <p>The input dat
25600 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d 70  a used by a simp
25610 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 20  le SELECT query 
25620 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e  is a set of <i>N
25630 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20  </i> rows .each 
25640 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  <i>M</i> columns
25650 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20   wide...<p>^(If 
25660 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
25670 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
25680 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
25690 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
256a0 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20  the .input data 
256b0 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  is implicitly a 
256c0 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20  single row zero 
256d0 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28  columns wide)^ (
256e0 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20  i.e. <i>N</i>=1 
256f0 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e  and.<i>M</i>=0).
25700 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63  ..<p>If a FROM c
25710 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
25720 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20  ed, the data on 
25730 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53  which a simple S
25740 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72  ELECT query.oper
25750 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ates comes from 
25760 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  the one or more 
25770 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
25780 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74 61  ries (SELECT sta
25790 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e  tements.in paren
257a0 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69 65  thesis) specifie
257b0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
257c0 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41  FROM keyword. ^A
257d0 20 73 75 62 71 75 65 72 79 20 73 70 65 63 69 66   subquery specif
257e0 69 65 64 0a 69 6e 20 74 68 65 20 74 61 62 6c 65  ied.in the table
257f0 2d 6f 72 2d 73 75 62 71 75 65 72 79 20 66 6f 6c  -or-subquery fol
25800 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20  lowing the FROM 
25810 63 6c 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d  clause in a .sim
25820 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
25830 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20  ment is.handled 
25840 61 73 20 69 66 20 69 74 20 77 61 73 20 61 20 74  as if it was a t
25850 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
25860 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
25870 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
25880 68 65 0a 73 75 62 71 75 65 72 79 20 73 74 61 74  he.subquery stat
25890 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c  ement. ^Each col
258a0 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75  umn of the subqu
258b0 65 72 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c  ery has the.[col
258c0 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e  lation|collation
258d0 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b   sequence] and [
258e0 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65  affinity] of the
258f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65   corresponding e
25900 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65  xpression.in the
25910 20 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d   subquery statem
25920 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ent...<p>^If the
25930 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e  re is only a sin
25940 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62  gle table or sub
25950 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
25960 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  M.clause, then t
25970 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73  he input data us
25980 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
25990 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68   statement is th
259a0 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
259b0 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e  e.named table. ^
259c0 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
259d0 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20   than one table 
259e0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 46  or subquery in F
259f0 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20  ROM clause.then 
25a00 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
25a10 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f  all tables and/o
25a20 72 20 73 75 62 71 75 65 72 69 65 73 0a 61 72 65  r subqueries.are
25a30 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73   joined into a s
25a40 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f  ingle dataset fo
25a50 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
25a60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
25a70 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61   operate on..Exa
25a80 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74  ctly how the dat
25a90 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65  a is combined de
25aa0 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65  pends on the spe
25ab0 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72  cific [join-oper
25ac0 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d  ator] and.[join-
25ad0 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64  constraint] used
25ae0 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20   to connect the 
25af0 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
25b00 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a  ries together...
25b10 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20  <p>All joins in 
25b20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73 65 64  SQLite are based
25b30 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69 61   on the cartesia
25b40 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
25b50 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d   left and.right-
25b60 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e  hand datasets. ^
25b70 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
25b80 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
25b90 64 75 63 74 20 64 61 74 61 73 65 74 20 61 72 65  duct dataset are
25ba0 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c  , in .order, all
25bb0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
25bc0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61  the left-hand da
25bd0 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62  taset followed b
25be0 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  y all the column
25bf0 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68  s.of the right-h
25c00 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68  and dataset. ^Th
25c10 65 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20  ere is a row in 
25c20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
25c30 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f  oduct dataset.fo
25c40 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e  rmed by combinin
25c50 67 20 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f  g each unique co
25c60 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72  mbination of a r
25c70 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  ow from the left
25c80 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74  -hand .and right
25c90 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
25ca0 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
25cb0 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61  , if the left-ha
25cc0 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69  nd dataset consi
25cd0 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c 2f  sts of.<i>Nlhs</
25ce0 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d 6c  i> rows of <i>Ml
25cf0 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  hs</i> columns, 
25d00 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68 61  and the right-ha
25d10 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69  nd dataset of.<i
25d20 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73 20 6f  >Nrhs</i> rows o
25d30 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20 63 6f  f <i>Mrhs</i> co
25d40 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
25d50 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
25d60 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20 6f  t is a.dataset o
25d70 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c 2f  f <i>Nlhs.Nrhs</
25d80 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20 63 6f  i> rows, each co
25d90 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68 73  ntaining <i>Mlhs
25da0 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  +Mrhs</i> column
25db0 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  s.)^..<p>^If the
25dc0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
25dd0 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20  s "CROSS JOIN", 
25de0 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
25df0 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a  OIN" or a comma.
25e00 28 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20  (",") and there 
25e10 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e  is no ON or USIN
25e20 47 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  G clause, then t
25e30 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
25e40 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20   join is.simply 
25e50 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
25e60 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
25e70 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
25e80 20 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a   datasets. .If j
25e90 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65  oin-operator doe
25ea0 73 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49  s have ON or USI
25eb0 4e 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73  NG clauses, thos
25ec0 65 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63  e are handled ac
25ed0 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66  cording to.the f
25ee0 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20  ollowing bullet 
25ef0 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  points:..<ul>.  
25f00 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
25f10 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
25f20 73 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65  se then the ON e
25f30 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20  xpression is.   
25f40 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f      evaluated fo
25f50 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
25f60 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
25f70 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20  uct as a .      
25f80 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
25f90 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73  sion]. Only rows
25fa0 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65   for which the e
25fb0 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
25fc0 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74  tes to .       t
25fd0 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64  rue are included
25fe0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
25ff0 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  t.)^..  <li> <p>
26000 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55  ^If there is a U
26010 53 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20  SING clause.    
26020 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20     then each of 
26030 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
26040 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20   specified must 
26050 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74  exist in the dat
26060 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20  asets to .      
26070 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61   both the left a
26080 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  nd right of the 
26090 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e  join-operator. ^
260a0 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f  (For each pair o
260b0 66 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63  f named.       c
260c0 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72  olumns, the expr
260d0 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20  ession "lhs.X = 
260e0 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61  rhs.X" is evalua
260f0 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
26100 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63   of.       the c
26110 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
26120 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65   as a [boolean e
26130 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79  xpression]. Only
26140 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a   rows for which.
26150 20 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20         all such 
26160 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
26170 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72  uates to true ar
26180 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20  e included from 
26190 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c  the.       resul
261a0 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63  t set.)^ ^When c
261b0 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20  omparing values 
261c0 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61  as a result of a
261d0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
261e0 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c  he.       normal
261f0 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c   rules for handl
26200 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20  ing affinities, 
26210 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
26220 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20  ces and NULL.   
26230 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f      values in co
26240 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e  mparisons apply.
26250 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f   ^The column fro
26260 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e  m the dataset on
26270 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74   the.       left
26280 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
26290 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
262a0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  is considered to
262b0 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d   be on the left-
262c0 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65  hand.       side
262d0 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
262e0 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20  on operator (=) 
262f0 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
26300 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20   of collation . 
26310 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61        sequence a
26320 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63  nd affinity prec
26330 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20  edence...       
26340 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69  <p>^For each pai
26350 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65  r of columns ide
26360 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49  ntified by a USI
26370 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63  NG clause, the c
26380 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f  olumn.       fro
26390 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  m the right-hand
263a0 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74   dataset is omit
263b0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69  ted from the joi
263c0 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68  ned dataset. ^Th
263d0 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68  is .       is th
263e0 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63  e only differenc
263f0 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e  e between a USIN
26400 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73  G clause and its
26410 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20   equivalent ON. 
26420 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
26430 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
26440 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  f the NATURAL ke
26450 79 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20  yword is in the 
26460 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68  join-operator th
26470 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70  en an.       imp
26480 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75  licit USING clau
26490 73 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74  se is added to t
264a0 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69  he join-constrai
264b0 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69  nts. The implici
264c0 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63  t.       USING c
264d0 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65  lause contains e
264e0 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
264f0 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70  n names that app
26500 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20  ear in both.    
26510 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20     the left and 
26520 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
26530 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66   datasets.)^ ^If
26540 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
26550 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  ght-hand.       
26560 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66  input datasets f
26570 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e  eature no common
26580 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74   column names, t
26590 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20  hen the NATURAL 
265a0 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68  keyword.       h
265b0 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20  as no effect on 
265c0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
265d0 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e  he join. ^A USIN
265e0 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d  G or ON clause m
265f0 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65  ay.       not be
26600 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e   added to a join
26610 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
26620 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
26630 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ord...  <li> <p>
26640 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  ^(If the join-op
26650 65 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46  erator is a "LEF
26660 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54  T JOIN" or "LEFT
26670 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68   OUTER JOIN", th
26680 65 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a  en.       after.
26690 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72         the ON or
266a0 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67   USING filtering
266b0 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65   clauses have be
266c0 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65  en applied, an e
266d0 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20  xtra row is .   
266e0 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65      added to the
266f0 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68   output for each
26700 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67   row in the orig
26710 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69  inal left-hand i
26720 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74  nput .       dat
26730 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73  aset that corres
26740 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73  ponds to no rows
26750 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63   at all in the c
26760 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20  omposite.       
26770 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29  dataset (if any)
26780 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72  .)^ ^The added r
26790 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c  ows contain NULL
267a0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
267b0 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68  olumns.       th
267c0 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
267d0 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73  y contain values
267e0 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
267f0 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
26800 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  t.       dataset
26810 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  .  .</ul>..<p>^(
26820 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74  When more than t
26830 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f  wo tables are jo
26840 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73  ined together as
26850 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20   part of a FROM 
26860 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e  clause,.the join
26870 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20   operations are 
26880 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64  processed in ord
26890 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
268a0 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
268b0 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d  .words, the FROM
268c0 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d   clause (A join-
268d0 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32  op-1 B join-op-2
268e0 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20   C) is computed 
268f0 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d  as .((A join-op-
26900 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  1 B) join-op-2 C
26910 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ).)^..<tcl>hd_fr
26920 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e  agment crossjoin
26930 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f   {treats the CRO
26940 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72  SS JOIN operator
26950 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c   specially}</tcl
26960 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74  >.<p><b>Side not
26970 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c  e: Special handl
26980 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
26990 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73  N.</b>.^There is
269a0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
269b0 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45  etween the "INNE
269c0 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
269d0 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65  and "," join.ope
269e0 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65  rators. They are
269f0 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65   completely inte
26a00 72 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53  rchangeable in S
26a10 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52  QLite..^(The "CR
26a20 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f  OSS JOIN" join o
26a30 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73  perator produces
26a40 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74   the same result
26a50 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20   as the ."INNER 
26a60 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
26a70 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29  d "," operators)
26a80 5e 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72  ^, but is .<a hr
26a90 65 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68  ef=optoverview.h
26aa0 74 6d 6c 23 63 72 6f 73 73 6a 6f 69 6e 3e 68 61  tml#crossjoin>ha
26ab0 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74 6c  ndled differentl
26ac0 79 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f  y by the query.o
26ad0 70 74 69 6d 69 7a 65 72 3c 2f 61 3e 20 69 6e 20  ptimizer</a> in 
26ae0 74 68 61 74 20 69 74 20 70 72 65 76 65 6e 74 73  that it prevents
26af0 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
26b00 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65  izer from reorde
26b10 72 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20  ring.the tables 
26b20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e  in the join.  An
26b30 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f   application pro
26b40 67 72 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20  grammer can use 
26b50 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a  the CROSS JOIN .
26b60 6f 70 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65  operator to dire
26b70 63 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20 74  ctly influence t
26b80 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61  he algorithm tha
26b90 74 20 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69  t is chosen to i
26ba0 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c  mplement.the SEL
26bb0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
26bc0 41 76 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53  Avoid using CROS
26bd0 53 20 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e  S JOIN except in
26be0 20 73 70 65 63 69 66 69 63 20 73 69 74 75 61 74   specific situat
26bf0 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75  ions .where manu
26c00 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68  al control of th
26c10 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
26c20 72 20 69 73 20 64 65 73 69 72 65 64 2e 20 20 41  r is desired.  A
26c30 76 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53  void using.CROSS
26c40 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74   JOIN early in t
26c50 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f  he development o
26c60 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  f an application
26c70 20 61 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a   as doing so is.
26c80 61 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  a <a href="http:
26c90 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b  //c2.com/cgi/wik
26ca0 69 3f 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d  i?PrematureOptim
26cb0 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75  ization">prematu
26cc0 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c  re.optimization<
26cd0 2f 61 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61  /a>.  The specia
26ce0 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52  l handling of CR
26cf0 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53  OSS JOIN is an S
26d00 51 4c 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66  QLite-specific.f
26d10 65 61 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f  eature and is no
26d20 74 20 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e  t a part of stan
26d30 64 61 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20  dard SQL..      
26d40 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d   ..<tcl>hd_fragm
26d50 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c  ent whereclause<
26d60 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
26d70 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c  ywords {WHERE cl
26d80 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c  ause}</tcl>.<p><
26d90 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73  b>2. WHERE claus
26da0 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e  e filtering.</b>
26db0 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52  ..<p>^(If a WHER
26dc0 45 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  E clause is spec
26dd0 69 66 69 65 64 2c 20 74 68 65 20 57 48 45 52 45  ified, the WHERE
26de0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
26df0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61  valuated for .ea
26e00 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e  ch row in the in
26e10 70 75 74 20 64 61 74 61 20 61 73 20 61 20 5b 62  put data as a [b
26e20 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
26e30 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72  n]. All rows for
26e40 20 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45   which the.WHERE
26e50 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
26e60 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
26e70 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75 64  false are exclud
26e80 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
26e90 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69  set before.conti
26ea0 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e  nuing.)^..<p><b>
26eb0 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
26ec0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
26ed0 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
26ee0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
26ef0 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
26f00 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
26f10 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
26f20 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
26f30 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
26f40 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
26f50 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
26f60 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
26f70 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
26f80 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
26f90 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
26fa0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
26fb0 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
26fc0 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
26fd0 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
26fe0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
26ff0 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
27000 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
27010 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
27020 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
27030 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
27040 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
27050 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
27060 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
27070 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
27080 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
27090 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
270a0 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
270b0 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
270c0 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
270d0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
270e0 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
270f0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
27100 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
27110 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
27120 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
27130 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
27140 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
27150 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
27160 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
27170 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
27180 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
27190 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
271a0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
271b0 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
271c0 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
271d0 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
271e0 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
271f0 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
27200 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
27210 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
27220 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
27230 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
27240 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
27250 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
27260 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
27270 6e 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20  n than a result 
27280 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
27290 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20  )^.^(It is also 
272a0 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
272b0 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e  a "*" or "alias.
272c0 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
272d0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
272e0 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73  .query that does
272f0 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d   not have a FROM
27300 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20   clause.)^..<p> 
27310 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ^(The number of 
27320 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
27330 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
27340 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
27350 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75  statement.is equ
27360 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  al to the number
27370 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
27380 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
27390 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66  pression list af
273a0 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e  ter.substitution
273b0 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e   of * and alias.
273c0 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e  * expressions.)^
273d0 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77   Each result row
273e0 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62   is calculated b
273f0 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y.evaluating the
27400 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
27410 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
27420 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20  ssion list with 
27430 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e  respect to a.sin
27440 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74  gle row of input
27450 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67   data or, for ag
27460 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c  gregate queries,
27470 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
27480 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73   a group.of rows
27490 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  ...<ul>.  <li><p
274a0 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
274b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
274c0 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
274d0 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20  query</b>, then 
274e0 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73  .    each expres
274f0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
27500 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
27510 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  st is evaluated 
27520 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a  for each row in.
27530 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20      the dataset 
27540 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20  filtered by the 
27550 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20  WHERE clause... 
27560 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
27570 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
27580 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
27590 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
275a0 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  t a GROUP.    BY
275b0 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
275c0 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  n each aggregate
275d0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
275e0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
275f0 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
27600 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20  once across the 
27610 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20  entire dataset. 
27620 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67  ^Each non-aggreg
27630 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20  ate expression. 
27640 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74     in the result
27650 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65  -set is evaluate
27660 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72  d once for an ar
27670 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
27680 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68  ed row of.    th
27690 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20  e dataset. ^The 
276a0 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79  same arbitrarily
276b0 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73   selected row is
276c0 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20   used for each. 
276d0 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65     non-aggregate
276e0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72   expression. ^Or
276f0 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74  , if the dataset
27700 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72   contains zero r
27710 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  ows, then .    e
27720 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  ach non-aggregat
27730 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
27740 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
27750 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69  t a row consisti
27760 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20  ng.    entirely 
27770 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  of NULL values..
27780 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67  .   <p>^The sing
27790 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
277a0 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65  -set data create
277b0 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
277c0 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20  the aggregate.  
277d0 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67    and non-aggreg
277e0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ate expressions 
277f0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
27800 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75  t forms the resu
27810 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67  lt of an.    agg
27820 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
27830 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20  hout a GROUP BY 
27840 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72  clause. ^An aggr
27850 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
27860 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20  out a.    GROUP 
27870 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73  BY clause always
27880 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79   returns exactly
27890 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61   one row of data
278a0 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20  , even if there 
278b0 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77  are.    zero row
278c0 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e  s of input data.
278d0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20  ..  <li><p>^(If 
278e0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
278f0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
27900 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
27910 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
27920 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
27930 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65  en each of the e
27940 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69  xpressions speci
27950 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
27960 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59  the.    GROUP BY
27970 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75   clause is evalu
27980 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
27990 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74  w of the dataset
279a0 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69  . Each row.    i
279b0 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20  s then assigned 
279c0 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73  to a "group" bas
279d0 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
279e0 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  s; rows for whic
279f0 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74  h.    the result
27a00 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
27a10 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70  the GROUP BY exp
27a20 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65  ressions are the
27a30 20 73 61 6d 65 20 61 72 65 0a 20 20 20 20 61 73   same are.    as
27a40 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61  signed to the sa
27a50 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72  me group.)^ ^For
27a60 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
27a70 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20   grouping rows, 
27a80 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73  NULL .    values
27a90 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
27aa0 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61  equal. ^The usua
27ab0 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c  l rules for [col
27ac0 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67  lation|selecting
27ad0 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e   a.    collation
27ae0 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20   sequence] with 
27af0 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65  which to compare
27b00 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70   text values app
27b10 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ly when evaluati
27b20 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ng.    expressio
27b30 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
27b40 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65   clause.  ^The e
27b50 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
27b60 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
27b70 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74  e.    do <em>not
27b80 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
27b90 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
27ba0 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
27bb0 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20  result. ^The.   
27bc0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
27bd0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
27be0 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67  e may not be agg
27bf0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
27c00 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66  ns...    <p>^(If
27c10 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
27c20 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
27c30 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  t is evaluated o
27c40 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f  nce for each gro
27c50 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20  up .    of rows 
27c60 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
27c70 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
27c80 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
27c90 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48  uating the.    H
27ca0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
27cb0 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70  false, the group
27cc0 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e   is discarded.)^
27cd0 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20   ^If the HAVING 
27ce0 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e  clause is.    an
27cf0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
27d00 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
27d10 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c  luated across al
27d20 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  l rows in the gr
27d30 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48  oup. ^If.    a H
27d40 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
27d50 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
27d60 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
27d70 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68  s evaluated with
27d80 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20   respect.    to 
27d90 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
27da0 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d  elected row from
27db0 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68   the group.  ^Th
27dc0 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
27dd0 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65  ion may.    refe
27de0 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
27df0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
27e00 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20  tions, that are 
27e10 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c  not in the resul
27e20 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e  t.</p>..    <p>^
27e30 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
27e40 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
27e50 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61  t is then evalua
27e60 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
27e70 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72  h.    group of r
27e80 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ows. ^If the exp
27e90 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67  ression is an ag
27ea0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
27eb0 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65  on, it is .    e
27ec0 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
27ed0 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
27ee0 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73  group. ^Otherwis
27ef0 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  e, it is evaluat
27f00 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61  ed against.    a
27f10 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72   single arbitrar
27f20 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66  ily chosen row f
27f30 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67  rom within the g
27f40 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20  roup. ^If there 
27f50 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e  is more.    than
27f60 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61   one non-aggrega
27f70 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  te expression in
27f80 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c   the result-set,
27f90 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20   then all such. 
27fa0 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61     expressions a
27fb0 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  re evaluated for
27fc0 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a   the same row...
27fd0 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f      <p>^Each gro
27fe0 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  up of input data
27ff0 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62  set rows contrib
28000 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  utes a single ro
28010 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65  w to the .    se
28020 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
28030 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69  . ^Subject to fi
28040 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74  ltering associat
28050 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54  ed with the DIST
28060 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64  INCT.    keyword
28070 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
28080 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
28090 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
280a0 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
280b0 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69  .    BY clause i
280c0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
280d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75  e number of grou
280e0 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75  ps of rows produ
280f0 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a  ced by applying.
28100 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59      the GROUP BY
28110 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75   and HAVING clau
28120 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65  ses to the filte
28130 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
28140 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e  t..</ul>..<p><b>
28150 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75  4. Removal of du
28160 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44 49  plicate rows (DI
28170 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e  STINCT processin
28180 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
28190 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63  fragment distinc
281a0 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
281b0 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e  keywords {DISTIN
281c0 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f  CT}</tcl>..<p>^O
281d0 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72  ne of the ALL or
281e0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
281f0 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68  ds may follow th
28200 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64  e SELECT keyword
28210 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
28220 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
28230 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
28240 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
28250 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a  T ALL, then the.
28260 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72 65  entire set of re
28270 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65  sult rows are re
28280 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
28290 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65  LECT. ^If neithe
282a0 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43  r ALL or.DISTINC
282b0 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74  T are present, t
282c0 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
282d0 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65   is as if ALL we
282e0 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e  re specified. .^
282f0 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  If the simple SE
28300 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54  LECT is a SELECT
28310 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20   DISTINCT, then 
28320 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
28330 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20  re removed.from 
28340 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
28350 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74  t rows before it
28360 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46   is returned. ^F
28370 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
28380 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70  of.detecting dup
28390 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f  licate rows, two
283a0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
283b0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
283c0 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f  e equal. ^The.no
283d0 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73  rmal rules for s
283e0 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
283f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f  tion sequence to
28400 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
28410 6c 75 65 73 20 77 69 74 68 0a 61 70 70 6c 79 2e  lues with.apply.
28420 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53  ..<h3>Compound S
28430 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73  elect Statements
28440 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
28450 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f 74 63 6c 3e  t compound</tcl>
28460 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
28470 73 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  s {compound sele
28480 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75  ct} {compound qu
28490 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 2f 68 33 3e  ery}</tcl>.</h3>
284a0 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65  ..<p>Two or more
284b0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
284c0 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65  tatements may be
284d0 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65 74   connected toget
284e0 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63 6f  her to form.a co
284f0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75 73  mpound SELECT us
28500 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20 55  ing the UNION, U
28510 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
28520 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f 70  ECT or EXCEPT op
28530 65 72 61 74 6f 72 2e 0a 5e 49 6e 20 61 20 63 6f  erator..^In a co
28540 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
28550 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
28560 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
28570 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65 20  return the same 
28580 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c  .number of resul
28590 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74  t columns. ^As t
285a0 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66  he components of
285b0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
285c0 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c  CT must.be simpl
285d0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
285e0 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f  nts, they may no
285f0 74 20 63 6f 6e 74 61 69 6e 20 4f 52 44 45 52 20  t contain ORDER 
28600 42 59 20 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75  BY or LIMIT clau
28610 73 65 73 2e 0a 5e 4f 52 44 45 52 20 42 59 20 61  ses..^ORDER BY a
28620 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
28630 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20   may only occur 
28640 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
28650 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
28660 64 0a 53 45 4c 45 43 54 2e 20 20 0a 0a 3c 70 3e  d.SELECT.  ..<p>
28670 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
28680 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
28690 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
286a0 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
286b0 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
286c0 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
286d0 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
286e0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
286f0 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
28700 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
28710 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
28720 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
28730 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
28740 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
28750 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
28760 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
28770 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
28780 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
28790 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
287a0 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
287b0 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
287c0 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
287d0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
287e0 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
287f0 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
28800 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
28810 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
28820 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
28830 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
28840 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
28850 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
28860 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
28870 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
28880 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
28890 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
288a0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
288b0 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
288c0 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
288d0 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
288e0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
288f0 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
28900 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
28910 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
28920 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
28930 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
28940 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
28950 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
28960 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
28970 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
28980 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
28990 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
289a0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
289b0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
289c0 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
289d0 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
289e0 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
289f0 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
28a00 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
28a10 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
28a20 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
28a30 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
28a40 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
28a50 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
28a60 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
28a70 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
28a80 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
28a90 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
28aa0 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
28ab0 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
28ac0 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
28ad0 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
28ae0 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
28af0 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
28b00 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
28b10 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
28b20 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
28b30 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
28b40 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
28b50 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
28b60 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
28b70 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
28b80 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
28b90 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
28ba0 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
28bb0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
28bc0 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
28bd0 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
28be0 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
28bf0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
28c00 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
28c10 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
28c20 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
28c30 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
28c40 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
28c50 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
28c60 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 52  by}</tcl>.<h3>OR
28c70 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
28c80 2f 4f 46 46 53 45 54 20 43 6c 61 75 73 65 73 3c  /OFFSET Clauses<
28c90 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45  /h3>..<p>If a SE
28ca0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
28cb0 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f 72 65  hat returns more
28cc0 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f   than one row do
28cd0 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f  es not have an.O
28ce0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
28cf0 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
28d00 63 68 20 74 68 65 20 72 6f 77 73 20 61 72 65 20  ch the rows are 
28d10 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
28d20 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20  fined..Or, if a 
28d30 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28d40 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20 4f 52   does have an OR
28d50 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
28d60 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  hen the list of.
28d70 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74 74 61  expressions atta
28d80 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52 44 45  ched to the ORDE
28d90 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65 20 74  R BY determine t
28da0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
28db0 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74 75 72  h rows.are retur
28dc0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
28dd0 20 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74   ^Rows are first
28de0 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e   sorted based on
28df0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
28e00 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c  evaluating the l
28e10 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
28e20 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52  ion in the ORDER
28e30 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74   BY list, then t
28e40 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62  ies are broken.b
28e50 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
28e60 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73   second left-mos
28e70 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  t expression and
28e80 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65   so on. The orde
28e90 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72  r in which.two r
28ea0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  ows for which al
28eb0 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
28ec0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
28ed0 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20  to equal values 
28ee0 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20  are.returned is 
28ef0 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68  undefined. ^Each
28f00 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
28f10 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69  sion may be opti
28f20 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  onally followed.
28f30 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  by one of the ke
28f40 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c  ywords ASC (smal
28f50 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72  ler values are r
28f60 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f  eturned first) o
28f70 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76  r DESC (larger.v
28f80 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
28f90 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e  ed first). ^If n
28fa0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
28fb0 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64  SC are specified
28fc0 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65  , rows.are sorte
28fd0 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28  d in ascending (
28fe0 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66  smaller values f
28ff0 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64  irst) order by d
29000 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68  efault...<p>Each
29010 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
29020 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65  sion is processe
29030 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
29040 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ol>.<li><p>^
29050 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
29060 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
29070 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72  constant integer
29080 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72   K then the.expr
29090 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
290a0 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f  ered an alias fo
290b0 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  r the K-th colum
290c0 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
290d0 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65  set.(columns are
290e0 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c   numbered from l
290f0 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61  eft to right sta
29100 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a  rting with 1)...
29110 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
29120 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
29130 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
29140 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70  ier that corresp
29150 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61  onds to.the alia
29160 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  s of one of the 
29170 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20  output columns, 
29180 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
29190 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
291a0 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d.an alias for t
291b0 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69  hat column...<li
291c0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
291d0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
291e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
291f0 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69  y other expressi
29200 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75  on, it .is evalu
29210 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 74  ated and the ret
29220 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
29230 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
29240 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
29250 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
29260 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
29270 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
29280 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
29290 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
292a0 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
292b0 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
292c0 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
292d0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
292e0 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
292f0 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
29300 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
29310 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
29320 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
29330 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
29340 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
29350 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
29360 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
29370 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
29380 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
29390 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
293a0 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
293b0 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
293c0 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
293d0 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
293e0 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
293f0 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
29400 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
29410 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
29420 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
29430 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
29440 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
29450 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
29460 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
29470 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
29480 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
29490 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
294a0 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
294b0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
294c0 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
294d0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
294e0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
294f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
29500 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
29510 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
29520 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
29530 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
29540 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
29550 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
29560 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
29570 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
29580 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
29590 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
295a0 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
295b0 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
295c0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
295d0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
295e0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
295f0 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
29600 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
29610 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
29620 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
29630 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
29640 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
29650 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
29660 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
29670 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
29680 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
29690 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
296a0 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
296b0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
296c0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c  T statement, all
296d0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
296e0 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65  sions are handle
296f0 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72  d.as aliases for
29700 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
29710 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  lt columns of th
29720 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  e compound SELEC
29730 54 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  T..^(If an ORDER
29740 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
29750 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
29760 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
29770 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
29780 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
29790 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
297a0 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
297b0 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
297c0 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
297d0 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
297e0 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
297f0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
29800 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
29810 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
29820 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
29830 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
29840 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
29850 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
29860 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
29870 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
29880 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
29890 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
298a0 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
298b0 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
298c0 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
298d0 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
298e0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
298f0 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
29900 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
29910 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
29920 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
29930 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
29940 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
29950 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
29960 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
29970 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
29980 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
29990 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
299a0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
299b0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
299c0 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
299d0 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
299e0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
299f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
29a00 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
29a10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
29a20 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
29a30 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
29a40 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
29a50 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
29a60 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
29a70 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
29a80 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
29a90 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
29aa0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
29ab0 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
29ac0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
29ad0 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
29ae0 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
29af0 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
29b00 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
29b10 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
29b20 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
29b30 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
29b40 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
29b50 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
29b60 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
29b70 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
29b80 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
29b90 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
29ba0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
29bb0 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
29bc0 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
29bd0 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
29be0 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
29bf0 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
29c00 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
29c10 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
29c20 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
29c30 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
29c40 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
29c50 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
29c60 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
29c70 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
29c80 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
29c90 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
29ca0 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
29cb0 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
29cc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
29cd0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
29ce0 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
29cf0 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
29d00 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
29d10 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
29d20 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
29d30 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
29d40 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
29d50 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
29d60 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
29d70 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
29d80 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
29d90 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
29da0 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
29db0 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
29dc0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
29dd0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
29de0 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
29df0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
29e00 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
29e10 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
29e20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
29e30 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
29e40 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
29e50 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
29e60 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
29e70 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
29e80 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
29e90 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
29ea0 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
29eb0 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
29ec0 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
29ed0 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
29ee0 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
29ef0 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
29f00 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
29f10 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
29f20 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
29f30 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
29f40 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
29f50 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
29f60 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
29f70 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
29f80 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
29f90 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
29fa0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
29fb0 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
29fc0 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
29fd0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
29fe0 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
29ff0 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
2a000 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
2a010 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
2a020 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
2a030 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
2a040 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
2a050 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
2a060 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
2a070 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
2a080 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
2a090 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
2a0a0 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
2a0b0 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
2a0c0 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
2a0d0 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
2a0e0 4d 49 54 2e 20 54 68 69 73 20 69 73 20 69 6e 74  MIT. This is int
2a0f0 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
2a100 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
2a110 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
2a120 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
2a130 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  stems...<tcl>hd_
2a140 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20  fragment values 
2a150 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 3c  {VALUES clause}<
2a160 2f 74 63 6c 3e 0a 3c 68 33 3e 56 41 4c 55 45 53  /tcl>.<h3>VALUES
2a170 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c   clauses</h3>..<
2a180 70 3e 54 68 65 20 70 68 72 61 73 65 20 22 56 41  p>The phrase "VA
2a190 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73  LUES(<i>expr-lis
2a1a0 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68  t</i>)" means th
2a1b0 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20  e same thing.as 
2a1c0 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  "SELECT <i>expr-
2a1d0 6c 69 73 74 3c 2f 69 3e 22 2e 20 20 54 68 65 20  list</i>".  The 
2a1e0 70 68 72 61 73 65 0a 22 56 41 4c 55 45 53 28 3c  phrase."VALUES(<
2a1f0 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69  i>expr-list-1</i
2a200 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d  >),...,(<i>expr-
2a210 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61  list-N</i>)" mea
2a220 6e 73 20 74 68 65 20 73 61 6d 65 0a 74 68 69 6e  ns the same.thin
2a230 67 20 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e  g as "SELECT <i>
2a240 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20  expr-list-1</i> 
2a250 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e  UNION ALL ... UN
2a260 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45 43 54 20 3c  ION ALL.SELECT <
2a270 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69  i>expr-list-N</i
2a280 3e 22 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f  >".  There is no
2a290 20 61 64 76 61 6e 74 61 67 65 20 74 6f 20 75 73   advantage to us
2a2a0 69 6e 67 20 6f 6e 65 20 66 6f 72 6d 0a 6f 76 65  ing one form.ove
2a2b0 72 20 74 68 65 20 6f 74 68 65 72 2e 20 20 42 6f  r the other.  Bo
2a2c0 74 68 20 66 6f 72 6d 73 20 79 69 65 6c 64 20 74  th forms yield t
2a2d0 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61  he same result a
2a2e0 6e 64 20 62 6f 74 68 20 66 6f 72 6d 73 20 75 73  nd both forms us
2a2f0 65 0a 74 68 65 20 73 61 6d 65 20 61 6d 6f 75 6e  e.the same amoun
2a300 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6e 64 20  t of memory and 
2a310 70 72 6f 63 65 73 73 69 6e 67 20 74 69 6d 65 2e  processing time.
2a320 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20  ...<h3>The WITH 
2a330 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  Clause</h3>..<p>
2a340 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2a350 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  s may be optiona
2a360 6c 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  l preceded by a 
2a370 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61  single.[WITH cla
2a380 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65  use] that define
2a390 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63  s one or more [c
2a3a0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
2a3b0 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 69  essions].for usi
2a3c0 6e 67 20 77 69 74 68 69 6e 20 74 68 65 20 53 45  ng within the SE
2a3d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
2a3e0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2a3f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a430 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
2a440 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
2a450 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52  ATE *UPDATEs}..R
2a460 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
2a470 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2a480 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
2a490 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2a4a0 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64  t is used to mod
2a4b0 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  ify a subset of 
2a4c0 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65  the values store
2a4d0 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f  d in .zero or mo
2a4e0 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64  re rows of the d
2a4f0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64  atabase table id
2a500 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
2a510 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61  .<i>qualified-ta
2a520 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
2a530 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
2a540 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2a550 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
2a560 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2a570 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ment does not ha
2a580 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  ve a WHERE claus
2a590 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  e, all rows in t
2a5a0 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64  he.table are mod
2a5b0 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44  ified by the UPD
2a5c0 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ATE. ^Otherwise,
2a5d0 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65   the UPDATE affe
2a5e0 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72  cts only those.r
2a5f0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2a600 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
2a610 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
2a620 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2a630 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61  on as a .[boolea
2a640 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f  n expression|boo
2a650 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
2a660 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73  is true]. ^It is
2a670 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66   not an error if
2a680 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2a690 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75  e does not evalu
2a6a0 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20  ate to true for 
2a6b0 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74  any row in the t
2a6c0 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74  able - this just
2a6d0 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20  .means that the 
2a6e0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2a6f0 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f   affects zero ro
2a700 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69  ws...<p>The modi
2a710 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74  fications made t
2a720 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63  o each row affec
2a730 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45  ted by an UPDATE
2a740 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64   statement are.d
2a750 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
2a760 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
2a770 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  ents following t
2a780 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20  he SET keyword. 
2a790 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20  Each.assignment 
2a7a0 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75  specifies a colu
2a7b0 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c  mn name to the l
2a7c0 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c  eft of the equal
2a7d0 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61  s sign and a.sca
2a7e0 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74  lar expression t
2a7f0 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f  o the right. ^Fo
2a800 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20  r each affected 
2a810 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63  row, the named c
2a820 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74  olumns.are set t
2a830 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75  o the values fou
2a840 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
2a850 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2a860 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65  ng scalar .expre
2a870 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69  ssions. ^If a si
2a880 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ngle column-name
2a890 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68   appears more th
2a8a0 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c  an once in the l
2a8b0 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e  ist of.assignmen
2a8c0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61  t expressions, a
2a8d0 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74  ll but the right
2a8e0 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  most occurrence 
2a8f0 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c  is ignored. ^Col
2a900 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74  umns.that do not
2a910 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c   appear in the l
2a920 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
2a930 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f  ts are left unmo
2a940 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61  dified. ^The sca
2a950 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  lar.expressions 
2a960 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  may refer to col
2a970 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20  umns of the row 
2a980 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e  being updated. ^
2a990 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c  In this case all
2a9a0 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
2a9b0 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
2a9c0 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
2a9d0 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
2a9e0 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  e...<p>^The opti
2a9f0 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
2aa00 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
2aa10 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65  user to nominate
2aa20 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73   a specific.cons
2aa30 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
2aa40 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
2aa50 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
2aa60 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41  ng this one UPDA
2aa70 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65  TE command..Refe
2aa80 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e  r to the section
2aa90 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f   entitled [ON CO
2aaa0 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
2aab0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2aac0 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  on...<h3>Restric
2aad0 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20  tions on UPDATE 
2aae0 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
2aaf0 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
2ab00 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h3>..<p>The fo
2ab10 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
2ab20 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69  al syntax restri
2ab30 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20  ctions apply to 
2ab40 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2ab50 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74  s that.occur wit
2ab60 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
2ab70 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
2ab80 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  R] statement.  .
2ab90 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ul>.  <li><p>^
2aba0 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  The <i>table-nam
2abb0 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20  e</i> specified 
2abc0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
2abd0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77  DATE statement w
2abe0 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
2abf0 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
2ac00 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
2ac10 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
2ac20 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64  , the.      <i>d
2ac30 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
2ac40 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
2ac50 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
2ac60 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
2ac70 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
2ac80 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
2ac90 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
2aca0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
2acb0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
2acc0 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
2acd0 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
2ace0 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
2acf0 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
2ad00 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
2ad10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
2ad20 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
2ad30 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
2ad40 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
2ad50 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
2ad60 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
2ad70 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2ad80 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2ad90 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
2ada0 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
2adb0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2adc0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
2add0 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
2ade0 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
2adf0 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
2ae00 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
2ae10 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
2ae20 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
2ae30 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
2ae40 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
2ae50 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
2ae60 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
2ae70 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
2ae80 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
2ae90 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
2aea0 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
2aeb0 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
2aec0 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
2aed0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
2aee0 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
2aef0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
2af00 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
2af10 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
2af20 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
2af30 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
2af40 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
2af50 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
2af60 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
2af70 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
2af80 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
2af90 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
2afa0 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
2afb0 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
2afc0 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
2afd0 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
2afe0 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
2aff0 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
2b000 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2b010 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
2b020 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2b030 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
2b040 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
2b050 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
2b060 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
2b070 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
2b080 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
2b090 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
2b0a0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
2b0b0 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2b0c0 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
2b0d0 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
2b0e0 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
2b0f0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2b100 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2b110 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
2b120 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
2b130 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
2b140 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
2b150 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
2b160 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
2b170 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
2b180 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
2b190 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
2b1a0 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
2b1b0 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
2b1c0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
2b1d0 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
2b1e0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2b1f0 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
2b200 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
2b210 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
2b220 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
2b230 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
2b240 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
2b250 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
2b260 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
2b270 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
2b280 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
2b290 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
2b2a0 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
2b2b0 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
2b2c0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2b2d0 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
2b2e0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
2b2f0 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
2b300 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
2b310 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
2b320 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
2b330 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
2b340 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2b350 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
2b360 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
2b370 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
2b380 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
2b390 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
2b3a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
2b3b0 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
2b3c0 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
2b3d0 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
2b3e0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
2b3f0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2b400 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
2b410 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
2b420 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
2b430 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
2b440 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
2b450 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
2b460 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
2b470 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
2b480 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2b490 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
2b4a0 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
2b4b0 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
2b4c0 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
2b4d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
2b4e0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
2b4f0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
2b500 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
2b510 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
2b520 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
2b530 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
2b540 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
2b550 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
2b560 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
2b570 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
2b580 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
2b590 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
2b5a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b5b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b5e0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2b5f0 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
2b600 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
2b610 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
2b620 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
2b630 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
2b640 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
2b650 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
2b660 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
2b670 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
2b680 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
2b690 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
2b6a0 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
2b6b0 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
2b6c0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
2b6d0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
2b6e0 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
2b6f0 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
2b700 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
2b710 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
2b720 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
2b730 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
2b740 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
2b750 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
2b760 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
2b770 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
2b780 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
2b790 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
2b7a0 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
2b7b0 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
2b7c0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
2b7d0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
2b7e0 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
2b7f0 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
2b800 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
2b810 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2b820 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
2b830 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
2b840 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
2b850 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
2b860 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2b870 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
2b880 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
2b890 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
2b8a0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
2b8b0 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
2b8c0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
2b8d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2b8e0 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
2b8f0 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
2b900 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
2b910 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
2b920 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
2b930 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
2b940 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2b950 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
2b960 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
2b970 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
2b980 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
2b990 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
2b9a0 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
2b9b0 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
2b9c0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
2b9d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2b9e0 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
2b9f0 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
2ba00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
2ba10 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
2ba20 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
2ba30 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
2ba40 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
2ba50 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
2ba60 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
2ba70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2ba80 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
2ba90 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
2baa0 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
2bab0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
2bac0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
2bad0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
2bae0 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
2baf0 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
2bb00 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
2bb10 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
2bb20 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
2bb30 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
2bb40 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
2bb50 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
2bb60 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
2bb70 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
2bb80 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
2bb90 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
2bba0 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
2bbb0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
2bbc0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
2bbd0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
2bbe0 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
2bbf0 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
2bc00 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
2bc10 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
2bc20 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
2bc30 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
2bc40 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
2bc50 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
2bc60 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2bc70 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
2bc80 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2bc90 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
2bca0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
2bcb0 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
2bcc0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
2bcd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2bce0 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
2bcf0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
2bd00 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
2bd10 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
2bd20 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
2bd30 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
2bd40 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
2bd50 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
2bd60 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
2bd70 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
2bd80 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
2bd90 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
2bda0 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
2bdb0 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
2bdc0 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
2bdd0 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
2bde0 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
2bdf0 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
2be00 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
2be10 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
2be20 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
2be30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2be40 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
2be50 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
2be60 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
2be70 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
2be80 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
2be90 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
2bea0 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
2beb0 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
2bec0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
2bed0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
2bee0 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
2bef0 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
2bf00 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
2bf10 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
2bf20 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
2bf30 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
2bf40 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
2bf50 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
2bf60 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
2bf70 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
2bf80 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
2bf90 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
2bfa0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
2bfb0 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
2bfc0 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
2bfd0 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
2bfe0 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
2bff0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
2c000 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
2c010 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
2c020 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
2c030 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
2c040 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
2c050 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
2c060 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
2c070 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
2c080 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
2c090 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
2c0a0 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
2c0b0 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
2c0c0 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
2c0d0 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
2c0e0 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
2c0f0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
2c100 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
2c110 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
2c120 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
2c130 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
2c140 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
2c150 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
2c160 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
2c170 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
2c180 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
2c190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
2c1d0 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
2c1e0 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
2c1f0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
2c200 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
2c210 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
2c220 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f  XED BY phrase fo
2c230 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65  rces the [SQLite
2c240 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20   query planner] 
2c250 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75  to use a.particu
2c260 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20  lar named index 
2c270 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  on a [DELETE], [
2c280 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
2c290 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
2c2a0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
2c2b0 68 72 61 73 65 20 69 73 20 61 6e 20 65 78 74 65  hrase is an exte
2c2c0 6e 73 69 6f 6e 20 74 68 61 74 20 69 73 20 70 61  nsion that is pa
2c2d0 72 74 69 63 75 6c 61 72 20 74 6f 20 53 51 4c 69  rticular to SQLi
2c2e0 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f  te and.is not po
2c2f0 72 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72 20  rtable to other 
2c300 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
2c310 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44 45 58 45  ines..The INDEXE
2c320 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e 20  D BY phrase can 
2c330 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20 66  be seen in the f
2c340 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a  ollowing syntax.
2c350 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c  diagrams:</p>..<
2c360 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
2c370 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
2c380 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
2c390 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
2c3a0 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64   "INDEXED BY ind
2c3b0 65 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65 20  ex-name" phrase 
2c3c0 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74  specifies that t
2c3d0 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d  he named index.m
2c3e0 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f  ust be used in o
2c3f0 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  rder to look up 
2c400 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72  values on the pr
2c410 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e  eceding table..^
2c420 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f  If index-name do
2c430 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
2c440 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66  cannot be used f
2c450 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68  or the query, th
2c460 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69  en.the preparati
2c470 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  on of the SQL st
2c480 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e  atement fails..^
2c490 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  (The "NOT INDEXE
2c4a0 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
2c4b0 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
2c4c0 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
2c4d0 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
2c4e0 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
2c4f0 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
2c500 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
2c510 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
2c520 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
2c530 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
2c540 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
2c550 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
2c560 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
2c570 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
2c580 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
2c590 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
2c5a0 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a  ecified.)^</p>..
2c5b0 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61  <p>Some SQL data
2c5c0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f  base engines pro
2c5d0 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  vide non-standar
2c5e0 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69  d "hint" mechani
2c5f0 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65  sms which.can be
2c600 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68   used to give th
2c610 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
2c620 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68  r clues about wh
2c630 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68  at indices it sh
2c640 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70  ould.use for a p
2c650 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d  articular statem
2c660 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20  ent.  The INDEX 
2c670 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c  BY clause of SQL
2c680 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c  ite is .<em>not<
2c690 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d  /em> a hinting m
2c6a0 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20  echanism and it 
2c6b0 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73  should not be us
2c6c0 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65  ed as such..^The
2c6d0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
2c6e0 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
2c6f0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
2c700 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
2c710 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
2c720 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
2c730 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
2c740 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
2c750 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74  ex to use..^If t
2c760 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2c770 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  er is unable to 
2c780 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70  use the index sp
2c790 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49  ecified by the.I
2c7a0 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20  NDEX BY clause, 
2c7b0 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77  then the query w
2c7c0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
2c7d0 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
2c7e0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
2c7f0 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74  lause is <em>not
2c800 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66  </em> intended f
2c810 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67  or use in tuning
2c820 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  .the performance
2c830 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68   of a query.  Th
2c840 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  e intent of the 
2c850 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
2c860 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20  e is.to raise a 
2c870 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69  run-time error i
2c880 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
2c890 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70  e, such as dropp
2c8a0 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20  ing or.creating 
2c8b0 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73  an index, causes
2c8c0 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20   the query plan 
2c8d0 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69  for a time-sensi
2c8e0 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68  tive query.to ch
2c8f0 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58  ange.  The INDEX
2c900 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
2c910 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70  designed to help
2c920 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61   detect.undesira
2c930 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63  ble query plan c
2c940 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65  hanges during re
2c950 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67  gression testing
2c960 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65  ..Developers are
2c970 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f   admonished to o
2c980 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49  mit all use of I
2c990 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67  NDEXED BY during
2c9a0 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73  .application des
2c9b0 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ign, implementat
2c9c0 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e  ion, testing, an
2c9d0 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e  d tuning.  If.IN
2c9e0 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62  DEXED BY is to b
2c9f0 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69  e used at all, i
2ca00 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65  t should be inse
2ca10 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
2ca20 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65  .end of the deve
2ca30 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20  lopment process 
2ca40 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f  when "locking do
2ca50 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70  wn" a design.</p
2ca60 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a  >..<h3>See Also:
2ca70 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  </h3>..<ol>.<li>
2ca80 3c 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c  <p>The [query pl
2ca90 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d  anner checklist]
2caa0 20 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73   describes steps
2cab0 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
2cac0 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f  n.developers sho
2cad0 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  uld following to
2cae0 20 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75   help resolve qu
2caf0 65 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62  ery planner prob
2cb00 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65  lems..Notice the
2cb10 20 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66   that the use of
2cb20 20 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61   INDEXED BY is a
2cb30 20 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f   last resort, to
2cb40 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68   be used only.wh
2cb50 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61  en all other mea
2cb60 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a  sures fail.</p>.
2cb70 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f  .<li><p>[uplusco
2cb80 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20  ntrol|The unary 
2cb90 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61  "+" operator].ca
2cba0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73  n be used to dis
2cbb0 71 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e  qualify terms in
2cbc0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2cbd0 65 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e  e from use by in
2cbe0 64 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75  dices..Careful u
2cbf0 73 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61  se of unary + ca
2cc00 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70  n sometimes help
2cc10 20 70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65   prevent the que
2cc20 72 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a  ry planner from.
2cc30 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20  choosing a poor 
2cc40 69 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72 65  index without re
2cc50 73 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20  stricting it to 
2cc60 75 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66  using one specif
2cc70 69 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75  ic index..Carefu
2cc80 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75  l placement of u
2cc90 6e 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73  nary + operators
2cca0 20 69 73 20 61 20 62 65 74 74 65 72 20 6d 65 74   is a better met
2ccb0 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c  hod for controll
2ccc0 69 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63  ing .which indic
2ccd0 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20 61  es are used by a
2cce0 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69   query.</p>..<li
2ccf0 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33  ><p>The [sqlite3
2cd00 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
2cd10 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
2cd20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68  together with th
2cd30 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  e.[SQLITE_STMTST
2cd40 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54  ATUS_FULLSCAN_ST
2cd50 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  EP] and [SQLITE_
2cd60 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
2cd70 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73   verbs.can be us
2cd80 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20  ed to detect at 
2cd90 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e  run-time when an
2cda0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
2cdb0 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66  s not.making eff
2cdc0 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e  ective use of in
2cdd0 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70  dices.  Many app
2cde0 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72  lications may pr
2cdf0 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20  efer to.use the 
2ce00 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
2ce10 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63  atus()] interfac
2ce20 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65  e to detect inde
2ce30 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20  x misuse.rather 
2ce40 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44  than the INDEXED
2ce50 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72   BY phrase descr
2ce60 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c  ibed here.</p>.<
2ce70 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /ol>..<tcl>.####
2ce80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cec0 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69  #########.# A li
2ced0 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
2cee0 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
2cef0 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
2cf00 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
2cf10 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
2cf20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
2cf30 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
2cf40 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43  {.   ABORT.   AC
2cf50 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41  TION.   ADD.   A
2cf60 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41  FTER.   ALL.   A
2cf70 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a  LTER.   ANALYZE.
2cf80 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20     AND.   AS.   
2cf90 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20  ASC.   ATTACH.  
2cfa0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
2cfb0 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49    BEFORE.   BEGI
2cfc0 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  N.   BETWEEN.   
2cfd0 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20  BY.   CASCADE.  
2cfe0 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20   CASE.   CAST.  
2cff0 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54   CHECK.   COLLAT
2d000 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43  E.   COLUMN.   C
2d010 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43  OMMIT.   CONFLIC
2d020 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a  T.   CONSTRAINT.
2d030 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f     CREATE.   CRO
2d040 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41  SS.   CURRENT_DA
2d050 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  TE.   CURRENT_TI
2d060 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  ME.   CURRENT_TI
2d070 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42  MESTAMP.   DATAB
2d080 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  ASE.   DEFAULT. 
2d090 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45    DEFERRED.   DE
2d0a0 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
2d0b0 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45  TE.   DESC.   DE
2d0c0 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54  TACH.   DISTINCT
2d0d0 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a  .   DROP.   END.
2d0e0 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a     EACH.   ELSE.
2d0f0 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
2d100 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
2d110 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
2d120 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20  PLAIN.   FAIL.  
2d130 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
2d140 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
2d150 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
2d160 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
2d170 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
2d180 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
2d190 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
2d1a0 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
2d1b0 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
2d1c0 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
2d1d0 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
2d1e0 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
2d1f0 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
2d200 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
2d210 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
2d220 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
2d230 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
2d240 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
2d250 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20   OF.   OFFSET.  
2d260 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
2d270 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
2d280 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
2d290 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
2d2a0 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45  Y.   RAISE.   RE
2d2b0 43 55 52 53 49 56 45 0a 20 20 20 52 45 46 45 52  CURSIVE.   REFER
2d2c0 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a  ENCES.   REGEXP.
2d2d0 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45     REINDEX.   RE
2d2e0 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a  LEASE.   RENAME.
2d2f0 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45     REPLACE.   RE
2d300 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a  STRICT.   RIGHT.
2d310 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52     ROLLBACK.   R
2d320 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a  OW.   SAVEPOINT.
2d330 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54     SELECT.   SET
2d340 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
2d350 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20  P.   TEMPORARY. 
2d360 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20    THEN.   TO.   
2d370 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54  TRANSACTION.   T
2d380 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a  RIGGER.   UNION.
2d390 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44     UNIQUE.   UPD
2d3a0 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20  ATE.   USING.   
2d3b0 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53  VACUUM.   VALUES
2d3c0 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54  .   VIEW.   VIRT
2d3d0 55 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57  UAL.   WITH.   W
2d3e0 49 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20  ITHOUT.   WHEN. 
2d3f0 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
2d400 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
2d410 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
2d420 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
2d430 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
2d440 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72  ds {{*SQL keywor
2d450 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73  d} {SQL keywords
2d460 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49  }}.hd_puts {</DI
2d470 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  V>}.</tcl>..<p>T
2d480 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
2d490 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
2d4a0 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
2d4b0 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
2d4c0 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
2d4d0 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
2d4e0 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
2d4f0 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
2d500 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
2d510 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
2d520 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
2d530 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
2d540 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
2d550 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
2d560 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
2d570 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
2d580 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
2d590 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
2d5a0 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
2d5b0 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
2d5c0 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
2d5d0 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
2d5e0 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
2d5f0 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
2d600 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
2d610 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
2d620 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
2d630 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
2d640 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
2d650 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
2d660 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f  four ways of quo
2d670 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
2d680 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
2d690 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
2d6a0 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
2d6b0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
2d6c0 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
2d6d0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
2d6e0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
2d6f0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
2d700 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72   quotes is a str
2d710 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
2d720 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
2d730 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
2d740 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
2d750 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
2d760 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
2d770 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
2d780 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
2d790 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
2d7a0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
2d7b0 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
2d7c0 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
2d7d0 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
2d7e0 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
2d7f0 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
2d800 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20  ets is .        
2d810 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
2d820 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
2d830 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
2d840 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
2d850 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
2d860 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61  d by MS Access a
2d870 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e  nd SQL Server an
2d880 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
2d890 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
2d8a0 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
2d8b0 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  y.</td></tr>..<t
2d8c0 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
2d8d0 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77  op"><b>&#96;keyw
2d8e0 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64  ord&#96;</b></td
2d8f0 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
2d900 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
2d910 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63  sed in grave acc
2d920 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65  ents (ASCII code
2d930 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20   96) is .       
2d940 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
2d950 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
2d960 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
2d970 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
2d980 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
2d990 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20  ed by MySQL and 
2d9a0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
2d9b0 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
2d9c0 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
2d9d0 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
2d9e0 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
2d9f0 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72  >.</p>..<p>For r
2da00 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63  esilience when c
2da10 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68  onfronted with h
2da20 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74  istorical SQL st
2da30 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65  atements, SQLite
2da40 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20  .will sometimes 
2da50 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67  bend the quoting
2da60 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70   rules above:</p
2da70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ul>.<li><p>^
2da80 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
2da90 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65  single.quotes (e
2daa0 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20  x: <b>'key'</b> 
2dab0 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e  or <b>'glob'</b>
2dac0 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
2dad0 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20  ontext where.an 
2dae0 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c  identifier is al
2daf0 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20  lowed but where 
2db00 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
2db10 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c   is not allowed,
2db20 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20   then.the token 
2db30 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
2db40 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65   be an identifie
2db50 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  r instead of a s
2db60 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c  tring literal..<
2db70 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
2db80 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
2db90 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20  n double.quotes 
2dba0 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62  (ex: <b>"key"</b
2dbb0 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f  > or <b>"glob"</
2dbc0 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
2dbd0 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69   context where.i
2dbe0 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f  t cannot be reso
2dbf0 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74  lved to an ident
2dc00 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20  ifier but where 
2dc10 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
2dc20 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  .is allowed, the
2dc30 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n the token is u
2dc40 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
2dc50 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
2dc60 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69   instead.of an i
2dc70 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f  dentifier.</p></
2dc80 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72  li>.</ul>..<p>Pr
2dc90 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61  ogrammers are ca
2dca0 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75  utioned not to u
2dcb0 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70  se the two excep
2dcc0 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20  tions described 
2dcd0 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20  in.the previous 
2dce0 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70  bullets.  We emp
2dcf0 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79  hasize that they
2dd00 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74   exist only so t
2dd10 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d  hat old.and ill-
2dd20 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65  formed SQL state
2dd30 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63  ments will run c
2dd40 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72  orrectly.  Futur
2dd50 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
2dd60 4c 69 74 65 20 6d 69 67 68 74 20 72 61 69 73 65  Lite might raise
2dd70 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20   errors instead 
2dd80 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65  of accepting the
2dd90 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65   malformed.state
2dda0 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79  ments covered by
2ddb0 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
2ddc0 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  above.</p>..<p>.
2ddd0 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2dde0 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69  keywords from ti
2ddf0 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20  me to time when 
2de00 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20  it takes on new 
2de10 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20  features..So to 
2de20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64  prevent your cod
2de30 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f  e from being bro
2de40 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e  ken by future en
2de50 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20  hancements, you 
2de60 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20  should.normally 
2de70 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69  quote any identi
2de80 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20  fier that is an 
2de90 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
2dea0 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79   word, even if.y
2deb0 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74  ou do not have t
2dec0 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  o..</p>..<p>.The
2ded0 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77   list below show
2dee0 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b  s all possible k
2def0 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20  eywords used by 
2df00 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c  any build of.SQL
2df10 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ite regardless o
2df20 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  f [compile-time 
2df30 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74  options].  .Most
2df40 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66   reasonable conf
2df50 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d  igurations use m
2df60 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ost or all of th
2df70 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75  ese keywords,.bu
2df80 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20  t some keywords 
2df90 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77  may be omitted w
2dfa0 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  hen SQL language
2dfb0 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69   features are.di
2dfc0 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64  sabled..^(Regard
2dfd0 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
2dfe0 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2dff0 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e  ration, any iden
2e000 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e  tifier that is n
2e010 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77  ot on.the follow
2e020 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73  ing <tcl>hd_puts
2e030 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
2e040 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65  rd_list]</tcl> e
2e050 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e  lement.list is n
2e060 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20  ot a keyword to 
2e070 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69  the SQL parser i
2e080 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a  n SQLite:.</p>..
2e090 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
2e0a0 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
2e0b0 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  ><tr>.<td align=
2e0c0 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74  "left" valign="t
2e0d0 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e  op" width="20%">
2e0e0 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c  .<tcl>.set n [ll
2e0f0 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
2e100 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a  ist].set nCol 5.
2e110 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b  set nRow [expr {
2e120 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43  ($n+$nCol-1)/$nC
2e130 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72  ol}].set i 0.for
2e140 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f  each word $keywo
2e150 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b  rd_list {.  if {
2e160 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20  $i==$nRow} {.   
2e170 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c   hd_puts "</td><
2e180 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
2e190 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22  " align=\"left\"
2e1a0 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22   width=\"20%\">"
2e1b0 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d  .    set i 1.  }
2e1c0 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72   else {.    incr
2e1d0 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73   i.  }.  hd_puts
2e1e0 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d   "$word<br>\n".}
2e1f0 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74  .</tcl>.</td></t
2e200 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
2e210 6b 71 75 6f 74 65 3e 29 5e 0a                    kquote>)^.